如何创建随机吃豆人迷宫

问题描述 投票:0回答:4

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

algorithm maze pacman
4个回答
6
投票

我解决了我的问题并想分享。首先,我将顶行、第一列和最后一列设置为墙壁障碍物,然后在第二列、倒数第二行和第二行上设置路径,使其围绕外墙。另请记住,我只创建了迷宫的 50%,因此当我完成后,我会复制迷宫,以便两侧相等。然后我创建了一个被墙包围的中间部分,作为鬼魂产卵的区域。然后,我使用深度优先搜索算法生成迷宫中尚未查看的任何部分。完成此操作后,我知道在吃豆人迷宫中没有死胡同。我所做的就是检查 pacman 可以行驶的路径中的每个单元格。如果任何单元格只有 1 个边界单元格,那么它就是一个死胡同。如果是死胡同,看看是否可以连接到另一条路。如果没有,请将死胡同设置为墙,并再次检查迷宫是否有死胡同。遵循这些步骤后,您将拥有一个没有死胡同的随机迷宫,类似于典型的吃豆人迷宫。


2
投票

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


2
投票

很久以前,我使用深度优先和消除死胡同在 C=64 上创建了一个随机 PacMan 迷宫生成器,但最近我的朋友要求我再做一次。找到了更好的方法。请访问我的网站

查看

本质上,我创建了一个房间网格,每个方向都有一扇开着的门(除了隧道所在的地方之外,边界上都是关闭的),然后开始根据规则随机关闭门,即一个房间中永远不应该有超过一扇关闭的门。相邻房间如果两扇门关闭,第三扇门就会形成死胡同。只要继续随机地这样做,直到所有潜在的门都按照规则关闭或打开。

镜像需要更多工作,但我从基础知识开始,只是建立了允许镜像、鬼屋位置、最小墙长(没有单墙环形交叉口)和最大墙长等的规则...


0
投票

我用随机迷宫制作了自己的吃豆人。 看看吧!

https://play.google.com/store/apps/details?id=com.kaiogames.pacemoji

© www.soinside.com 2019 - 2024. All rights reserved.