无限世界发电机

时间:2012-07-09 13:22:29

标签: map 2d chunks

我想制作一个无限的二维世界发电机。我以为我会做一个代表世界某个地方的大块课程。我只是不知道存储块的位置,以及如何生成新的块。

我以为我可以在向量中存储块并记住它们的X,Y。对于玩家来说,我制作了3x3阵列(他站在中间位置),并指向了用于形成矢量的块。例如,当他向上移动时,我将上部和中间的行向下移动,并从向量中加载新的块。我不知道这是不是一个好主意,这是我想到的第一件事。

无论如何,我不知道如何生成块,所以它们相互匹配(没有靠近水的沙漠,aso)。即使生成恒定维度图对我来说也很难(我真的需要无限的世界)。

前段时间我用洪水法生成了恒定维度世界,所以我在开始时用草填满了整个地图,然后随机出现了水,树和其他的点,虽然我不认为它可用于无限世界的情况

2 个答案:

答案 0 :(得分:4)

Conway's Life的实施已经解决了这些问题。

在哈希生命算法和数据结构的讨论中描述了实现无界世界并且仅处理彼此不同的部分的一种方式。它还可以处理块内的高性能和跨块的良好性能。相同的块由许多块可指向的一个描述表示。

http://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478

http://en.wikipedia.org/wiki/Hashlife

http://golly.sourceforge.net/

http://tomas.rokicki.com/hlife/

http://www-users.cs.york.ac.uk/~jowen/hashlife.html

答案 1 :(得分:1)

这可能不是正确的方法,但可能会给你一些想法。 您可以做的是将3x3 2D数组块或甚至5x5数组块存储到内存中。更新这些块以及根据玩家的位置加载哪些块。世界其他地方可以存储在一个文件中,该文件可以读取和写入。当玩家在未发起的块或空块的2-3个块内移动时,使用您想要的任何方法生成该块。

这个棘手的部分是如果你有多条河流或水体,森林或任何其他类型的景观跨越多个块,你必须有一个单独的算法来处理生成新的块。每次生成时,可能需要测量两条线之间的交点。由陆地和水,平原和森林的交汇点创建的线,以及代表块的边缘的线。一旦你有了这一点,你可以弄清楚块上那个点的哪一侧需要陆地/水,然后从那里随机生成它。

这就是我在Minecraft中发生的事情。