寻找具有可破坏障碍的寻路

时间:2015-09-08 21:45:20

标签: algorithm path-finding

我目前正在筹划一款游戏,但我很难找到寻路算法,我想知道一个慷慨的灵魂是否能够帮助我。

在这种情况下,我需要一种算法来计算绕过障碍物或摧毁它们是否更好。我给了"难度"到我游戏的每个牌。例如,基本瓦片为1,障碍物可以在5-100之间。

以下是一些例子。我必须从红场搬到蓝色广场。如果我在途中遇到障碍,我应该得到这样的东西:

http://i.imgur.com/UwIQ0IG.jpg

说明:左或右路径只有3个难度,障碍物是5个。所以最好四处走走。

第二个例子:

http://i.imgur.com/0is3in9.jpg

说明:算法为3选择,打破障碍或左右走动,因为它的难度级别相同。

最后一个例子:

i.imgur.com/sw13exL.jpg

说明:该算法必须能够找到一个"弱点"并能够走到它并摧毁它。

我会继续努力。希望你能给我一些指导。

2 个答案:

答案 0 :(得分:2)

您可以使用Dijkstra的算法。要使用该算法,我们将定义以下图表。每个方块都是图中的一个节点。在两个相邻的正方形之间,我们将定义2个有向边。边缘的权重将是写在尖头节点上的数字(例如,对于边缘(a,b),权重将是写在方形b上的数字)。
然后,通过在上面定义的图上运行Dijkstra算法,我们将得到最短的路径。

答案 1 :(得分:2)

你可以使用Dijkstra's algorithm的非常微小的变化(实际上没有任何变化,你只是解释不同的弧成本)来做到这一点。

基本上,您可以以破坏为代价到达障碍广场的“内部”,因此您有一个图表,其中所有节点 连接到其所有邻居(即障碍物不要“断开”干预节点。)

所以在这种情况下,从A到B,

1 1 A 1 1 1
1 1 1 1 1 1
2 5 5 5 2 1
1 1 B 1 1 1

费用将是

2 1 A 1 2 3
3 2 1 2 3 4
5 7 6 7 5 5
6 7 B 7 6 6

你会直接向下走。