在Netwalk游戏中生成迷宫的算法是什么?

时间:2011-07-07 08:56:38

标签: algorithm maze

在游戏Netwalk中生成迷宫的算法是什么?

Netwalk game screenshot

1 个答案:

答案 0 :(得分:15)

Google代码中的source code is available,您可以自己阅读并查找!迷宫由game.c中的函数generate_maze生成,第78ff行。


Update: try the demo!

Netwalk通过运行随机版Prim's algorithm来生成迷宫,以找到minimum spanning tree。 Prim的算法一次迭代地生成一个树,从源节点(或节点:在这种情况下,“服务器”,深蓝色双高度框)开始。在运行算法的任何给定点,数据结构如下所示:

enter image description here

绿色的细胞是生长枝条尖端的细胞:它们仍然至少有一个空的邻居可能会生长。在每一步中,算法选择其中一个绿色单元格,然后选择其中一个空的邻居(1),并在该邻居中添加一个分支。这个新的分支块邻近分支从其方向增长。当一个分支没有空的邻居(2)时,它将从绿色单元列表中删除。

最终绿色列表为空:网络的任何分支都没有任何空的邻居。这意味着电路板已满,每个单元通过一条路径连接到服务器。

enter image description here

[我已经在几个地方理想化了细节:(1)实际上Netwalk算法有点天真,只是选择一个随机方向,如果那个方向的邻居是非空的,它确实没有,继续下一次迭代。 (2)没有及时检测到没有空邻居的分支:如果碰巧选择它们,它们只会从绿色列表中删除。该演示修复了这些轻微的不足之处。]