如何生成类似于《帝国时代II》随机地图的随机地图?
我喜欢《帝国时代II》生成随机地图的方式(种类繁多,生物群落过渡不错,地图感觉随机而不混乱),但仍在努力复制样式。我尝试使用例如Perlin噪声,但是所有结果要么太均匀,要么不一样,Perlin值->地形启发法过于敏感和脆弱,无法创建各种世界类型。 我记得AoE2地图类型“未知”广告了“ 100,000张可能的地图”,暗示了一些种子编号的用法,但是我不确定如何使用种子编号来产生我所看到的品种。 我可以使用什么算法和启发式方法来生成类似于AoE2随机图的随机图? 编辑更具体: 进一步思考我的问题,并研究我对AoE2随机地图引擎的喜欢,我认为我最大的问题是管理地图上水和植物生命的分布。我现在看到我也将其与“有意义的生物组转换”联系在一起,但这是一个不同的问题(尽管我希望继续使用Perlin噪声将使其难以解决)。 我添加了几张AoE2随机映射,突出显示了我对它们的映射引擎的喜好,但我自己的努力未能重现。所有屏幕截图均取自随机地图类型“自定义”->“未知”。我没有指示游戏使用特定地理位置,例如群岛。 以下是来自我自己的地图引擎的图像。每个像素对应一个AoE2地图图块。 我的项目的一个难题是我希望地图比AoE2地图大很多倍。因此,无论我使用哪种引擎,都必须能够在每个地图中创建完整的生物群系,而不能像AoE2那样在每个地图中创建一组狭窄的生物群系。 帝国时代II地图 这是一个具有内陆湖泊和类似河流的事物的示例。我喜欢地图上包含大量散布的水的方式,但是水仍然有些集中-有大量土地可用于建立帝国。您无需花费整个游戏就可以在水上规划城市。 这是一个类似的示例,其中游戏足够聪明,可以将岛屿与可穿越的沼泽相连。我无法想象基于噪声的算法将如何在那以及只有那些地方造成沼泽。另外,请注意游戏是如何创造土地的,以便每个玩家都拥有自己的私人大片土地。它并没有创造出一片随机的土地,然后就每位玩家开始时哪怕是最糟糕的猜测。 我喜欢这张地图也大量使用水,但其中不包括许多内陆湖泊。将其与第一个图像进行对比。我喜欢AoE2使用相同的构建块创建完全不同的地理位置的方式。我尝试使用Perlin噪音的尝试在这里失败了-我要么获得了广阔的海洋,使陆地或10,000个湖泊的土地相形见war。我还发现很难同时到达岛屿和相连的大洲(想想北美/南美)。 将此图像与其上方的图像进行对比。他们表明地图的干旱度不取决于水位。第一张图片的地图几乎没有水,但包含森林和草丛。第二张图像的水量适中,却是沙漠。我喜欢那是可能的(想想您的世界既有新墨西哥,又有撒哈拉和哥斯达黎加)。 我自己的地图 我在很多地方都读到,构建地图的一种好方法是对Perlin噪声的多个级别进行分层,每个级别代表不同的数据维度。按照流行的建议,我选择了海拔和湿度,并从此处的Whittaker表中选择了地形类型。 我拍了两个珀林图,通过一个简单的量化每个值成整数if perlin_val < x { i=some_int } else if perlin_val < y...,然后将(海拔,湿度)整数对映射到地形类型表(例如[1,0]->热带沙漠,[1,1 ]->草原)。该系统中包括海洋-海拔= 0定义的海洋。 有很好的变化,并且在许多方面感觉都像真实世界,但是存在一些问题: 首先,海洋深度没有规律。您可能希望靠近岸边的浅水区和更远的深水区,没有哪个韵律或原因 第二,所有的水都集中在海洋中。没有湖泊或河流,因为Perlin噪声不会在大洲中部突然下降到较低的值。 在每个生物群落的数量之间取得平衡非常非常困难。我将此归因于: Perlin噪声遵循正态分布,因此很难估计如何调整每个尺寸映射的概率 试图平衡多个维度很困难-也许我想要更多(2,3),所以我提高了获得(n,3)的几率。好吧,现在我有太多(3,3)了,一切看起来都错了。 当我将噪声放大到足够接近以获取平滑数据时,我没有得到非常完整的Perlin值样本。因此,我需要调整我面前地图的分布,重新加载新的随机地图,并获得截然不同的结果。 我试图通过使用第三组Perlin值制作水来解决河流/湖泊问题。根据水/土地的二元决策,然后将以上所有内容应用于土地。这使控制水的分布变得非常容易(仍然不完美,但是更好),但是引入了一个问题,那就是存在许多没有意义的生物群落过渡。例如,茂密的草原中莫名其妙的沙漠,沙滩上的雪等。由于上述原因,仍然很难控制陆地生物群落的比例。 考虑到上述问题,我尝试了一种更简单的算法,该算法仅将Perlin噪声映射到一个维度。我现在有一系列的地形类型,从0 =深海-> 1 =浅海-> 2 =沙滩...-> N =雪。虽然这产生了岛屿和大洲,并且使平衡每个地形的比例变得容易得多,但地形类型却过于聚集。每个陆地块看起来都像一张海拔图,通常没有分散在其表面的地形类型。每个陆地块都具有大致相同的特征,始终具有相同的顺序,并且始终具有相同的环形形状。