28

谁能告诉我一种像我的世界那样生成岛屿结构或山丘结构的方法?

我只是在寻找一个合适的理论来生成随机形状,但它应该保持一个定义的基本模式..

像:岛屿应该是圆形的,但形状和规模会有所不同(最小/最大宽度和高度)。

或者:河流不应该是直线,它们应该有曲线和随机宽度。

甚至:生成某种森林,其中树木以用户仍然可以穿过森林的方式放置(我认为这是一个简单的方式,只是说如果代码尝试放置树周围的一些块应该保持空白最后一棵树周围有更多树)

我可以用什么样的数学来做这些事情?

我会很高兴有一些教程或参考链接。我在网上搜索了几个小时,但我只能找到一些可以买的书,比如“游戏数学”之类的书,但我的预算设置为零。

编辑:

首先,我很抱歉我的英语不好。

第二,我要感谢大家的回答。这些都是很好的参考资料,我会花很多时间来深入了解。

4

3 回答 3

38

我强烈建议您查看Amit 的 Game Programming Information和他的其他博客文章。他有一整套关于用河流、海岸线等创建逼真的地图的系列。

构建世界

虽然程序地图生成可以应用于非网格世界,但它最常用于网格。从一个时间点来看,生成的游戏地图很少像手工制作的世界那么好。但是,它们具有三个优点:(1)如果要制作许多世界,则每个世界的成本更低,(2)更多的重玩价值,因为下一次穿越世界不同,以及(3)世界发展的潜力,而游戏进行。

  • 阿米特的世界地图生成器
  • 程序内容生成:生成地形、城市、建筑物
  • Unangband的地牢生成
  • 生成具有锁匙结构的游戏世界,以便某些房间需要来自其他房间的对象
  • 构建河流的算法
  • 将河流添加到随机生成的地形
  • 用于生成地牢的原始 Rogue 算法
  • 11 种带有演示和代码的迷宫生成算法
  • 使用噪声函数生成洞穴,例如泰拉瑞亚和 Minecraft 中的洞穴
  • 不规则形状的房间,简单的算法
  • 可调整大小的室内房间区域
  • 在 DungeonMaker 中挖掘地牢的隧道算法
  • 随机地形生成技术指南
  • 程序内容生成的 Wiki 指南
  • 模拟大型虚拟世界

Amit 的Polygonal Map Generation for Games(列表中的第一项)是一篇非常令人印象深刻的文章,它讨论了生成合理形状的海岸线、岛屿、河流、山脉等的逻辑。令人印象深刻的工作!

一种在随机生成的世界中“生长”河流的方法 [包括在上面的列表中] 相当简单的算法,用于根据地图中的其他“图块”(例如它们的类型和海拔高度)生成河流的路径。

于 2012-08-15T11:09:10.797 回答
4

我曾经在制作 rougelike 时找到了一个很棒的理论站点。看看

于 2012-08-15T11:15:03.517 回答
3

很多时候,地图在逻辑上被分成图层/叠加层,如“基本地形高度”、“水位”、“高地”、“树木”、“房屋”等。

然后为每一层运行不同类型的生成器。经常使用分形,因为它们往往会产生有趣且难以预测的形状。但只使用了分形的一部分。使用整体会立即暴露结构(在顶级分形上非常重复)并且观众会注意到它。因此,生成的分形随后会被扭曲/修改/过滤/切割,这样就不明显了。例如,您可以使用一些简单的 XY 三角振荡器生成基本地形水平,然后将其与分形图像的一部分相加,限制为一些最小值-最大值,您会得到一个不平坦的地形,有明显的山丘和水滴..

对于所有其他图层,您通常无法“总结”,因为地形以外的图层与“高度”或“密度”无关,而是0/1 - 将树放在这里还是不放树?但是同样,你执行它类似:你生成一些图像(可能再次分形),然后检查数字并设置阈值:当数字高于/低于 X 时,你放置/不放置东西。您还可以对其进行过滤或分支:例如,如果一棵树会撞到水下位置,则将鱼放在那里或根本不放置树。

我很惊讶你找不到关于它的资源。几年前在谷歌上搜索“地形生成算法”会得到很多点击!

于 2012-08-15T11:16:06.073 回答