【问题标题】:A* pathfinding algorithm against wallsA* 靠墙寻路算法
【发布时间】:2017-03-06 17:43:42
【问题描述】:

所以我正在制作一个如下所示的游戏: https://gyazo.com/9d72dd5a9ac29f059ed474376f9679a2

现在我正在尝试实现 a* 算法来让红色坦克到绿色坦克。但是查看现有代码(主要是查看 cokeandcode.com 上的寻路),它们是使用基于网格的地图实现的。

我的游戏是基于网格的,但是迷宫的墙壁是由网格的每个“正方形”的边缘构成的,有些墙壁向上,有些墙壁向下以构成迷宫。以下链接可以更好地说明这一点:

https://gyazo.com/afefe7d2bdc2b5f02bf546090459f539

我的问题是,如果我的地图不完全基于网格,我将如何从 cokeandcode 站点实现寻路算法。如果网格的一个正方形不可通过,该算法会知道路径是否被阻塞,但是在我的游戏中,所有正方形都是可通过的。是每个方格的墙都不能通过。

【问题讨论】:

    标签: java algorithm path-finding


    【解决方案1】:

    它仍然主要是基于网格的,不同之处在于这里并不是瓷砖完全无法行走,它们只是并不总是与它们的所有 4 邻域相连。

    就 A* 而言,这意味着您的“获取邻居”功能非常重要,必须考虑到墙壁。

    例如,您可以为每个单元存储 2 位,一个用于指示它是否连接到南方,另一个用于表示东方。然后要计算一个单元格的邻居,您必须向 3 个单元格询问它们的位图,这可能有点棘手。您还可以存储每个单元格的所有 4 位。

    如果地图存储为行列表,计算邻居会更烦人,所以我只建议将其作为存储格式,而不是作为内存格式。

    【讨论】:

    • 已编辑问题
    【解决方案2】:

    几个建议:

    • 除了您的 7x7 正方形网格(也就是说,如果您出于任何其他原因需要 7x7 网格)之外,还制作一个 8x8 布尔值网格来指示墙壁的位置。
    • 如果您还没有,请创建一个 Cell 对象来存储您需要的任何值加上 4 个布尔值(可能在一个数组中)指示您是否可以在每个4个方向。然后将这些对象制作成 7x7 网格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多