我是公众号线下派对游戏的作者HullQin(欢迎关注公众号,发送加微信,交朋友)。转载本文前必须获得作者HullQin的授权。我独立开发了《联机桌游合集》,这是一个网页,在这里你可以轻松和朋友一起玩网络游戏,五子棋等游戏,免费,无广告。还为GameJam2022开发了《Dice Crush》,喜欢的话可以关注我HullQin哦~有空我会分享制作游戏的相关技术。1.问题描述如果让你做一个在线《五子棋》游戏,你会如何存储棋盘上棋子的信息?我的意思是,根据你存储的信息,你可以知道:谁是黑人?白是谁?现在游戏结束了吗?如果游戏结束了,谁赢了?如果还没结束,现在谁下棋?如果游戏支持撤销,现在有人要求撤销吗?谁在问?如果游戏支持认输,则重新检查是否满足第2点。当前场上棋子的分布。在阅读以下解决方案之前,请您自己考虑一下。2.解法2.1谁是黑谁是白优缺点适用范围解1:用1个变量来标识你是哪个玩家;然后使用1变量来识别哪个玩家是黑色的。带玩家号识别,扩展性好当游戏的其他功能需要关联玩家号时,可以使用该方案。选项2:使用1个变量来识别您是黑人还是白人。只需要1位。由于播放器没有固定的播放器编号,扩展性差,不需要扩展功能。当只做最简单的在线五子棋时可以使用此解决方案。两种选择都可以,只需要看实际情况。如果你只是想做一个简单的五子棋,方案二就够了。如果考虑可扩展性,推荐方案一。2.2比赛结束了吗?谁赢了?谁应该下棋?优缺点适用范围方案一:用1个变量来标识游戏状态。黑赢,黑输,棋手1下棋,棋手2下棋等等都是状态。没有计算过程,快了几十毫秒。游戏状态的可扩展性好,可以加入新的状态(如投降、后悔等)。当游戏有多个状态时可以使用此解决方案。解法二:只记录场上棋子分布情况,通过计算是否有5个连续球来判断谁胜谁负。占用空间小如果??要支持认输,只能回到方案一。当只做最简洁的在线五子棋没有认输功能时可以使用该方案。两种选择都可以,只需要看实际情况。如果你只是想做一个简单的五子棋,方案二就够了。如果考虑可扩展性,推荐方案一。2.3忏悔忏悔有两种形式:请求忏悔后,可以不经对方确认直接忏悔。请求忏悔后,还需要对方同意,忏悔才算成功。第一种形式比较简单。后悔游戏后,直接更新游戏数据即可。第二种形式可以通过2.2的选项1来实现。对局状态如下:等黑下棋,等白下棋,黑胜,白胜,黑求悔,白求悔。可以通过2.2的Option1实现,游戏状态同2.3实现认输功能。2.5状态机下,看这几个状态的转换关系:图中没有画“认输”的动作,因为“认输”比较简单,从其他四个状态画两条线,指向“黑人胜利”和“白人胜利”。“胜”就是“白认输”和“黑认输”。2.6场上棋子分布注:五子棋棋盘布局一般为15X15,AI对战中使用较大棋盘,如20X20。这里我们使用一个15X15的棋盘进行分析。优缺点适用范围方案一:用一个列表来存储掉落的棋子。列表的顺序表示片段的顺序。列表中每一项的值代表棋子的位置。取值为0-224(正好是225个值),奇数位为黑色。,偶数位置为白色。对于棋子较少的棋类游戏,存储空间比方案2小;保存位置信息,方便追悔莫及重玩游戏。每个棋子需要8bit存储,空间利用率约为225/256=88%,没有充分利用大部分场景。方案二:使用长度为225的列表,值为0或1或2,分别表示该位置没有棋子、黑棋子、白棋子。对于任何棋子分布,占用的空间都是固定的。如果用二进制,只需要225位,如果转为二进制,只需要log_2(3^225)=357位。如果要记录序列信息,则需要额外的空间。当你用这个棋盘画图的时候,往往棋子很多,不需要保留序号信息,可以用这个方案。当场上棋子少于357/8=45个时,方案一占用空间少,否则方案二占用空间少。如果是在线《五子棋》游戏,我们推荐方案1,毕竟序列信息还是很有用的。存储空间再大一点也无所谓,影响可以忽略不计。另外,存储棋子位置信息时,可以直接使用0-224,但转义给人类时,建议直接转为十六进制,这样它的十位可以是行信息,个位可以是列信息。例如,224=ee表示行e(15)和列e(15);例如0=00表示第0行第0列;例如10=0a表示第0行和第a(10)列。3.把这些写在最后,如果你不自己开发《五子棋》,你可能就不会想了。但是当你去做的时候,你会发现很好玩,而且实现方案有很多,你要选择最适合自己的。其中,我做了“分享棋局”的功能。正是通过使用十六进制,将棋子的信息存储在URL中,使其可读性更高一点。参考文章:《我做的《联机五子棋》如何追求极致的用户体验?(下篇)》我是公众号线下派对游戏作者HullQin(欢迎关注公众号,发送加微信,交友)。转载本文需获得作者HullQin授权.我独立开发了《联机桌游合集》,这是一个网页,在这里你可以轻松地和朋友一起玩网络游戏,五子棋等游戏,免费,无广告。还为GameJam2022开发了《Dice Crush》。如果你喜欢,可以关注我HullQin哦~有空我会分享制作游戏的相关技术。
