0

我开始使用 C# 编写地牢爬虫,并且已经编写了关卡生成代码。

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

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

如何创建一个寻路算法,避免上面列出的所有图块,但可以遍历链接中列出的所有图块?我正在尝试从“开始”磁贴到“退出级别”磁贴。

4

1 回答 1

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 移动到最近的点,然后在到达该点或到达该点时重复寻路。寻路的诀窍是在许多帧上进行,并且永远不要尝试一次处理所有内容。

于 2012-10-16T16:56:24.830 回答