开发工具
Python版本:3.6.4
相关模块:
pygame模块;
以及一些Python自带的模块。
相关文件
关注公众号:Python学习指南,回复“推箱子”即可获取
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
原理简介
游戏简介
经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
控制方式:
↑↓←→键控制人物行动,r键重新开始本关。
逐步实现:
Step1:定义游戏精灵类
由于游戏涉及到碰撞检测,所以我们先来定义一些游戏精灵类,包括推箱子的人、箱子、墙和目标位置指示标记。
首先我们来定义一下推箱子的人这个精灵类:
他需要拥有可以移动的能力,这里设置了一个模拟移动的选项,是为了通过模拟移动判断他是否可以向上/下/左/右移动。
因为地图上的其他东西性质类似,所以我们把它们定义成同一个精灵类(T_T其实性质都类似,但是感觉还是有必要区分一下人和物的):
其中箱子需要拥有可以移动的能力,其他则不能移动。模拟移动选项的功能与之前类似。
Step2:定义游戏地图类
这里我们定义一个游戏地图类,目的是用该类来创建任意的游戏地图。因此,该类应当可以增加并保存游戏元素(人、墙、箱子等),并在屏幕上把地图画出来。同时也应当自带一个方法来判断此地图上的箱子是否都已经送到了指定位置(这样子方便切换关卡):
Step3:定义游戏界面类
游戏界面类负责解析levels文件夹下的游戏各关卡的地图文件,并利用游戏地图类创建并显示游戏地图:
同时因为游戏地图面积>游戏窗口界面, 所以该类需要增加根据人物位置滚动游戏地图的功能:
Step4:定义某关的游戏主循环
主循环主要负责实例化游戏界面类,并根据按键检测的结果对游戏界面类进行一些操作:
其中人物移动的逻辑为:
人移动的目标位置为空白格,则人移动;若撞到箱子,箱子可以和人方向一样移动一格,则人和箱子均移动;其他情况人和箱子均无法移动。
Step5:定义游戏开始、切换和结束界面
做的比较简陋,直接给源码吧。
开始界面:
切换界面:
结束界面:
Step6:实现游戏主函数
把所有界面串起来就好啦:
All Done!完整源代码欢迎与我交流。