你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
你觉得这篇文章怎么样?
作者:朱哲敏
指导老师:杨佳庆
项目难度: 一般
项目流程图:
项目简介:
1游戏介绍
蛇梯棋是一种简单的小游戏,在10*10的地图上标注着从1到100的序号,玩家需要掷骰子来前行,这种方法和大富翁有着异曲同工之妙,但与大富翁不同的是,蛇梯棋并不用积攒财富,而是谁先到达100号方格谁就获胜。
但在前进的时候,玩家会遇到蛇与梯这两种要素,而梯子可以让你更快的到达编号为100的方格,而蛇的作用与梯子正好相反,到达蛇的方格后会远离编号为100的方格,蛇梯棋的主旨就是尽可能的避开蛇,多搭上梯子来接近编号为100的方格吧!
2玩法介绍
1.进入游戏前,选择几人对战,通过摇筛子的方式操控自己的游戏人物,让他们在棋盘上移动;
2.当玩家摇到几点时,游戏人物就前进几步,看谁先到达终点,就获得胜利;
3.游戏界面中随机分布着毒蛇和梯子,当玩家走到毒蛇占领的格子时就会后退,反之在梯子上就会前进。
4.需要注意的是,如果还差3个到达编号为100的方格的话只有摇出数字3才可获胜,如果摇出比3大的数字,需要到达100后倒退摇出的数字减3个格子,不是刚到到达最后的编号100的格子的话是无法获胜的。
3界面介绍
游戏模式:选择几人游戏
游戏实况:显示游戏信息
玩家控制界面:
筛骰子和重新开始游戏
游戏显示界面:显示游戏图像
游戏中使用的是双向梯,即梯子是毒蛇,毒蛇也是梯子,类似传送门一样的存在。举个例子,比如白色玩家到了数字7,他就会被传送到数字76,相对的假设他到了数字76,他也会被传回数字7。
按下reset键后,玩家重置,地图不会改变;重新选择几人模式时,地图发生改变,重新搭梯。
程序介绍:
1游戏模式界面代码
tkinter库和PIL库
2玩家控制界面代码
3游戏显示界面代码
4玩家判定/游戏实况代码
问题与解决方法:
问题一:搭梯子
问:在搭梯子过程中,我利用随机数,产生相对应的数组,这时可能会出现重复的数字,此时梯子就会混乱。我们希望看到的是没有重复数字的搭梯子,如下图:
方法一:在类函数中重新进入类。
失败:产生了死循环,导致图片上的部分区域消失。
方法二:在类中写一个if判断。
失败:当出现多次搭梯子重复时,无法解决。
方法三:在类中写while判断。
成功:适当调整代码语序,利用while判断可以达到我想要的效果。当出现重复时,提示有重复,重新搭梯,直到搭梯完成,如下图:
问题二:图片上数字的添加以及后续的显示
问:numpy库可以完成划线,人物的显示(不同颜色的圆圈),以及梯子的显示(不同颜色的方块),可无法做到添加1-100的数字。我希望看到的效果,如图:
方法:
1.添加PIL库。
2.先将numpy数组格式转换为PIL库的格式,就可以写数字了。
3.记得转回numpy,因为还要进行人物的显示。
问题三:人物的显示
问:人物走到下一格时,上一位置的人物应该消失。我们希望看到的状态,如图:
方法1:记住上一次的位置,进行填补。
失败:由于有不同颜色块,且随着玩家数量的增加,代码复杂又无法达到最佳效果。
方法2:保存最初的棋盘,每次刷新。
成功:在上一个方法中,每次以为成功的时候,就会出现bug。 “迫不得已”,使用了刷新棋盘。
视频展示:
展望与总结:
蛇梯棋作为一种简易的小游戏,他可以实现多个用户共同游玩,但目前所实现的功能为在一台主机上由多人共同游玩,这样就产生了很大的不便,和桌游没有太大的区别。作为电子游戏,联机系统是更加重要的功能。处于这个目的,该项目将会在以下方面进行扩展:
- 美化界面,使外观看起来更加舒服
- 加入电脑玩家,单人也可以玩游戏
- 加入远程操控,实现远程玩家游戏对战。也可以使用网络进行多用户的连接,让玩家能够在线上对战,增强游戏的可玩性。
- 添加数据库,记录玩家数据。
只要实现以上功能,蛇梯棋就具备了作为一款电子游戏的基本雏形,就能让玩家有更好的游戏体验。目前蛇梯棋还需要一些游戏过程中棋子移动过程的动画,当前游戏中棋子进行移动的时候,仅仅是将棋盘的图片进行层层的覆盖,以此实现棋子的移动,但这不符合棋子移动的过程,优化游戏感是项目以后的优化方向。
GitHub代码:
评论