
Lv.1
签名: 我正在做我的新一代枪战游戏,请尽情期待。 另外我非常抱歉暑假期间的断更!感谢您的谅解!
在 在线求助各位编程大佬,联机怎么做???? 中回复
引言
多房间联机就是每个玩家都可以加入其他玩家开放的房间或自己创建房间和自己的好基友或陌生人联机的一种方式
多房间联机可以很好的避免当前没有房间可用的问题也能让自己的程序更有喵(bushi)
接下来,我将以在我闲时用Nemo制作的“双人拿饼”游戏为例,手把手教你从新建列表开始制作一个多房间联机程序!
原理
多房间联机其实只需要用两个云列表就可以制作,但是需要把云列表进行巧妙地分配,尽量更加充分的利(榨)用(干)云列表的空间。在这里我们是这样分配的
首先,云列表的每一项都储存了一个房间的所有信息,即云列表的每一项都是一个房间。我们使用 把 “ ” 按 “ ” 分配成列表积木(见图1)来利用云列表每一项的空间。
(图1)↑
其中:
player列表中:
按“,”分配成列表的第一项是新建房间的玩家,即房主,玩家编号为1
按“,”分配成列表的第二项是进入游戏的玩家,即与房主一起游玩的另一位玩家,玩家编号为2
data列表中
按“,”分配成列表的第一项是剩余的饼的数量,初始数为15-40随机数
按“,”分配成列表的第二项是回合进行到的玩家,初始数为1,即房主先拿饼
(上方有不懂的不用慌,继续往下看说不定就懂了呢!)
在匹配成功后(匹配的教程在后面会有一个大板块),玩家就会不断的检测云列表中自己所在房间data列表的那一项的内容,如果发现data列表中按“,”分配成列表的第二项是自己的玩家编号时,系统则会提醒玩家做出操作(拿1个饼或拿2个饼),随后根据玩家所做出的操作修改饼数,再把data列表中按“,”分配成列表的第二项改为另一位玩家的玩家编号
不好理解吗?没事,我们举个栗子:
现在房主A,和房主的好基友B正在联机游玩,即他们所在的云列表对应项的内容是:
player:
A,B
data:
35(假设随机数随机到35),1
在这种情况下他们就匹配成功啦!
房主A的系统检测到data列表中按“,”分配成列表的第二项是1,就让A做出操作,A拿了一个饼,A的系统就把他们所在的云列表对应项的内容改为了:
player:
A,B
data:
34,2
B的系统检测到data列表中按“,”分配成列表的第二项是2,就让B做出操作,B拿了二个饼,B的系统就把他们所在的云列表对应项的内容改为了:
player:
A,B
data:
32,1
就这样又变成了A进行操作,B进行操作……
一直循环到data列表中按“,”分配成列表的第一项等于1或-1(如果还剩一个饼时有人拿了2个饼剩余饼数就会变为-1),系统判断胜利玩家,游戏结束!
很感谢你有耐心能够看到这里,想必你也已经跃跃欲试了吧!那么就让我们开始正式的教程吧!
一、页面设计
额,这个不用多说吧,反正我是这么设计的(很丑勿喷)
所有屏幕:
屏幕1:
屏幕2:
屏幕3:
我是建议把房主和玩家的屏幕分开的,因为这样会简单一点(至少我这么认为),但你也可以选择把他们组合在一起!
二、多房间联机部分制作
这里没什么好说的,原理上方也都讲过了,直接上积木吧!(有些难懂的地方已加注释)
注意:在这里i变量是用于遍历云列表的(话说啥时候能出个类似for循环的积木)
三、具体游戏部分制作
同样,上方原理部分讲的很清楚,直接上代码吧
屏幕:房主页面
屏幕:另一玩家页面
那么这次的教程到这里就已将接近尾声啦
很感谢你能够看到这里(不过话说做出来了吗)
那么就让我们相约在下个教程贴再见吧!
2024-06-21T21:19:46 点赞:0
在 各位,多人联机怎么做?求帮助。 中回复
我将代码分为4个大板块 匹配模块 游戏主要模块 判断对方是否非正常结束游戏模块(掉线模块) 程序自动重启模块 1,匹配模块。匹配模块主要用于玩家匹配,使两方玩家都能进入游戏,是非常重要的模块。我比较喜欢用云列表来做匹配,当某个玩家点击按钮或触发匹配的时候,如果云列表里没有玩家,或者只有一个人,这个时候,玩家才能匹配——将玩家的用户名放入云列表。一旦云列表里有两个人,且云列表里包含了自己的用户名,这说明,你正在匹配,而且已经匹配成功,这个时候就能跳转到游戏界面了 2,游戏主要模块。这一模块是你游戏的核心,根据不同的作品而异,但中心思想是不变的,用公有云变量来上传玩家数据,如坐 标,为了简单易懂,这里就不做公有云变量扩容了,分别取4个变量A方的x坐标,A方的y坐标,B方的x坐标,B方的y坐标。两个主要 角色,分别代表A,B。他们的位置是由那4个公有云变量决定的。任何整改都是修改云变量,如果这两个角色使用特效/技能,等动作 可以用云变量做广播: 当游戏结束后,也可以通过云变量广播来宣布游戏结束: 3,判断对方是否非正常结束游戏模块(掉线模块)。这一模块主要是判断对方是否掉线,或延迟过长。在双人对局时,对方可能会 在游戏还没结束就离开游戏,这样使得另一方无法继续游戏,而这一模块就是为了侦测对方掉线并结束游戏,中心思想就是双方每隔 一段时间扫描一个云变量的值,如果它被更改了,就将它修改;如果它没被更改,说明对方延迟过长或对方掉线,这样就能及时结束 游戏。 因为对方可能在5秒延迟之内修改云变量,所以这里使用计时器而不是等待。 4,程序自动重启模块。如果只有两个人在线,同时他们在游戏中都中途退出了,判断掉线的代码还没来得及判断,就退出了,这就 非常糟糕,因此程序自动重启模块诞生了。因为无人执行代码,而正在游戏的云变量没有清空,他人就无法进入匹配。当有人打开游 戏,同时,只有他一个人在线,这一点说明了此刻,不会有人在匹配或游戏,毕竟只有他一个人。这时,这段代码就开始工作了 虽然,如果有3人在线时,正在游戏的两个人同时掉线,这时,游戏既无法匹配,也无法重启,这位第3者就非常不幸,但人总要睡 觉,你的程序不可能有人24小时无间断开着,当所有人都退出游戏后,就可以等待下一个开启游戏的人。 好了教程帖就分享到这里了,希望大家喜欢
2024-06-21T21:41:59 点赞:1
在 【敢问大佬联机怎么做】 中回复
我将代码分为4个大板块 匹配模块 游戏主要模块 判断对方是否非正常结束游戏模块(掉线模块) 程序自动重启模块 1,匹配模块。匹配模块主要用于玩家匹配,使两方玩家都能进入游戏,是非常重要的模块。我比较喜欢用云列表来做匹配,当某个玩家点击按钮或触发匹配的时候,如果云列表里没有玩家,或者只有一个人,这个时候,玩家才能匹配——将玩家的用户名放入云列表。一旦云列表里有两个人,且云列表里包含了自己的用户名,这说明,你正在匹配,而且已经匹配成功,这个时候就能跳转到游戏界面了 2,游戏主要模块。这一模块是你游戏的核心,根据不同的作品而异,但中心思想是不变的,用公有云变量来上传玩家数据,如坐 标,为了简单易懂,这里就不做公有云变量扩容了,分别取4个变量A方的x坐标,A方的y坐标,B方的x坐标,B方的y坐标。两个主要 角色,分别代表A,B。他们的位置是由那4个公有云变量决定的。任何整改都是修改云变量,如果这两个角色使用特效/技能,等动作 可以用云变量做广播: 当游戏结束后,也可以通过云变量广播来宣布游戏结束: 3,判断对方是否非正常结束游戏模块(掉线模块)。这一模块主要是判断对方是否掉线,或延迟过长。在双人对局时,对方可能会 在游戏还没结束就离开游戏,这样使得另一方无法继续游戏,而这一模块就是为了侦测对方掉线并结束游戏,中心思想就是双方每隔 一段时间扫描一个云变量的值,如果它被更改了,就将它修改;如果它没被更改,说明对方延迟过长或对方掉线,这样就能及时结束 游戏。 因为对方可能在5秒延迟之内修改云变量,所以这里使用计时器而不是等待。 4,程序自动重启模块。如果只有两个人在线,同时他们在游戏中都中途退出了,判断掉线的代码还没来得及判断,就退出了,这就 非常糟糕,因此程序自动重启模块诞生了。因为无人执行代码,而正在游戏的云变量没有清空,他人就无法进入匹配。当有人打开游 戏,同时,只有他一个人在线,这一点说明了此刻,不会有人在匹配或游戏,毕竟只有他一个人。这时,这段代码就开始工作了 虽然,如果有3人在线时,正在游戏的两个人同时掉线,这时,游戏既无法匹配,也无法重启,这位第3者就非常不幸,但人总要睡 觉,你的程序不可能有人24小时无间断开着,当所有人都退出游戏后,就可以等待下一个开启游戏的人。 好了教程帖就分享到这里了,希望大家喜欢
2024-06-21T21:43:01 点赞:1