通过多维数组查找路径

时间:2012-10-16 16:44:24

标签: c# path-finding

我开始在C#中使用dungeon crawler,我已经编写了级别生成。

然而,我遇到了一个问题。我的关卡图存储在32x32多维数组中,每个图块都存储为字符串。除了以下所有的瓷砖(所有这些名称都是代表该瓷砖的变量名称)(mongroveplant,树,hjalaplant,vnosplant,barraplant,weedplant,naroplant,deathweedplant,venustrap,strangulator,雕像,空虚和石墙)不能走过去。

这些瓷砖(可以走过)构成一个更长的列表,可在此处找到:Walkable Tiles。在32x32多维数组中的每个条目中,每个条目都是一个字符串。

如何创建一个避免上面列出的所有图块的路径查找算法,但是可以浏览链接中列出的所有图块?我正试图从“开始”牌到“出口级别”牌。

1 个答案:

答案 0 :(得分:0)

我要删除的第一件事是字符串的概念。解析字符串在视频游戏方面并不快。你想要的是每个瓷砖(位域)都有标志。最后,你会喜欢旗帜,因为你可以将它们结合起来!

[Flags]
public enum TileDescription
{ 
    Walkable,
    Trap,
    Altar,
    Door
}

它们也可以存储在int中,这样可以占用更少的空间。速度和空间,两个惊人的概念。

至于路径寻找算法,那里有很多它们。但基本上,你有一个起点,一个终点,你必须找到两者之间最快的方式。我们的想法是检查最近的“节点”,看看你是否接近目标。每次都使用新节点重复检查。如果您陷入困境,则可以回退到仍有可用路径的节点。

你有一些不错的基本算法:

http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

http://en.wikipedia.org/wiki/A*_search_algorithm

然而,远程寻路总是非常昂贵。您必须将寻路限制到原点周围的特定范围。解析整个32x32迷宫可能需要花费大量时间才能找到最快的路线。在大多数情况下,当您超出特定范围时,将NPC移动到最近点,然后在到达它时或在到达时重复寻路。寻路的技巧是在很多帧上完成它,而不是试图一次性处理它。