目录

推箱子游戏问题

大学刚学编程的时候,在实现推箱子游戏的过程中,感觉推箱子游戏中,比较核心就两个问题,第一个问题是按键按下时,人物能否按照按键的方向,移动人物。还有一个问题就是判断是否把箱子全部推到目的地。

首先,我们可以把推箱子游戏地图中的元素分为

  • 0:路
  • 1:箱子目的地
  • 2:人物站在路上
  • 3:人物站在目的地
  • 4:箱子在路上
  • 5:箱子在目的地
  • 6:墙
  • 9:墙外的区域,非地图

在判断人物能否走动的时候,有些场景,只判断前面一步的地图是不够的,需要判断前面两步的地图。

推箱子可以走的的情况,人物前面两步地图值的和会有个范围:

  • 前面是路:[0, 6]
  • 前面是箱子的目的地:[1, 7]
  • 前面是箱子,箱子前面是路:[4, 5]
  • 前面是箱子,箱子前面是目的地:[4, 6]

推箱子不能走的情况,人物前面两步地图值的和会有个范围:

  • 前面是墙:[6, 15]
  • 前面是箱子,箱子前面是箱子:[8, 10]
  • 前面是箱子,箱子前面是墙:[10, 11]

当前面一步不是墙时,可以走的情况的值 <= 7,不可以走的情况值 >= 8。

第二个问题判断比较简单,即当地图上不存在箱子在路上的情况时,说明箱子全部推到了目的地。将地图遍历一遍就可以判断出来。