如何创建一个随机的pacman迷宫

时间:2012-09-01 07:55:56

标签: algorithm maze pacman

您好我一直致力于生成随机pacman迷宫的算法。我看过几篇文章,但无法分解逻辑。我正在使用迷宫算法深度优先搜索,然后我镜像迷宫使每个迷宫对称。我遇到了清理死胡同等问题。如果这是不可能的,我也会尝试另一种算法,如果有人有自己的逻辑来生成随机迷宫。任何帮助表示赞赏。感谢

3 个答案:

答案 0 :(得分:4)

我解决了我的问题并希望分享。对于初学者,我将顶行,第一列和最后一列设置为墙障碍物,然后在第二列上设置路径,在第二列到第二行设置路径,使其围绕外墙。另外请记住,我只创造50%的迷宫,所以当我完成时,我复制迷宫,所以双方都是平等的。然后我创建了一个由墙围绕的中间部分,用于鬼魂产生的区域。然后,没有看过迷宫的任何部分我使用深度优先搜索算法生成路径。在这之后,我知道在pacman迷宫中没有死角。我所做的是检查每个细胞是pacman可以行进的路径的一部分。如果任何细胞只有1个边界细胞那么它就是一个死胡同。如果它是一个死胡同,看看它是否可以连接到另一条路径。如果没有将死角设置为墙壁并再次检查迷宫的任何死角。按照这些步骤操作后,您将看到一个没有死角的随机迷宫,类似于典型的pacman迷宫。

答案 1 :(得分:2)

我建议在干净区域(没有任何墙壁,在0 *的n * n矩阵中)通过dfs进行随机游走,之后填充未被随机游走覆盖的区域(将它们设为墙) ,这也可能导致未使用的空间,但这保证了漫长的步行。你可以随意设置步行的大小(例如当你的步行大小达到(n ^ 2)/ 2时,你可以停止步行)。

答案 2 :(得分:1)

我很久以前在C = 64上创建了一个随机PacMan迷宫发生器,首先使用深度并消除死角,但最近我的朋友再次提出挑战。找到了更好的方法。请查看my site

基本上,我创建了一个房间网格,每个方向都有一扇敞开的门(除了隧道所在的边界关闭),然后根据规则决定不要超过1个关闭的门随意开门关闭在相邻的房间,如果2个门关闭,第三个将产生一个死胡同。只要继续这样做,直到所有潜在的门都被规则关闭或打开。

镜像是一项工作,但我从基础开始,只是建立规则,允许镜像,鬼屋位置,最小墙长(没有单壁环形交叉口)和最大墙长等...... / p>