推箱子游戏也是一个很经典的益智类小游戏,很多推箱子游戏软件都提供过程演示的功能,当玩家走投无路的时候,可以看看游戏给出的解答过程,这个过程其实就是游戏自己推算出来的最佳推箱子路线。这一课我们就来试试用穷举法求解推箱子游戏。
游戏介绍
图(1)展示了一个典型的推箱子游戏的截图,左边是游戏的初始状态,右边是游戏成功结束的状态。游戏在一个二维平面“地图”上操作,游戏开始时有若干只箱子和与之数量相同的目的位置,玩家控制一个小人推动箱子到指定的位置,当全部箱子都被推到指定位置时,游戏就结束。箱子有四个面,玩家每次只能从一个面推动箱子向相反的方向移动。为了增加难度和趣味儿性,地图上一般都会布置一些障碍物阻挡箱子,使其不能被顺利地推到目的地。
图(1)一个推箱子游戏的例子
游戏中的地图实际上可以看作是由一个个小格子组成的,每个格子可以是墙、箱子或小人。为了将重点放在算法上,我们对这个游戏做一个简化处理,用各种字符表示地图上的各种元素,比如用空格字符表示空地,用大写字母 'B' 表示箱子,用大写字母 'X' 表示障碍物和墙壁,用 '#' 表示箱子的目的地,用 '@' 表示小人,用 'O' 表示游戏区域之外的空间,这样图(1)例子中的地图就可以表示为如下形式:
'O','O','O','X','X','X','X','X','X','X','O','O','O',
'X','X',
本文介绍了使用穷举法和A*算法解决推箱子游戏的策略。通过建立地图数据模型,用二维坐标表示游戏元素,并通过A*算法优化搜索效率,避免无效状态。游戏状态、动作和搜索算法的设计与实现是关键,同时讨论了死点判断和目标状态的确认。最后,提出了实现最优解输出的课后作业。
订阅专栏 解锁全文
1058

被折叠的 条评论
为什么被折叠?



