创建(真正的)随机迷宫的最佳逻辑

Mar*_*elo 4 c# language-agnostic random logic

我一直在尝试制作一个简单的小游戏来测试我的逻辑,这是一个简单的迷宫,很丑陋,而且到目前为止很糟糕。

引擎工作得很好,考虑到迷宫已经存在(一个矩阵),它甚至可能很有趣,但我无意绘制一堆地图,这可能会在矩阵的 400 (20x20) 字段上设置值。不好笑。

然后我创建了一个函数来随机化它,为每个字段设置地板/墙壁,并且(我预计)并非每个地图都是可获胜的。然后我做了另一个函数来检查地图是否可玩(接收两个点,并检查它们之间是否有有效的路径,然后我只需传递开始和结束。非常漂亮)并且它起作用了。

如果您没有注意到,这是创建随机迷宫的一种非常愚蠢的方式,原因如下:

1 -结果可能非常简单(巨大的地板岛,或一堆墙在一起,只形成一条极其可见的路径,创建一个愚蠢的(尽管有效)迷宫
2 -这可能是创建完美随机的最快方法有史以来的迷宫,但同时它也可能是最慢的,只要...无限长。当我将网格设置为 30x30 或更大(当某些东西没有溢出时)时,这种差异会更明显地被注意到 3 - 这是
愚蠢的对逻辑本身的冒犯。

在我看来,我从一开始就没有打算这样做,正如所描述的,一件事导致了另一件事。

所以我开始思考如何制作一个美丽的(充满路径、棘手且可获胜的)迷宫,然后我考虑制作带有预先设计的入口的微小(比方说)5x5 块,并将它们安装在一起适合,但它违背了我真正的随机愿望,也违背了我不愿意手绘它。

然后我想到了一个创建随机路径的函数,运行一次到终点,然后运行几次到接近终点的地方,还有一些交叉点之类的东西,一些创建死胡同,这对我来说似乎更好,但我无法想象它会创造出一个像样的迷宫。

您可以在此链接中查看我到目前为止所做的操作。

注意:我无意用任何东西伤害任何人的电脑。
第一个打开它的人,请在这里评论说它是安全的。 - 完成(谢谢 Jonno_FTW)

如果您仍然不信任它,请使用虚拟机。

OBS:我知道这不是开发任何东西的最佳方式。我应该得到一个像样的游戏引擎,bla bla bla,这对我自己来说是一种挑战。

Lor*_*tel 5

我已经完成了迷宫生成。您不想随机放置东西并进行验证。相反,您从一个起点生成它。

选择一个起点,向随机方向移动。有选择新方向的随机概率。永远不要进入一个被占领的广场,如果你撞到一个,当前的路线就结束了。如果当前路径结束,请选择一个您已经访问过的正方形,然后选择一个新方向,然后像第一个方向一样进行随机行走。重复此操作,直到迷宫达到您想要的程度。

方向改变的概率应该是一个输入参数,因为它会产生很大的差异。请注意,如果您正在玩 3D 迷宫,则垂直转弯的几率应该比水平移动的几率低很多。