如何将运行时程序生成的世界划分为块

时间:2011-10-11 21:36:57

标签: procedural-generation

我一直在考虑使用伪无限运行时程序生成的世界制作一个自上而下的2D游戏。我已经阅读了几篇关于程序生成的文章,也许我误解或误解了它们,但我还没有遇到过一个解释如何将世界划分为块(就像Minecraft显然那样)。

显然,我只需要生成玩家当前可以看到的世界部分。例如,如果我的游戏是基于图块的,我可以将世界划分为n * n个块。如果玩家位于这样一个块的边界,我也会生成相邻的块。

我无法弄清楚的是我究竟如何采用程序世界生成算法并且一次仅在一个块上使用它。例如,如果我有一个生成大结构的算法(例如城堡,森林,河流),它会分散在许多块中,我怎样才能调整它以生成一个块,然后生成相邻的块?

如果我完全错过了一些明显的东西,我道歉。提前谢谢!

1 个答案:

答案 0 :(得分:4)

研究Midpoint displacement algorithm。请注意,一侧的所有点都基于角的起始值。您可以在不知道网格的其余部分的情况下计算它们。

我用这种方法生成地形。我需要每个“块”地形的边缘与相邻的块排成一行。使用中点位移算法的变化,我做了它,使得沿着块的边缘的每个点的高度仅基于两个角处的值来计算。如果我需要添加随机性,我使用来自两个角的数据播种随机数生成器。这样,任何两个相邻的块都可以独立生成,边缘肯定会匹配。

您可以使用高度图的方法来处理其他事情。数据可以确定植被类型,人口密度等,而不是高度。除了山丘和山谷匹配的高度地图块之外,您还可以拥有森林匹配的植被地图。

任何复杂的世界都需要一些创造性的编程。