一个简单的地图,四个生物群落以及如何分布它们


16

这是一个基本概念:我有一个Rogue风格的游戏,也许是Dwarf Fortress风格的游戏,它具有随机生成的游戏世界,并且周围散布着多个地牢入口。我已经基本涵盖了地牢,但是我被困在了整个世界的一个方面。

所说的“世界”被视为屏幕的2D地图,应该具有斑点状分布的四个不同主题或生物群落-草原,沙漠,雪地和沼泽,每个主题都有自己的屏幕总数。假设地图为8x8,可提供64个独特的屏幕。其中一半可能是草原,四分之一的沙漠,沼泽和积雪各占四分之一:

包含城镇和起始位置但没有地牢入口的可能世界地图的模型

减少调色板似乎使积雪和沼泽的颜色相同。最初,底角有八个挡雪板,中间有一个交错的八挡沼泽区。抱歉,请忽略位置标记。

我能得到的最好的是一些蛇形的形状,并且常常与荒谬的组合(例如沙漠在雪地中蛇形)(反之亦然)结合在一起。我一辈子都想不出如何使它变得漂亮又过时,更不用说让它具有气候意义了吗?那么如何像样机一样生成生物群系图?

好的,根据要求:世界确实没有比那个例子大得多,而我需要的只是散布确定主题外观的斑点的方法,但有雪不能触及沙漠的额外限制。屏幕不滚动,并且如果屏幕设置为“沙漠”,则屏幕上将无草。


您愿意使用第三方库,还是要编写自己的解决方案?
威廉·玛丽亚格

更喜欢自己编写代码。
卡瓦

生物群落大小是固定的吗?
kaoD 2011年

您可以使用要生成地图的确切规则的点列表来编辑帖子吗?对于我们来说,确切地知道我们要干什么会更容易处理这个问题。
William Mariager

编辑,以及生物群系的大小,例如,我接受了这些。对于16x16的世界,沙漠可能仍然是该区域的四分之一,依此类推,但这主要是为了确保某些区域会在那里。
卡瓦

Answers:


8

有很多方法可以给这只猫剥皮,但是更有趣的方法之一是使用细胞自动机。从您的空网格开始,然后在随机位置添加一些种子起始单元。这些应该是一些基本的非混合生物群落类型。说:草,沙漠,雪,海洋。

根据您自己设计的增长规则,该规则可能具有一些随机性(我不在乎它在技术上是否打破了CA的概念,对吗?),请他们将每个步骤都扩展到地图中。可能会有其他规则,例如,如果您在海洋中,并且靠近草丛或沼泽,则可能变成沼泽。如果靠近雪,则可能会变成冰,如果靠近沙漠,则可能会变干并变成沙漠。

对于其他混合物,也可能如此,从理论上讲,甚至包括子混合物,例如冷冻沼泽或冻原,或者是从大片草地上生长的大片森林中萌芽的丛林。

可能性是无限的,也可以是连续的。由于这些规则都很简单,因此您可以实现随时间推移而变化的环境。结合高度信息以及考虑在内的规则,您可以生长湖泊和河流,阻止森林在山脉和其他奇特的物体上的生长。

该高度图可能是珀林噪声,菱形方形甚至整个其他CA模型的结果。实际上,随着时间的流逝,您还可以通过对板块构造进行建模,推升山脉,沉入战es,甚至让河流降低景观以形成峡谷,来修改该地图。

这个兔子洞永远延伸。


提出CA建议。它与Valmond的评论非常吻合。
卡瓦

您会惊讶于CA解决方案对这个问题有多么简单。简单的规则和随机的起始图可以产生非常详细和“逼真的”外观。
DampeS8N 2011年

遵循CA原则。尚不完全正确,因为唯一的办法就是将沙漠和大雪分隔开来,这是一些绝对位置规则,但目前为止做得很好。
卡瓦

1
解决雪/沙漠问题的一种可选解决方案是制定规则,在雪遇沙漠的地方创建不同类型的生物群落。说,沼泽。然后沼泽可以继续正常生长。您可能仍然有雪/沙漠边界,但实际上这很自然。实际上,地球上大多数沙漠都被雪覆盖。-简而言之,大雪可能有这样的规律:如果任何邻居都是沙漠,它就会变成沼泽。
DampeS8N 2011年

11

简短的答案,但您应该真正查看这篇文章-www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/它解释了关于随机产生旱地和生物群落的一种算法根据指定的湿度区域和海拔区域。但对于您而言,只需为所需的分布设置自己的值即可。

(大修改)对于需要应用哪些地图生成概念,我将使其更加清楚。使用每个屏幕1个单位的坐标系,以浮点值表示。在这些坐标内生成少量随机点集,就好像您正在制作Voronoi图一样,但实际上我们不会制作随机形状。取而代之的是,在设置了生物群系之后,该图将隐含在图上并由地图近似。

每个点是每个生物群落区域的中心。设置自己的规则以将点与生物群落相关联。例如,如果您想要东部的沙漠,而南部或北部的距离不远,则所有大于某个X值且在某个Y范围内的点都将被沙漠包围。

将每个屏幕与这些点之一相关联,这可以通过以XY坐标(例如4.5、8.5)获取屏幕的中心并返回最靠近屏幕中心的点来完成。

这是屏幕网格上的形状图的粗略图。我们并不是真正关心形状周围的线,但是它们在那里只是说明屏幕如何开始近似形状区域。

Voronoi-grid

对每个屏幕重复上述操作,为每个屏幕提供自己的生物群系。


我以前见过,而且我的口味有点像火箭筒上的火箭筒。
卡瓦

好吧,这很温和。这是非常火箭筒-ON-A-蚊子。8x8的例子不仅仅是一个例子-世界真的还不足以证明该解决方案的合理性。
卡瓦

好的,我现在知道了。您实际上不需要将生物群系与地图的每个图块区分开。同样,本文提出的概念似乎确实是针对作者量身定做的,但可以摘取某些部分。我正在编辑我的答案以使其更加清晰。
ChrisC 2011年

仍然太复杂了。这里没有高度或湿度。我所需要的,所有我的意思是了一些方法,以一种“摊开”沙漠,沼泽,和雪达到规定数额的斑点,像下面“雪不能太靠近沙漠”一些额外的规则。
卡瓦

@Kawa:看来您已经准备好深入研究并编写自己的解决方案了!据我所知,您已经将所有这些视觉化了,只要做就可以!:)请记住,只要看起来像它,它不一定是世界上最终的地图生成器。;)
Zolomon

1

答案1:

种植雪和沙漠,这样做之后,寻找(禁止的)交叉路口,并在那里(或多或少大)沼泽地生长。

再次重复。

答案2:

对于“ blob”部分,我(按要求)将我的评论移到了帖子中:

如果您通过迭代成长,即。设置1个沙漠点,然后在任何沙漠点附近随机生长(每次随机获取一个现有的沙漠点,并在其一侧(没有任何东西的地方)增加1个点),那么您应该会得到一个笨拙的效果(例如没有长行)。

您还可以添加一条规则,以便如果附近的瓷砖上有雪,则无法创建沙漠瓷砖。


这并不能完全解决问题的陈旧。
卡瓦

2
如果您通过迭代成长,即。设置1个沙漠点,然后在任何沙漠点附近随机生长(每次随机获取一个现有的沙漠点,并在其一侧(没有任何东西的地方)增加1个点),那么您应该会得到一个笨拙的效果(例如没有长行)。
瓦尔蒙德2011年

您还可以添加一条规则,以便如果附近的瓷砖上有雪,则无法创建沙漠瓷砖。
瓦尔蒙德2011年

Valmond,请回答。
卡瓦
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.