2011-11-30 88 views
1

我正在用.net构建基于短信的空间游戏我有一台服务器和客户端,可以在地图上“移动”。地图按行业细分,每个行业都有可能连接到周围的其他8个行业(也有对角线移动的行业)。这通过列出连接扇区的数组存储在扇区类中。目前,所有的行业都存储在一个列表中。发出移动命令时,将检查连接扇区阵列,并且如果在阵列中找到所请求的扇区,则加载新的扇区。如何实现自动驾驶仪

我想要做的是实现一个自动驾驶仪功能,但对于我的生活无法弄清楚如何将其与我目前的结构拉下来。每个部门只知道它是连接部门。

有没有人有任何建议/想法?

感谢,

回答

3

我想你想的最短路径算法。这些部门形成一个图表,你想找到一个通过这些部门的路线。

最简单的方法是从船的当前位置和想要获得的位置开始执行两次同时宽度优先搜索。找到共享节点时,将路径合并到每个位置的该节点,并且有路径。

如果您有任何接近数据,您可以使用A *优化它。

1

有几种方法可以做到这一点。你的地图是否像空间本身一样,你可以在哪里四处旅行,还是更像迷宫?作为一个空间的游戏,我会想象地图是

XXXX 
XXXX 
XXXX 
XXXX 

在这种情况下,你可能会使用一个二维数组来存储地图会更好。这将允许您通过增加X和Y直到找到目的地为止自动驾驶。

但是,如果您的地图比较复杂,则应该调查导航的“A *算法”。你所做的就是通过计算每条可能的路线,并选择最短路线,将自己的方式蛮力推向最佳路线。例如,如果你的地图是:

X 
XXX 
A B 

而且你想从A到B获得,你产生的地图:

(U =向上等)

U 
UR 
URU 
URUD 
URUDR 
URUDRD* 
URR 
URRD* 

它会看起来像这样。 *表示路线到达目的地,然后它看着所有的路线,并选择最短路线。

A *的优点是您可以对每个部门应用权重。如果在一个扇区内有一个星云需要经过3倍的星云,可以通过比较总的“努力”而不是操作的数量来将它包括在算法中。这在你的角色通过路径导航的游戏中很酷,因为路径要快得多:)

这个在线搜索算法很多,只搜索A *寻路。祝你好运!