嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

作者:朱哲敏

指导老师:杨佳庆

项目难度: 一般

项目流程图:

192_7776f9f52013aa3a95e003731469f6d32903e85e.png

项目简介:

1游戏介绍

蛇梯棋是一种简单的小游戏,在10*10的地图上标注着从1到100的序号,玩家需要掷骰子来前行,这种方法和大富翁有着异曲同工之妙,但与大富翁不同的是,蛇梯棋并不用积攒财富,而是谁先到达100号方格谁就获胜。

但在前进的时候,玩家会遇到蛇与梯这两种要素,而梯子可以让你更快的到达编号为100的方格,而蛇的作用与梯子正好相反,到达蛇的方格后会远离编号为100的方格,蛇梯棋的主旨就是尽可能的避开蛇,多搭上梯子来接近编号为100的方格吧!

2玩法介绍

1.进入游戏前,选择几人对战,通过摇筛子的方式操控自己的游戏人物,让他们在棋盘上移动;

2.当玩家摇到几点时,游戏人物就前进几步,看谁先到达终点,就获得胜利;

3.游戏界面中随机分布着毒蛇和梯子,当玩家走到毒蛇占领的格子时就会后退,反之在梯子上就会前进。

4.需要注意的是,如果还差3个到达编号为100的方格的话只有摇出数字3才可获胜,如果摇出比3大的数字,需要到达100后倒退摇出的数字减3个格子,不是刚到到达最后的编号100的格子的话是无法获胜的。

142_9219242d55e04040c6030251720553a36e62b6c8.png

3界面介绍

游戏模式:选择几人游戏

152_e64abf1e6a4ec2344006845e0c47dbd05e21024b.png

游戏实况:显示游戏信息

162_01b415cb57ac1acb66412e91e2efe9b0e46806b4.png

玩家控制界面:

筛骰子和重新开始游戏

172_d9ad40077ab016c109be7b04da7abcd62fb9f5d9.png

游戏显示界面:显示游戏图像

182_a347a4906b47ffac738fb1e3021329f6a955069b.png

游戏中使用的是双向梯,即梯子是毒蛇,毒蛇也是梯子,类似传送门一样的存在。举个例子,比如白色玩家到了数字7,他就会被传送到数字76,相对的假设他到了数字76,他也会被传回数字7。

按下reset键后,玩家重置,地图不会改变;重新选择几人模式时,地图发生改变,重新搭梯。

程序介绍:

1游戏模式界面代码

tkinter库和PIL库

201_24441f260a1e89571cb5efc36c925d5a25633a49.png

212_8b11abf5fc0872268739c36c5ee908f19428fa7c.png

2玩家控制界面代码

221_371a4e08eee06b609aa8b80615dd747d90a3d4a2.png

231_919cbc61ae119a6c362540bd0a9ea17fad368be1.png

3游戏显示界面代码

241_1abd650e1f43b0533585591af2c65286187e186d.png

251_34ad1525e772244e771bc55a5bfcc1855cdc1819.png

4玩家判定/游戏实况代码

261_4ef7c51c368eec3c728daab5803ee2b9f4eea76d.png

271_36a355921f685ddcc1affe95341c1dfa07c93a1f.png

问题与解决方法:

问题一:搭梯子

问:在搭梯子过程中,我利用随机数,产生相对应的数组,这时可能会出现重复的数字,此时梯子就会混乱。我们希望看到的是没有重复数字的搭梯子,如下图:

281_8823cdd1cbf89bb792bdb52f502184da9d88454b.png

方法一:在类函数中重新进入类。

失败:产生了死循环,导致图片上的部分区域消失。

方法二:在类中写一个if判断。

失败:当出现多次搭梯子重复时,无法解决。

方法三:在类中写while判断。

成功:适当调整代码语序,利用while判断可以达到我想要的效果。当出现重复时,提示有重复,重新搭梯,直到搭梯完成,如下图:

291_5f367baac14332a015340c22e9d2ba23a453eb34.png

问题二:图片上数字的添加以及后续的显示

问:numpy库可以完成划线,人物的显示(不同颜色的圆圈),以及梯子的显示(不同颜色的方块),可无法做到添加1-100的数字。我希望看到的效果,如图:

30_5f7b4daa1d72af0529b0e0b2fb84df3f7e03e3b7.png

方法:

1.添加PIL库。

2.先将numpy数组格式转换为PIL库的格式,就可以写数字了。

3.记得转回numpy,因为还要进行人物的显示。

问题三:人物的显示

问:人物走到下一格时,上一位置的人物应该消失。我们希望看到的状态,如图:

313_450b65844334337425d7a08fab43f7c904d37b11.png

方法1:记住上一次的位置,进行填补。

失败:由于有不同颜色块,且随着玩家数量的增加,代码复杂又无法达到最佳效果。

方法2:保存最初的棋盘,每次刷新。

成功:在上一个方法中,每次以为成功的时候,就会出现bug。 “迫不得已”,使用了刷新棋盘。

视频展示:

展望与总结:

蛇梯棋作为一种简易的小游戏,他可以实现多个用户共同游玩,但目前所实现的功能为在一台主机上由多人共同游玩,这样就产生了很大的不便,和桌游没有太大的区别。作为电子游戏,联机系统是更加重要的功能。处于这个目的,该项目将会在以下方面进行扩展:

  1. 美化界面,使外观看起来更加舒服
  2. 加入电脑玩家,单人也可以玩游戏
  3. 加入远程操控,实现远程玩家游戏对战。也可以使用网络进行多用户的连接,让玩家能够在线上对战,增强游戏的可玩性。
  4. 添加数据库,记录玩家数据。

只要实现以上功能,蛇梯棋就具备了作为一款电子游戏的基本雏形,就能让玩家有更好的游戏体验。目前蛇梯棋还需要一些游戏过程中棋子移动过程的动画,当前游戏中棋子进行移动的时候,仅仅是将棋盘的图片进行层层的覆盖,以此实现棋子的移动,但这不符合棋子移动的过程,优化游戏感是项目以后的优化方向。

GitHub代码:

https://github.com/shiep18/EIS2020/tree/master/l-team/team5/Snake%20ladder%20chess(%E8%9B%87%E6%A2%AF%E6%A3%8B)(%E6%9C%B1%E5%93%B2%E6%95%8F%E4%B8%AA%E4%BA%BA%E9%A1%B9%E7%9B%AE)

评论