猫史档案馆


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

用户:ELA7096ELA7096查看:406 回复: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


评论

补充:UI是克雷姬画的(doge)

65%是他的,我自己也画了很多,个人中心等等的都是我画

看不懂


方块大冒险方块大冒险

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

点赞0


评论

所以铁盒五子棋不上首页就挺亏的

不是上了吗,你会做多个排行榜吗,不是云变量自带的那个排行榜

啊会会会,就是现在懒得做,暂时没有做过


绿手酷客绿手酷客

牛蛙!

点赞0


评论

哇!有人会了(喜)


hzCKhzCK

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

点赞0


评论

哦(

有啥不一样的没???


hzCKhzCK

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

点赞0


评论

7个房间剩下三个一个聊天室,一个封人还有一个干啥???

还有的要储存服务器信息,还有一个要做赛季排行榜

哦还有一个储存对局数量了

排行榜不是列表吗???

我寻思封号不用变量列表也行吧

赛季排行榜只储存前十,总排行榜才是云列表,有俩排行榜哦

除非封几十个几百个那样的)

既然说要做第8个房间省出来那个封号的云变量是最好的)


hzCKhzCK

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

点赞0


评论

!!!

我后来仔细看画质了,是角色

所以S1就没有对齐


hzCKhzCK

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

点赞0


评论

教教我)

喵间的时候设置私云里的一个数据为1,比赛结束后再设置为0,如果当玩家进入游戏时发现那个数据是1,说明这个玩家上一局还没结束就退出来了

emm……这样只能在比赛结束后才能检测到,但是我测试了一下,刚进比赛然后一分钟内我再进入却被检测到逃逸,所以我是这么猜的,这与你说的不符啊?


私塾­私塾­

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

点赞0


评论

正确!


私塾­私塾­

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

点赞0


评论

雀氏

想你了逝塾,不知道这条消息还能看到吗QWQ


hzCKhzCK

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

点赞0


评论

这个铁盒五子棋已经解决了

emm……我没好好玩没注意到……

hzCK,为什么我打不开源码编辑器4.0了呀,我要肝做了!!!

你打不开源码编辑器你和技术喵说啊,找我干嘛我又不是官方

az,我没微信,没邮箱,没qq,没钉钉,没手机,怎么跟官方说嘞??

你跟电脑亲近一下

哦是的,说明你用的是自制的计时器,系统的计时器就不会

还有一个不知道是不是bug,自己的计时器是50秒,别人的下棋计时是60秒

老盒啊()这么简单个东西弄这么复杂:当作品运行窗不处于屏幕时,作品停止,而其他人都不停止,我们只需要一个公共计时器,和一个本地计时器,计时器与公共计时器的差就是“切屏时间”

公共的所有人一起发计时会有网络时差,有可能有更多bug,可能会卡

不超20ms(如果作品有优化)

我2k积木都不卡

主要20个人同时更新一个变量会卡,和普通作品的更新还不太一样

hzck作品的人数太多了

emmm

我看是你复杂了,我的比你更简单

50秒是故意设计的啊,因为那10秒是为了防止云延迟,实际上对手也是50秒的

云延迟小于1秒的,你给延迟留的太多了

az()用对手算时间也不是不可以,单独每人一 一直变动的字符,字符变动时间即切屏时间


调皮的乔治调皮的乔治

童话式和CK不是同一个人

点赞0


评论


调皮的乔治调皮的乔治

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

点赞0


评论