类似于Rogue的2D地下城生成有哪些理想算法?[关闭]


Answers:


27

以前已经或多或少地回答了这个问题。您的第一站应该是http://pcg.wikidot.com/,

因为我被指控这根本不是一个有帮助的答案(真的吗?有人要求提供资源,我发布了一个链接到处理该主题的Wiki吗? ),此Wiki上的此页面专门处理Dungeon生成器,并链接到有关该主题的各种文章。
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

我仍然建议您浏览整个Wiki,因为程序内容的生成只是一种非常有创意的方法,所有想法都是有效的。这是一个横向思考的挑战,也是一个有趣的挑战。


+1表示“所有想法都是有效的”,但我想澄清一下:所有想法都是有效的,但是有些想法会比其他想法更好。您的<模糊的计算机术语> 可能会起作用,并且可能是您想要的,但是还有其他方法可以更有效,更随机,更具凝聚力,更可自定义或其任意组合,除非您是真的很好还是很幸运。
尼克·哈特利

20

通过使用以下基于正方形网格的算法,我设法获得了相当不错的外观级别:

首先,创建一组房间。随机参数将定义房间的大小及其数量。自适应算法甚至可以定义一些由大走廊组成的区域,而另一些则由很小的房间组成。

然后,您需要确保所有房间都相互连接。为此,运行探路器在每对房间之间挖掘走廊(比方说A *),与尚未雕刻的空间(墙壁)相比,随机选择现有空间(房间或其他走廊)的权重。如果重量差很小,那么挖掘新的走廊将相当便宜,并且该算法将在房间之间建立许多走廊,并且有从一个地方到另一个地方的很多可能性。如果权重差异很大,则该算法将更喜欢通过现有的房间和走廊,从而使路径更加曲折,并且到达指定目的地的选择更少。

这使您可以通过少量参数来创建外观完全不同的水平,从稀疏的大型大厅(带有小走廊)将它们链接到紧密相连的小室的蜂巢状迷宫。

这是生成的级别的示例。

在此处输入图片说明

基于此算法,您可以添加取决于区域的墙面装饰,使走廊变小或变大,创建特殊房间等。


10

如果您喜欢阅读代码并且可以解析C#,我是否可以建议我的无赖A菜使用的地牢生成器?这是在这里。它处理连通的房间,可扩展的功能以及其他一些不错的东西。

如果您下拉并构建整个项目,则有一个独立的工具可以生成并绘制地牢,因此您可以对其进行调整并查看其工作方式。


1
几个月前,我遇到了A菜,但是当我自己进入地牢世代时,我已经忘记了这个名字。感谢您的链接!
加布里埃尔·伊森伯格

2
您在journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes上的文章也非常好,我使用的是该版本的修改版,并具有一些其他功能,例如不同的走廊
发电

3

所有这些都是很棒的主意。我从RogueBasin和pcg.wikidot.com中获取了一些经验,并用C#编写了自己的实现。

我真的很喜欢可以通过使用元胞自动机方法生成的类似于洞穴的水平“自然”外观。要了解细胞自动机方法的含义,请想象一下Conway的“生命游戏”。我的代码使用的是所谓的4-5方法,这意味着如果瓷砖是墙并且其9个邻居中的4个或更多是墙,或者它不是墙并且5个或更多邻居是墙,则它将成为墙。首先,我用墙壁或空间随机填充地图,然后迭代访问每个x / y位置并应用4-5规则。为了帮助缓解形成孤立的洞穴的问题,在随机填充地图后,我在地图上留出一条水平线,将每个图块设置为空间而不是墙,然后对每个图块应用4-5规则。

您可以查看我的地图处理程序类的代码,以及我在此处所做的任何改进

此处的存档版本。


2
这个问题有很多票,如果您能再打开一点这个答案会更好。链接最终会消失,因此请尝试回答,这样就无需单击链接。这是如何运作的?主要思想是什么?它与其他算法有何不同?
卡图

1
链接实际上确实消失了。
htmlcoderexe

2

我认为最直接的发现位置是实际查看源代码。该领域的两个主要参与者Angband和Nethack都是开源的。


3
尽管是开源的,但据我所知,它们都不是大量有据可查的源代码,也不是透明的源代码,也不是为学习而写的源代码。他们很容易进行调整,但是总体上很难理解。
汤姆·哈德森

也许原始文档不是很好的参考,但是有很多变体,其中一些非常出色。例如,UnAngband的开发人员对地牢一代进行了许多增强,并撰写了一系列出色的博客文章,因此即使没有代码,您也绝对可以使用这些想法。
congusbongus 2014年

众所周知,NetHack源代码很难理解。地牢发电机(其中之一)跨不低于三C文件,以及约15功能展开
艾丽卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.