種子(世界生成)

出自Minecraft Wiki
跳到: 導覽搜尋

種子(Seed)是一個由一個或多個字元(包括正整數和負整數)組成的一個值,遊戲根據這個值建立每一個Minecraft世界。[1]

相容性[編輯 | 編輯原始碼]

種子在不同平台上相容,而同一平台上的不同版本之間可能相容。不過在村莊與掠奪更新後,村莊和其他一些結構的生成有所變化。

Java版的種子在Alpha v1.2.0Beta 1.7.3期間基本一致。Beta 1.8版本完全變更了世界生成;1.2因為加入了叢林而變更了陸地上生態域的分佈;1.7.2再次重寫了世界生成;1.13變更了洞穴的生成,加入了新的水域生態域,以及調整了變種生態域和部分結構的位置;1.14加入了竹林生態域,同時變更了村莊和其他一些結構的位置。上面未提及每次更新加入的新結構,但它們通常不會伴隨整個世界生成的大變更。

基岩版中,Alpha 0.9.0是目前為止唯一一次徹底變更世界生成的更新。水域更新變更了海洋,村莊和掠奪變更了村莊等結構。

原主機版的種子更新大致和Java版的更新周期一致。

某些特定種子在Java版和基岩版中有着相似的生態域分佈,但地形有所不同,結構生成也不一致。

世界生成[編輯 | 編輯原始碼]

當遊戲準備生成一個世界時,遊戲會調用一個算法,生成一個偽隨機數,這個數決定了世界的樣子。但由於偽隨機算法的性質,若算法初始輸入的數值(種子)是相同的話,算出的最終結果是相同的。這就是種子的意義:使用相同的種子可以生成出多個相同的世界。

當世界生成算法更新(通常是加入新的生態域)後,相同的種子就不會生成相同的地形。這也是某些不同的遊戲版本中,相同的種子無法產生相同的地形的原因。

一個世界生成後,其種子便已經確定。預設情況下遊戲會自動選擇種子(使用系統時間)。但玩家也可以手動設定。使用相同的種子可以重複玩相同的世界,種子也可以用於與其他玩家分享世界。種子的設定可以用數字(包括負數)、字元等,非純數字種子會被自動轉換成純數字。

如果將舊版本的世界導入到新版本中,則新生成的區塊會基於新的種子,因此並不一定會與舊區塊吻合(這個現象在Java版Beta 1.81.7.2中非常常見)。被刪除的區塊會重新生成,但只要種子或生成算法其中一個有所不同,區塊就會不同。

必須注意的是種子其實只是輸入到偽隨機算法中的值,而不是世界真正的名字。根據某個種子生成的世界的特徵並不註定與種子的字面含義有關。例如,即使是使用一個生態域的名稱作為種子,生成的世界也並不會以此作為主要的生態域。

查看種子[編輯 | 編輯原始碼]

想要確定一個世界的種子,在Java版中,玩家需要執行指令/seed

基岩版中,種子可於世界選項介面中查看。也有一個種子選擇器,為玩家提供預設的種子,以在出生點附近生成具有特定特徵的地形。此外,beta版中,畫面頂端會顯示這個世界特定的種子。

技術細節[編輯 | 編輯原始碼]

Java版[編輯 | 編輯原始碼]

如果種子包含非數字字元或長度大於等於20,那麼Java中的String.hashCode()函數會用來將其轉換為數字。由於輸出的數據類型為int,此函數將Minecraft能生成的種子數量限制為232(4,294,967,296)。為了達到完整的可能的世界數量(264,即18,446,744,073,709,551,616),必須輸入純數字種子或使用預設的種子碼。由於Java的Random類只使用種子中的48位,只有248個種子是有意義的;所有模248同餘的種子相互等價。

基岩版[編輯 | 編輯原始碼]

基岩版中的種子,無論是使用數字還是字串,都有總共232(4,294,967,296)種可能的世界。這個結論對於64位版本的Windows 10版同樣成立。這是由於基岩版使用了32位的梅森旋轉算法,只接受32位的種子。

版本間重疊[編輯 | 編輯原始碼]

0至231(2,147,483,648)間的種子在Java版和基岩版會產生相同的生態域分佈,但地形、結構和結構位置、洞穴、礦石分佈和生物生成等並不相同。

種子0[編輯 | 編輯原始碼]

Java版中,遊戲不接受0作為種子,因為遊戲會將其作為字元解釋,然後取其ASCII值48。不過,透過輸入使String.hashCode()函數返回0的字串,仍然可以得到「種子0」。這樣的單詞字串有creashaks organzine、 pollinating sandboxes、 little jungle、 small skeleton 和 drumwood boulderhead,等等。[2]實際上,任何散列值為0的字串都可行,例如ddnqavbj 和 166lr735ka3q6。對於數字種子,任何和0關於模248同餘的種子(例如281474976710656)也會生成和種子0相同的地形,不過/seed不會顯示為0。

基岩版中,遊戲不接受-9至9的種子。[3]不過,上述Java版的字串方法同樣有效。例如,要得到種子2,只需要將small skeleton的最後一個字元取為其ASCII值比n大2的字元,即p,於是可行的字串是small skeletop。最短的可用字串是ddnqavb後跟一個從as的字元。

怪異生成[編輯 | 編輯原始碼]

使用某些特定的種子可以觀察到許多奇特的生成。

變更地形而不變更結構[編輯 | 編輯原始碼]

種子只有一部分會用於生成世界內的特定結構。因此,透過將種子轉換為二進制序列然後變更特定位,可以做到多個世界有着相同的洞穴系統、地獄生態域和其他一些結構的分佈。[4]

影子種子[編輯 | 編輯原始碼]

將一個種子加上-7379792620528906219後得到的種子會有着和原種子完全相同的生態域分佈,但地形並不一致。

重複[編輯 | 編輯原始碼]

164311266871034旁觀者模式下的地下,可見洞穴沿Z軸重複生成。

某些種子會在遊戲內部中返回0,[5]引起洞穴和其他結構的無限生成。[6]Java版中,107038380838084種子會在第一次被調用時返回0,而164311266871034會在第二次被調用時返回0,導致洞穴、廢棄礦坑和水下峽谷等結構分別在X和Z軸上重複生成。[7]由於未知原因,水下洞穴和常規峽谷的生成加入了,自Java版1.13後它們不在這個種子中受到影響。不過,如果上述兩個種子減去1,那麼水下洞穴和常規峽谷將會重複生成,但其他結構則不再重複。已有理論分析這些種子也會影響要塞中不同方塊類型的分佈和惡地中陶土的圖案,但尚無切實證據證實。

其他一些地物也會受到影響,例如裝飾性結構。它們通常沿對角線生成。[8]

基岩版中,種子2898490251669320484會沿對角線重複生成洞穴、峽谷和一些裝飾性地物。[9]

歷史[編輯 | 編輯原始碼]

Clock JE3.gif
此段落需要更新。

段落中某些資訊已經不符合當前版本情況。

Java版Pre-classic
rd-160052加入了一個簡單的世界生成器。
Java版Classic
0.0.12a世界生成器更新。
2009年8月25日展示了再次進行更新的世界生成器。
生成更多的懸崖。
Java版Indev
0.3120091223-2公佈了等軸距級渲染的畫面截圖。
20100106現在可以在生成世界時選擇島嶼、浮空島嶼、平坦或原始作為世界類型。
可以選擇正方形、長形或下深作為世界形狀。
可以選擇小、正常或大作為世界大小。
20100107下深浮空島嶼地圖現在有多層島嶼。
現在可以選擇世界主題,有正常和地獄。
20100111-1現在島嶼生成更多的沙。
20100113海洋現在生成無限的水。
20100122水現在可以自然生成於海平面上和浮空島嶼上。
減少洞穴被水淹沒的可能性。
Java版Beta
1.3允許玩家自訂地圖種子。
1.8.1除錯畫面開始顯示當前世界的種子。
Java版
1.2.1伺服器將不再向客戶端發送種子。
1.3.112w18a由於單人遊戲的實現方式與多人遊戲合併,世界的種子不再顯示在除錯畫面上。
12w21a加入/seed指令,用於顯示當前世界的種子。
1.7.2世界生成算法發生改變,這意味着使用一個舊版本存檔,原先未載入的區塊將生成不同地形。
攜帶版Alpha
0.1.0加入了種子。
0.9.0變更了地形生成,這使得舊種子變得過時了。

你知道嗎[編輯 | 編輯原始碼]

  • 自Java版1.7.2至1.12.2的版本間,透過變更原始碼並將第6個genlayer的值‌[需要更多資訊]從2變更為0,可以在Java版中得到原主機版的生態域生成,除了蘑菇地。

重要的種子[編輯 | 編輯原始碼]

下面這些種子在某些時候曾被官方地圖和資源使用過:

畫廊[編輯 | 編輯原始碼]

外部連結[編輯 | 編輯原始碼]

參考[編輯 | 編輯原始碼]