【问题标题】:Pathfinding with destructible obstacles带有可破坏障碍物的寻路
【发布时间】:2015-09-08 21:45:19
【问题描述】:

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

这是场景,我需要一个算法来计算是绕过障碍物还是摧毁它们更好。我给我的游戏的每个图块一个“难度”。例如,基本图块是 1,障碍物可以在 5-100 之间。

这里有一些例子。我必须从红场搬到蓝场。如果我在路上设置障碍,我应该得到这样的东西:

解释:左或右路径只有3个难度,障碍物是5个。所以最好绕着走。

第二个例子:

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

最后一个例子:

解释:算法必须能够找到一个“弱点”并能够走到它并摧毁它。

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

【问题讨论】:

  • A*?
  • 如果您可以提供这样的数字难度权重,应该很容易找到最简单的路径。 Dijkstra 的图搜索算法会很容易地找到最短路径,并且以更高的实现复杂度为代价,A* 也可以做到这一点,但速度稍快一些。 (A* 基本上是 Dijkstra 的启发式算法,可以更快地找到更好的选择)。
  • 我用过的最直观的 A* 解释在这里:policyalmanac.org/games/aStarTutorial.htm
  • 这里有gamedev.stackexchange.com,可能会给你一些针对游戏的建议。

标签: algorithm path-finding


【解决方案1】:

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

【讨论】:

    【解决方案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
    

    你会一直往下走。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 2011-08-25
      • 2015-05-28
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多