我想知道Minecraft(1.8.7)中有多少種子,以及它如何占用那麼少的磁盤空間?我認為每種世界類型都有很多種子,對於每種定制組合也要進行計算。我相信他們已經超過了數以億計。你能告訴我種子的數量嗎?
我想知道Minecraft(1.8.7)中有多少種子,以及它如何占用那麼少的磁盤空間?我認為每種世界類型都有很多種子,對於每種定制組合也要進行計算。我相信他們已經超過了數以億計。你能告訴我種子的數量嗎?
有18,446,744,073,709,551,616(2 64 sup>)個可能的種子。所有種子都是數字,如果在種子框中輸入字母,則使用Java的 hashCode()
函數將其轉換為數字。
種子不會佔用太多磁盤空間(存儲為長整數,每個世界僅8個字節),因為僅存儲為世界選擇的種子;並非全部18億五千萬。當需要種子來生成世界時,會從系統時鐘中生成一個隨機種子(或由用戶手動輸入),然後將其存儲並用於生成世界。
可以生成多少個世界。 ,包括自定義選項?給定自定義世界中所有可用的浮動滑塊,可能比任何計算機都能計算的多。
以下是顯示隨機生成的種子的圖像:
-3,010,441,696,458,036,422遠低於-2,147,483,648和-140,737,488,355,328。這意味著種子使用高於32位和48位的有符號整數範圍。
我最初說過,Minecraft使用Java的默認 Random
類來生成偽隨機數。 Random
使用48位種子。
但是,這意味著種子1和2 48 sup> +1結果在同一世界上,其他人指出這是不正確的。因此,我做了更多的挖掘工作。
Minecraft似乎在除之外的所有地方都使用了 Random
作為生物群系生成代碼。在這裡,它使用自己的本地隨機生成器。來自GenLayer.java:
protected int nextInt(int upperBound){int randVal =(int)(((this.chunkSeed >> 24)%(long)upperBound);如果(randVal < 0){randVal + = upperBound; } this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L; this.chunkSeed + = this.worldGenSeed; return randVal;}
這是一個線性同餘生成器,其值 a = 6364136223846793005
和 m = 1442695040888963407
。這確實會產生2 64 sup>個不同的輸出流,因此有2 64 sup>個不同的世界。
Minecraft Wiki中的“由於使用 Random.nextLong()
” ,“多人種子可能只具有2 48 sup>個可能的值[..]不正確。單人遊戲和多人遊戲的世界生成器沒有什麼不同。
在其他其他地方使用 Random
意味著某些事情將會成為關閉2 48 sup>的種子之間也是如此,例如種子1和2 48 sup> +1。例如,兩個之間的礦石位置應該幾乎相同(除了被洞穴系統清除的礦石)。
此外,使用每塊種子有一些有趣的後果。例如,假設生物群係數量少且組塊數量大,那麼在任何給定的世界中,都有兩個完全相同的組塊的可能性非常高。但是,找到這些塊涉及數學,這超出了我的範圍。如果有人有興趣解決這個問題,初始化 chunkSeed
的代碼是
public void initChunkSeed(long chunkX,long chunkY){this.chunkSeed = this。worldGenSeed;for(int i = 0; i < 2; i ++){this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L;this.chunkSeed + = chunkX;this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L;this.chunkSeed + = chunkY;}}
所以答案在這裡找到: http://minecraft.gamepedia.com/Seed_(level_generation)
即使已在此頁面上鍊接,似乎也沒有人要閱讀全部內容。
總結:
如果您使用單詞或短語,則使用 String.hashCode()
會被調用,並且由於其實現,它將您的最大種子數量限制為2 ^ 32。
如果輸入您自己的號碼或讓系統確定種子,則您的種子限制為2 ^ 64種子。
但是:
如果這是一個多人遊戲世界,他們會實現 nextLong()
java函數,其局限性是2 ^ 48種可能的種子選項。
種子被哈希為32位有符號整數。程序員所說的數字可以是正數或負數,以32為底數2。
這給出了從-2,147,483,648到2,147,483,647的數字。
取決於實現Minecraft中的某些可能會在某些方面導致相同的世界,例如擁有2個具有不同生物群落但高度圖相同的種子。
(部分)更正:如果不設置文本,則Minecraft將代替以當前時間作為值,它是一個64位數字,因此那裡有更多選擇。
種子的數量不受應用程序本身的限制。僅根據種子本身允許值的長度。
種子將不會存儲到Minecraft中。種子本身就是某種“起始值”,世界一代開始它的生成過程。遊戲本身內的每個世界都沒有種子。由於開始條件相同,您將只能獲得與生成過程將運行的世界相同的世界。
您可以通過計算從回家到工作的步驟進行比較。如果每天都適用相同的條件,則將使用相同的方法。如果有一天下雪,或者如果您下一天稍晚起床,則開始條件會有所不同,您需要採取另一種方式或時間進行工作。但是,如果相同的條件在另一天適用,它將以相同的方式結束。只是為了澄清非技術人員的示例。:-)
計算機不會真正生成隨機數。提取隨機數時,它只是為您提供了看似隨機數序列中的下一個數字(它們之間沒有任何模式或相互連接)。
種子是真正使該數字列表隨機化的種子,在大多數情況下,當前系統時間將用作種子。您可以將種子視為重複獲取相同隨機結果的一種方法。
生成Minecraft世界的方法是通過反复獲取隨機數(例如何時增加表面高度等)的算法。p>
使用種子,這些隨機數每次都會相同,這導致使用相同種子時世界相同。
也就是說,種子不會佔用磁盤空間,因為它們是只是一種看似隨機數列表的加擾/隨機化方式。