经典推箱子是一款来自日本的古老游戏,目的是训练你的逻辑思维能力。在小型仓库中,需要将木箱放在指定位置。一不小心,箱子将无法移动或通道将被阻塞。因此,需要巧妙地利用有限的空间和通道,合理安排移动次序。和位置,以便顺利完成任务。
控制方法:
↑↓←→键控制角色动作,r键重启关卡。
一步步:
Step1:定义游戏精灵类
由于游戏涉及碰撞检测,我们先定义一些游戏精灵类,包括推箱子、盒子、墙壁和目标位置指示器。
首先我们定义一下推箱子的人的elf类:
他需要有移动的能力,这里有一个模拟移动的选项推箱子游戏素材,可以通过模拟移动来判断他是否可以上下左右移动。
因为地图上的其他东西本质上是相似的,所以我们把它们定义为同一个精灵类(T_T其实本质上也是相似的推箱子游戏素材音乐音效,但是感觉还是有必要区分人和物):
其中,箱子需要有移动的能力,有的则不能。Simulate Move 选项的功能与以前类似。
Step2:定义游戏地图类
这里我们定义了一个游戏地图类,目的是使用这个类来创建任何游戏地图。因此,这个类应该能够添加和保存游戏元素(人、墙、盒子等),并在屏幕上绘制地图。同时开发学习,它还应该自带判断这张地图上的箱子是否已经送到指定位置的方法(方便切换关卡):
Step3:定义游戏接口类
游戏界面类负责解析levels文件夹下游戏各关卡的地图文件,并使用游戏地图类创建和显示游戏地图:
同时由于游戏地图的面积大于游戏窗口的界面,所以该类需要添加根据角色位置滚动游戏地图的功能:
Step4:定义一个关卡的游戏主循环
主循环主要负责实例化游戏界面类,并根据按键检测的结果对游戏界面类进行一些操作:
角色移动的逻辑是:
如果人移动的目标位置是空白,则人会移动;如果撞到箱子,箱子可以和人同方向移动一格,人和箱子都会移动;在其他情况下,人和盒子都不能移动。
Step5:定义游戏开始、切换、结束界面
做起来比较简单,直接给源码就可以了。
启动界面:
切换界面:
结束界面:
Step6:实现游戏的主要功能
只需将所有接口串在一起:
随便加了一段背景音乐,应该问题不大T_T。
全部完成!有关完整的源代码,请参阅相关文档。
甚至
许多
本系列文章相关文档中提供了打包版本,无需搭建环境即可运行播放~