随机二维拼贴地图生成算法

时间:2012-08-15 11:03:01

标签: c# algorithm xna terrain procedural-generation

有谁能告诉我一种生成岛屿结构或山地结构的方法,比如我的世界?

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

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

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

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

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

我很高兴获得一些教程或参考资料的链接。我在网上搜索了好几个小时,但我能找到的只是一些像“游戏数学”之类的东西,但是我的预算设定为零。

编辑:

首先,对不起,我很抱歉。

中学我要感谢你们所有人的答案。这些都是很好的参考,我会花很多时间深入研究。

3 个答案:

答案 0 :(得分:32)

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

  

建立世界

     

虽然程序地图生成可以应用于非网格世界,   它最常用于网格。从单一时间点看,   生成的游戏地图很少像手工制作的世界一样好。   但是,它们有三个优点:(1)如果有的话,每个世界的成本会降低   有很多世界要做,(2)因为下一个有更多的重播价值   通过世界的时间是不同的,(3)世界的潜力   在游戏进行过程中不断发展。

     
      
  • 阿米特的世界地图生成器
  •   
  • 程序内容生成:生成地形,城市,建筑物
  •   
  • Unangband中的地下城生成
  •   
  • 使用锁定和键结构生成游戏世界,以便某些房间需要来自其他房间的对象
  •   
  • 建造河流的算法
  •   
  • 将河流添加到随机生成的地形
  •   
  • 用于生成地下城的原始Rogue算法
  •   
  • 11迷宫使用演示和代码生成算法
  •   
  • 使用噪音功能生成洞穴,例如Terraria和Minecraft中的洞穴
  •   
  • 形状不规则的房间,算法简单
  •   
  • 可调整大小的室内空间区域
  •   
  • 在DungeonMaker中挖掘地下城的Tunneler算法
  •   
  • 随机地形生成技术指南
  •   
  • 程序内容生成维基指南
  •   
  • 模拟大型虚拟世界
  •   

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

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

答案 1 :(得分:3)

当我制作一个roguelike时,我曾经为这个理论找到了一个很棒的网站。 Have a look

答案 2 :(得分:3)

这些地图经常被逻辑地划分为层数/叠加层,如“基础地形高度”,“水位”,“高地”,“树木”,“住房”等。

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

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

我感到很累,你无法找到资源。几年前谷歌搜索“地形生成算法”将返回许多命中!