2012-07-09 83 views
0

我想創造一個無限的二維世界發電機。我以爲我會做一個代表世界某個地區的大班。我只是不知道在哪裏存儲塊,以及如何生成新塊。無限世界發電機

我以爲我可以在向量中存儲塊並記住它們的X,Y。對於玩家來說,我製作了3x3陣列(他站在中間的那個),並用指向塊的指針來組成矢量。例如,當他向上移動時,我將上部和中部的行向下移動,並從矢量中加載新的塊。我不知道這是不是一個好主意,這是我想到的第一件事。

無論如何,我不知道如何生成塊,所以他們相互匹配(沒有沙漠附近的水,aso)。即使生成恆定尺寸的地圖對我來說也很難(我真的需要無限的世界)。

前段時間我用洪水法生成恆維世界,所以我在開始的時候用草填充整個地圖,然後做了水,樹和其他的隨機點,雖然我不認爲這是可用的無限世界案件。

回答

1

這可能不是正確的做法,但可能會給你一些想法。 你可以做的是將一個3x3的二維數組塊或者甚至是一個5x5的塊數組存儲到內存中。根據玩家的位置更新這些塊和哪些塊加載。世界其他地方可以存儲在一個讀取和寫入的文件中。當玩家在未啓動塊或空塊的2-3個塊內移動時,使用任何您想要的方法生成該塊。

這個棘手的部分是如果你有河流或水體,森林或任何其他類型的橫跨多個塊的景觀,你將不得不有一個單獨的算法來處理,當生成新的塊。每次生成時可能需要測量兩行之間的交集。由陸地與水,平原與森林交匯而成的線,以及代表大塊邊緣的線。一旦你有了這一點,你可能可以弄清楚塊上那個點的哪一邊需要土地/水,並從那裏隨機生成它。

這就是我在Minecraft中看到的反正。

+0

的主要問題是,我不能生成跨:(任何算法是如何做到這一點的風景? – 2012-07-09 16:49:02

+1

生成每c景觀然後在生成過程中匹配它們。我不知道有哪些算法可以爲你做。 – 2012-07-09 17:47:52

4

這些問題已在康威生命的實施中得到解決。

討論hashlife算法和數據結構時,描述了實現無界世界並且只處理彼此不同部分的一種方法。它還處理大塊內的高性能和大塊內的良好性能。相同的塊由多個塊可指向的一個描述表示。

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

+0

好的,但我仍然不知道如何存儲和生成塊,這就是我的意思。 – 2012-07-09 16:52:18