随机地图生成如何工作



我目前正在开发一个基于文本的僵尸RPG模拟器,其中将有一个随机生成的城市可供探索和做事。我最初计划以 2D 数组保存城市,但后来我意识到,如果我这样做,我的阵列将占用千兆字节的数据用于数字存储。在做了一些研究之后,我发现了一种叫做柏林噪声的东西,这是一种基于单个种子生成几乎无限和随机地形的算法,我很好奇我是否可以在我的城市做类似的事情。伙计们有什么想法吗?


我意识到我没有给你们留下太多关于我需要的信息。我想要生成的城市应该由坐标网格表示,其中每个坐标绘制一个单独的坐标 在地图上构建。然而,建筑物应该以特定的方式布置。如果是金融区,那么办公楼应该更频繁地产生。如果是住宅区,那么公寓楼和自助洗衣店等建筑物应该更频繁地生成。如果是公园,则不应生成任何建筑物。

此外,一些建筑物应该比其他建筑物占用更多的坐标,例如商场等。

也应该生成整个城市的高速公路,但如果它使代码过于复杂,这并不重要,因为这是一个简单的学习项目。

柏林噪声主要通过组合几个"图像"(例如参见此处:http://devmag.org.za/2009/04/25/perlin-noise/)来工作,其中一些具有较低的频率,而另一些具有较高的频率。因此,您可以做的是使用较低频率的特定坐标处的值来确定城市中的区域类型。例如,假设图像在最低频率下的像素小于0.5,而第二低频率的图像像素也小于0.5,您可以声明您位于城市的金融部分。然后,较高的频率(变化更大)决定了建筑物或对象的类型(树,...)。

但是,您必须尝试参数以使其非常逼真。

我知道这是一个基本的答案,但请随时对此过程发表评论。

道路可能不能使用柏林噪声本身生成,但是例如通过执行一些后处理的算法(例如,您在金融区,您可以编写一个规则,如果某个瓷砖的左侧和右侧有建筑物,并且瓷砖本身没有建筑物, 你应该介绍一条路。

您可以使用随机点和放松,如本教程所示:http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/。它还使用德劳内三角测量和双沃罗诺伊图和嘈杂边缘。

最新更新