你如何在游戏中程序化地分配资源?

我的意思是资源分配是游戏中物品的放置。 更具体地说,建筑师/资源收集游戏中的“可小觑”物品,如Factorio,Oxygen不包括或/和RimWorld。

所有的游戏都将相同的物品放在一起。 例如在Factorio中 ,将会有煤炭,铁,铜等资源的领域,这些资源将以小的群集一起产生,而不是在地图周围撒上单个资源瓦片。 看截图: 在这里输入图像描述

这是一个类似的行为, 不包括氧气类似的资源更可能是彼此相邻,但取决于罕见,他们也可以单独作为一个单一的块。 在游戏中还有一些区域,表示哪些资源可以产生,因为它们是相同的(每个游戏相同),但是资源本身在程序上是位置的,这些资源可能是预设的位置和形状。 我在网上抓取了截图,并突出了一些资源types,以使分布更加明显。 在这里输入图像描述

理想的答案将显示哪些方法将很好地再现“集群资源分配”,具有给定方法的优点和缺点。 它不一定有代码示例,而是必须采取粗略的步骤/伪代码。

就像程序化地完成所有其他的程序生成一样。

通常这以“某种噪音”开始。 然后,您将缩放并过滤噪声以从中提取数据。

例如,您有一个伪随机噪声的二维数组,其值范围从0到1.将这个二维数组映射到您的世界,可能通过x,y坐标。 对于2Darrays中大于.95的所有值,在该点向世界添加一个铜节点。 值越接近1,节点中的铜量越高。

例如,在这张地形的图像中,开发者使用分段函数来确定地形的高程。 即

if value > .9: elvation = 10, if .75 < value < .9: elevation = 8 etc. 

在这里输入图像描述

对于资源示例,只有最高的地形位置将被设置为资源位置。

如果你希望自己的资源更为普遍,而不是.95,select.9或者更小的数字,这样就增加了你的资源覆盖面积。

像你参考的游戏中的程序图是由许多层噪声组成的。 每个图层都有不同的比例,不同的种子定义了不同的属性。 将会有生物群落,水,敌人的位置,资源等图层。一些图层会参照其他图层,以确保它们不违反放置规则(如水面上的资源)。

总而言之,这是一个自定义的规则和噪音组合,创建一个完整的地图。