Answers:
以前已经或多或少地回答了这个问题。您的第一站应该是http://pcg.wikidot.com/,
因为我被指控这根本不是一个有帮助的答案(真的吗?有人要求提供资源,我发布了一个链接到处理该主题的Wiki吗? ),此Wiki上的此页面专门处理Dungeon生成器,并链接到有关该主题的各种文章。
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation
我仍然建议您浏览整个Wiki,因为程序内容的生成只是一种非常有创意的方法,所有想法都是有效的。这是一个横向思考的挑战,也是一个有趣的挑战。
通过使用以下基于正方形网格的算法,我设法获得了相当不错的外观级别:
首先,创建一组房间。随机参数将定义房间的大小及其数量。自适应算法甚至可以定义一些由大走廊组成的区域,而另一些则由很小的房间组成。
然后,您需要确保所有房间都相互连接。为此,运行探路器在每对房间之间挖掘走廊(比方说A *),与尚未雕刻的空间(墙壁)相比,随机选择现有空间(房间或其他走廊)的权重。如果重量差很小,那么挖掘新的走廊将相当便宜,并且该算法将在房间之间建立许多走廊,并且有从一个地方到另一个地方的很多可能性。如果权重差异很大,则该算法将更喜欢通过现有的房间和走廊,从而使路径更加曲折,并且到达指定目的地的选择更少。
这使您可以通过少量参数来创建外观完全不同的水平,从稀疏的大型大厅(带有小走廊)将它们链接到紧密相连的小室的蜂巢状迷宫。
基于此算法,您可以添加取决于区域的墙面装饰,使走廊变小或变大,创建特殊房间等。
如果您喜欢阅读代码并且可以解析C#,我是否可以建议我的无赖A菜使用的地牢生成器?这是在这里。它处理连通的房间,可扩展的功能以及其他一些不错的东西。
如果您下拉并构建整个项目,则有一个独立的工具可以生成并绘制地牢,因此您可以对其进行调整并查看其工作方式。
所有这些都是很棒的主意。我从RogueBasin和pcg.wikidot.com中获取了一些经验,并用C#编写了自己的实现。
我真的很喜欢可以通过使用元胞自动机方法生成的类似于洞穴的水平“自然”外观。要了解细胞自动机方法的含义,请想象一下Conway的“生命游戏”。我的代码使用的是所谓的4-5方法,这意味着如果瓷砖是墙并且其9个邻居中的4个或更多是墙,或者它不是墙并且5个或更多邻居是墙,则它将成为墙。首先,我用墙壁或空间随机填充地图,然后迭代访问每个x / y位置并应用4-5规则。为了帮助缓解形成孤立的洞穴的问题,在随机填充地图后,我在地图上留出一条水平线,将每个图块设置为空间而不是墙,然后对每个图块应用4-5规则。
您可以查看我的地图处理程序类的代码,以及我在此处所做的任何改进
或此处的存档版本。
我认为最直接的发现位置是实际查看源代码。该领域的两个主要参与者Angband和Nethack都是开源的。