猫史档案馆


【经hzCK同意】铁盒五子棋源码剖析

用户:ELA7096ELA7096查看:47 回复:13 评论:47 创建时间:2023-01-17T15:46:11


铁盒五子棋是一个很好的游戏

它由hzCK制作(我感觉hzCK和他工作室里面的“童话式是一个人)

从寒假开始他就更新了S3赛季,坐上了首页的铁板凳

(前年暑假也是)

我从入站将近一年的时间里3/4都在研究“云变量”

所以我在脑子里已经想出了铁盒匹配游玩的做法

(以游戏源代码为准,以下仅供参考)

现在就开始介绍

首先是切屏,当你切屏时会有一个切屏提示

编程猫社区-切屏计算-少儿编程作品 (codemao.cn)

我的好像比他的检测要快???

这里,其实切屏检测没什么用,就是看着作品nb一点

然后是匹配架构

按下匹配时会进行匹配时的运行

先检测一个云列表中有没有他人匹配

如果有,就将自己的信息存储在那一对房间的列表区域里(一个奇数项,一个偶数项)

如果哪对项都不等于“0”或者都存着别人的信息(就是此房间已满)

会将你的个人信息存储在一个云列表中(单云)

然后如果你是奇数项“n”等到“n+1”项不等于0

进入游玩页面

先把你的信息和对手的信息用单云劈开存在一个叫信息的列表中打印信息

棋盘的底是角色,棋盘的线是画笔画的(为了好让棋子对齐)

然后有两个列表存储设定好的“X”“Y”坐标都为15项

每次按下鼠标比较XY坐标离哪一项XY坐标最近

(此定位方法多半不是hzCK的方法,供参考)

另一种是四舍五入方法,(鼠标的X坐标四舍五入,Y坐标四舍五入)

然后发送锁定的棋子位置(在云变量或云列表中(估计是云变量,因为只有7个房间,其实是云列表也行下棋没有对更新速度要求那么高))

以“棋子类型,X,Y”单云存到对应房间的变量内

当对方检测到自己房间的云变量更新(检测更新应该都会做)而且棋子类型不为自己的棋子类型,就用单云劈开,克隆棋子移到劈开的“X”“Y”中,再在自己和对手那里存下这一步棋子的“X,Y”这就完成了一步棋

然后每下完一步棋(不管自己还是对手),都检测这步棋的八个方向内是否有同类棋子可以5个连成线

(可以想成在棋子上画一个米字格,以棋子为中心检测米字格的四条线,这四条:— \ | / 按坐标检测)

如果出现检测棋子类型,发送敌方或我方胜利,进行结算

途中退出用对方检测自己(这个还没有想通,但是我有一个方法,个人信息最后加一个当前秒的计时器,当对手计时器停了就代表对手逃逸),对方在一个单云中存下对方ID于是下次挂机对手回来了检测此单云中是否有自己ID,如果有就扣信誉分,然后清零这一项单云,执行以上直到没有自己ID(这句话估计hzCK没有,因为大概率用不上不会出现两次逃逸)

前1000名排名是用自己的私有分数比较一个存储在云列表中(会点C++或者Kitten比较好的应该都会,我懒得说了)制作的排名

应该没有什么漏说的了就这些了


回复

上一页1 页 / 共 1下一页
林夕狐林夕狐

说的真好,但是我没听懂qwq....联机好难啊qwq

点赞0


评论


ELA7096ELA7096

细节还没有说完有时间再补充

或者提问

(为什么没有人说话啊?)

点赞0


评论


方块大冒险方块大冒险

emotion_编程猫_溜了溜了有《亿》点懵......

点赞0


评论


绿手酷客绿手酷客

牛蛙!

点赞0


评论


hzCKhzCK

我的切屏检测是切屏2秒才提示,因为检测太快容易误判(有些人的电脑掉帧的时候就会误判)

点赞0


评论


hzCKhzCK

我们使用的不是云列表而且云变量,因为云列表的延迟很大,我们在联机方面均无使用云列表

点赞0


评论


hzCKhzCK

棋盘的线和棋盘都是角色,没有使用到画笔,因为要打印对手信息的棋钟的时候都要清除画笔,就要重新绘制棋盘,所以棋盘整个都是角色

点赞0


评论


hzCKhzCK

检测逃逸非常简单,你那个太复杂了

点赞0


评论


私塾­私塾­

2个云列表一个聊天室一个排行榜所以储存匹配信息要公云吧

点赞0


评论


私塾­私塾­

其实仔细一看棋盘上的线和棋子也不是很对齐)

点赞0


评论


hzCKhzCK

还有一个很重要的没有剖析到,那就是在对局的时候,当到“我”下棋时会倒计时对吧,“我”可以切屏来让程序冻结,等我过了60秒再切屏回去,我的界面会显示我还有60秒,而对手却显示我超时了,然后我也等着对手超时,造成双赢

点赞0


评论


调皮的乔治调皮的乔治

童话式和CK不是同一个人

点赞0


评论


调皮的乔治调皮的乔治

下次建议把字体弄粗,不然看着容易散光(确信

点赞0


评论