推箱子游戏的求解算法

不用过多介绍推箱子游戏,条件很简单,在一个N*m的方框中,有若干个箱子,障碍物,一个小人,只能推动箱子到对应的位置。

 

算法简介:

每一个箱子都有4个方向可以移动,除去对应位置有障碍物、箱子,以及小人不能到达对侧,那么实际上可走方向很少。

箱子每移动一步,将当前箱子各个位置,小人位置进行存储,当做一张视图。

由此可以构建很多视图。

每次都从是途中寻找最佳视图计算。

 

开始之前,需要考虑如下问题:

1、如何寻找最佳视图。

这里需要引入一个简单的评估函数。

F=G+H。

G即为步进值。指当前视图是箱子推动了多少步出现的。

举例来说,还是用一个箱子来说,第一步向右推,第二步向下推,第三步向左推。G值为3.

如果把箱子直接向下推,G值为1.这个时候我们来看这2个视图,箱子位置一样,G值不同,为了寻找最佳算法,当然是保留第二种视图状态。

 

H为最佳理论值。

举例来说:当一个箱子移动到一个目标点时,最佳距离=|箱子.x-目标.x|+|箱子.y-目标.y|

如果是多个箱子移动到多个位置,那就要考虑那个箱子移动到那个位置。这个就留给大家自己思考。简单的排列组合问题。

 

2、第二个需要考虑的是小人能否走到箱子的对侧?

这个采用简单的A*path算法。

 

有了以上分析,可以进入下一步了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值