经典的推箱子Sokoban是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
下面将python+pygame实现推箱子小游戏的过程记录下来,以便学习。
零
基本逻辑是将箱子推到指定位置,虽然简单,但这个游戏其实很烧脑。开发实现时,计划为:
页面元素共有:推箱子的工人,箱子,外墙,终点
1、推箱子的工人class workerSprite,继承自pygame.sprite.Sprite,由于它和其他的页面元素有点不一样,它可以前后左右动,所以显示的图像不一样。它可以移动,还有就是要计算它在当前的位置和方向上的下一个位置能不能到达(这个要先判断),因此要返回下一个位置。
2、其他的页面元素(箱子box,外墙wall,终点target)class gameElementSprite,同样继承自pygame.sprite.Sprite,用elementtype来区别,只有box可以被移动,同时在移动之前,要判断在当前的位置和方向上的下一个位置能不能到达,因此要返回下一个位置。
3、游戏地图的构造及相关判断动作class gameMap,主要是加载地图上对应的元素,判断是否通关,判断1和2中计算出的位置是否可以到达。这里不涉及到pygame的应用,可以理解为就是个后端的服务。
4、游戏的界面展示class gameDisplay,主要完成关卡地图的读取,借