【问题标题】:Random 2D Tile-Map Generating Algorithm随机 2D 瓦片地图生成算法
【发布时间】:2012-08-11 16:21:00
【问题描述】:

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

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

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

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

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

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

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

编辑:

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

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

【问题讨论】:

    标签: c# algorithm xna terrain procedural-generation


    【解决方案1】:

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

    构建世界

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

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

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

    A Method For 'Growing' Rivers In A Randomly Generated World [包含在上面的列表中] 相当简单的算法,用于根据地图中的其他“图块”生成河流的路径,例如他们的类型和海拔。

    【讨论】:

    • 哇,谢谢,我一定会仔细看看那个博客.. 很快我就从他那里找到了多边形地图生成www-cs-students.stanford.edu/~amitp/game-programming/… 我想知道我是否可以使用该技术在基于 2d 瓦片的引擎上。
    • 首先我考虑过生成每个像素代表每个图块的图像,因此我可以(实际上我不知道如何)只是粗暴地设置一些白色区域并将它们模糊(如高度图)然后用对比加强它们......
    • ...,所以所有白色或灰色的区域都会变成白色,黑色的区域保持黑色。所以我可以得到一个看起来很自然的区域,但关键是我需要数学灵感^^
    • Amit 创建随机点、变成 Voronoi 多边形,然后使用邻居相互影响的示例,而不是使用噪声位图,似乎(在我看来)生成了更逼真的世界......例如不太可能有随机山脉,更有可能有山脉。
    • 当然你可以用它来制作2D瓦片地图。生成这样的地图后,你只需要把它均匀地分成一些偶数块。逻辑拆分,只检查整个地图的矩形片段。然后,对于每个图块,检查特征:地形高吗?有水吗?有树吗?收集信息,然后为该地图块生成与该信息匹配的图块:带有河流和树木的山图块,然后移动到另一个块..
    【解决方案2】:

    我曾经在制作 rougelike 时发现了一个很棒的理论网站。 Have a look.

    【讨论】:

      【解决方案3】:

      地图经常被逻辑分割成图层/叠加层,例如“基本地形高度”、“水位”、“高地”、“树木”、“房屋”等。

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

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多