Jac*_*ack 28 algorithm 2d procedural-generation tile
我正在开发一个2D磁贴引擎,此时我正在研究地图生成算法.
我试过通常涉及简单高度图生成的基本方法
但我总是遇到同样的问题:这种算法在处理也有高度组件的平铺地图时似乎很合适,但这不是我的情况.
我基本上有精灵,如草,海,沙漠等等,但它们不应该根据生成的高度放在地图内部但是像
我应该尝试什么样的方法?
我通过开发专门的算法来解决子组件的问题(比如沙漠,山丘和山脉)来做我需要的事情(比如山从一个点开始然后跟随一个有可能转向的方向)但是我没有成功基本岛屿(可以定制为只是一个pangea或多个大小的程度).
只是为了给你一个实用的想法我正在寻找的东西就像文明算法:

Mor*_*sbo 17
我使用了一种方法,其他人称之为使用"蚂蚁"来创建随机地形.所用方法的描述:
首先,我使用专门的tile类的二维矩形数组(x,y)生成了tilemap.tile类包含tile相关信息,例如drawpoint和terrain类型.
然后我创建了一个特殊的"ant"类,它可以被认为是一个无形的实体,它在tilemap周围采取"步骤".每次蚂蚁移动到新的图块时,底层地形类型都会发生变化.每次移动一个瓷砖时,蚂蚁可以在8个方向上移动并改变方向.每个步骤后的方向是随机的.
我产生固定或随机数量的具有固定或随机寿命的蚂蚁.生命周期是它在被移除之前可以遍历/步进的瓦片数量.
为了能够控制最常见的地形类型,我创建了一个"地形类型"数组.此数组包含地形类型列表(基本上只是一个int).要在所有类型的地形之间获得相等的平衡,您只需将每种地形类型中的一种添加到地形类型数组中.如果您希望某种地形类型更常见,则可以使用该特定地形类型向数组中添加更多条目.
然后,当蚂蚁需要确定要更改的地形时,使用随机整数作为数组索引在地形类型数组中进行查找.
它需要一些调整参数(蚂蚁数量,蚂蚁寿命,地形类型数组),但到目前为止我已经实现了一些非常好的地形.
它可以通过使用更复杂类型的蚂蚁类进一步增强,例如遍历专门模式等.为了在海洋中制造可信的岛屿,你可能想要修改蚂蚁行为,因此它们有一些约束条件.移动的方式(所以你不要随意长期"尖峰"的土地,非常分散的小岛屿等).
下面是一个森林的示例tilemap,它是由我使用ant方法制作的一个小应用程序生成的.希望这可以让你顺利上路!
您可以在Github上获取应用程序的源代码(VB.NET)

Mer*_*ham 16
[山丘世代,柏林,钻石广场] ......这种算法在处理也有高度成分的瓷砖地图时似乎很合适,但这不是我的情况.
但这是你的情况.山脉高于平原,平原高于水.
___/
___/ ___ Mountain cutoff
___/
______/
____/ ___ Water cutoff
__/
Run Code Online (Sandbox Code Playgroud)
您可以量化数据,以便如果它在一组级别之间,则计为一种类型的区块,而当它在不同的范围内时,它是不同类型的区块.你会抛出一些细节,但你仍然会得到与你正在产生的噪音类型相匹配的轮廓.
它可能需要进行大量的调整,并且需要您自己生成其他陆地功能(除了无法通行的山脉),但您必须使用任何内容生成解决方案进行大量调整.