Tile Based A *寻路,但是有炸弹

时间:2017-01-29 14:26:36

标签: path-finding a-star

我编写了一个简单的A *路径查找算法,可以快速找到通过基于图块的地牢的方法,其中图块包含墙的信息。

地牢的一个例子(为简单起见,只有一条路径):

enter image description here

但是现在我想添加可变数量的" Bombs"算法允许路径查找忽略1个墙。但是现在它再也找不到最好的路径了,

例如,仅使用1个炸弹,生成的路径看起来像第一个图像: enter image description here

编辑:实际上它看起来像这样:https://i.stack.imgur.com/kPoAA.png

enter image description here

虽然正确的路径是第二张图片

问题是"关闭节点"现在干扰可能的路径。任何关于如何解决这个问题的想法都将不胜感激!

3 个答案:

答案 0 :(得分:1)

您的“游戏状态”将不再仅由您的位置定义,而是由表示您已离开的炸弹数量的整数定义。如果你在wikipedia上遵循A *的伪代码,这意味着你不能简单地将closedSet实现为布尔网格。它应该可以实现为,例如,哈希映射/哈希集,其中每个条目包含以下数据:

  • x坐标
  • y坐标
  • 留下的炸弹数量

通过访问搜索过程中的某个位置,您将不再将该位置标记为已关闭。你会将位置+炸弹数量的组合标记为已关闭。这样,如果稍后在相同的搜索过程中你遇到一个位置,你在同一个位置,但剩下更多的炸弹,你不会忽略它关闭,但实际上会继续搜索这种可能性。

请注意,如果最大可能的炸弹数量相对较低,您还可以将closedSet实现为布尔网格数组,首先按炸弹数量进行索引,然后按x和y坐标进行索引。找出某个特定职位是否已经关闭。

答案 1 :(得分:0)

这是不是意味着你只是假装根本没有任何墙

使用A *查找从开始到结束的最短路径,然后检查您需要经过的墙数。如果你有足够的炸弹,你可以使用这条路径。否则,请尝试下一个最长的路径,依此类推。

顺便说一句:你可能想查看http://gamedev.stackexchange.com这样的问题。

答案 2 :(得分:0)

你需要调整成本函数来为炸弹花费一些东西,然后通常以第二枚炸弹的无限成本运行算法。为了使炸弹大约中途使用,使用成本函数进行游戏,它应该花费大约启发式A-B距离乘以空瓦的成本。如果你有两枚炸弹,成本的一半,当然那么使用三枚炸弹的费用是无限的。

但是不要期待非常好的结果。 A *不是为这种优化而设计的。