題:
我的世界有多少世界種子?
John
2015-07-14 14:25:59 UTC
view on stackexchange narkive permalink

我想知道Minecraft(1.8.7)中有多少種子,以及它如何占用那麼少的磁盤空間?我認為每種世界類型都有很多種子,對於每種定制組合也要進行計算。我相信他們已經超過了數以億計。你能告訴我種子的數量嗎?

我只是問種子的數量。例如,如果某人使用每種種子和每種自定義的可能性來演奏每種世界類型(例如:滑塊向另一個方向移動1,我確定某人不會真的這樣做)。該人將演奏多少種子?@Ionic
@5pike您輸入的字符實際上是不相關的。整個文本將散列為一個值。
Minecraft不會存儲所有可能的世界。世界是隨機生成的,並且種子用於影響隨機數生成器(以可預測的方式,因此,如果使用相同的種子,它將生成相同的“隨機”數)
您似乎有一個誤解,那就是種子就像是一些老式遊戲中的關卡密碼,而事實並非如此。相反,每顆種子只是代表了根據需要逐個生成整個世界的起點。因此,沒有“特殊”,“隱藏”種子-使用自定義種子(除了娛樂價值)的要點是,您可以與朋友在同一張地圖上進行遊戲-雙方都同意在擁有像“ HumblePhoenix”的種子,你們兩個都有相同的起始地形,資源等。
您可能想了解[偽隨機數生成器](https://en.wikipedia.org/wiki/Pseudo_random_number_generator)。
我知道什麼是種子。我使用它重新啟動了許多世界。@Luaan
七 答案:
SirBenet
2015-07-14 15:05:31 UTC
view on stackexchange narkive permalink

有18,446,744,073,709,551,616(2 64 sup>)個可能的種子。所有種子都是數字,如果在種子框中輸入字母,則使用Java的 hashCode()函數將其轉換為數字。

種子不會佔用太多磁盤空間(存儲為長整數,每個世界僅8個字節),因為僅存儲為世界選擇的種子;並非全部18億五千萬。當需要種子來生成世界時,會從系統時鐘中生成一個隨機種子(或由用戶手動輸入),然後將其存儲並用於生成世界。

可以生成多少個世界。 ,包括自定義選項?給定自定義世界中所有可用的浮動滑塊,可能比任何計算機都能計算的多。


以下是顯示隨機生成的種子的圖像:

enter image description here

-3,010,441,696,458,036,422遠低於-2,147,483,648和-140,737,488,355,328。這意味著種子使用高於32位和48位的有符號整數範圍。

您所做的編輯不會對您的答案添加任何有用的信息。請還原它,並將其添加為對您認為不正確的答案的評論。
-1
@ratchetfreak圖像中顯示的種子是隨機生成的,並且超出48位數字的範圍。
@colorfusion,那麼自從我上次檢查以來,他們一定已經更改了RNG
您是否知道實際上世界上有多少種可能性?程序生成實際上是具有64位的熵,還是更接近32位?
-1
@Lilienthal另一個答案是編輯時已接受的答案,因此我覺得有必要通知OP他們接受的答案是錯誤的,以及為什麼它是錯誤的。我並不是要被動地進取,只是要確保人們掌握正確的信息。如果我的答案不正確,那麼我很樂意有人用正確的答案寫另一個答案,並提到為什麼我的答案不正確。
您說顯示的數字“遠低於Kevin van der Velden聲稱的最小值-2,147,483,648,”但您也說“使用Java的hashCode()函數將其轉換為數字”。意思是這是`-140449792`的另一種表達方式,它不少於`-2147483648`。哪個是對的?
@JonHanna我相信'hashCode()`僅在輸入的種子帶有字母的情況下使用。如果您在種子框中輸入“ 1”,則級別種子僅為1。-140449792與-3010441696458036422創建的世界不同。
僅當輸入的種子中包含字母時,才使用@JonHanna`hashCode()`。-3010441696458036422上將不會使用它。
BlueRaja - Danny Pflughoeft
2015-07-14 20:55:54 UTC
view on stackexchange narkive permalink

我最初說過,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;}}  
@Texenox:否。如果輸入值是非數字_(因為種子必須為數字)_,則必須對輸入值進行哈希處理,但是如果對數字輸入也進行了哈希處理,則由於哈希值是單程。因此,整個散列討論都是重頭戲。
我接受的答案(和原始問題)僅涉及可能的種子,而不涉及可能的世界。我們的兩個答案都可能是正確的。如果您的答案是正確的,那麼用281474976710657和1之類的種子生成的世界豈不相同嗎?我可能會誤會這一點。
不過,可以使用64位種子的其他位來初始化每個塊的RNG或其他一些參數。Minecraft使用基於坐標的程序地形生成算法(因此生成的世界與您首先行駛的方式無關),而不是基於單個隨機序列運行一次的單個算法。
除了`Random.nextLong()`使用該48位種子的兩次迭代。它基本上執行兩次“ Random.nextInt()”,並將它們一起推入64位數字。因此,完全有可能從“隨機”對像中獲得64位種子。
@corsiKa:您將64位輸出與64位種子混淆了。PRNG在重複自身之前將生成數十億個位,因此從某種意義上說,輸出為“十億位”,遠遠超過64位。但是輸入(種子)仍為48位;因此,“種子”仍為48位。這些48位完全決定了輸出內容。
@BlueRaja-DannyPflughoeft因此,如果我理解正確的話,具有48個尾隨位的種子是否應該產生相同的世界?因此,諸如281474976710657和1之類的種子應該產生完全相同的世界嗎?
@BlueRaja-DannyPflughoeft我不會混淆任何東西。僅僅因為只有2 ^ 48種方法來啟動隨機對象並不意味著只有2 ^ 48種方法來使用隨機對象。很有可能不是出於確定種子的唯一目的而創建Random對象的,即使推斷出您從該語句中所講的內容仍然很費力。您的證據根本不成立。
@colorfusion:您的回答正確;參見編輯。
Ryan
2015-07-15 01:56:27 UTC
view on stackexchange narkive permalink

所以答案在這裡找到: http://minecraft.gamepedia.com/Seed_(level_generation)

即使已在此頁面上鍊接,似乎也沒有人要閱讀全部內容。

總結:

如果您使用單詞或短語,則使用 String.hashCode()會被調用,並且由於其實現,它將您的最大種子數量限制為2 ^ 32。

如果輸入您自己的號碼讓系統確定種子,則您的種子限制為2 ^ 64種子。

但是:

如果這是一個多人遊戲世界,他們會實現 nextLong() java函數,其局限性是2 ^ 48種可能的種子選項。

最後一句話沒有道理。您正在將多個問題混為一談((新`Random(seed)`的種子只有48位,與“重載`nextLong()`無關)_
它是String#hashCode()而不是Java.hashCode()。沒有帶有靜態方法“ hashCode”的“ Java”類。(是的,您可以用點代替英鎊,但是我喜歡做書呆子)
@BlueRaja-DannyPflughoeft我並沒有混淆任何東西,我只是在重複** DEVELOPER **在他們自己的Wiki頁面上所說的內容。而且我從沒說過有關“重載”`nextLong()`。因此,盡可能多地爭論,這並不會改變開發人員所說的。至於Java.hashCode,我在嘗試總結而不是複制粘貼時只是打錯了。開發人員確實將其列為“ String.hashCode()”。我的錯。
開發人員不維護該Wiki頁面,隨機用戶則維護。它不是此頁面的官方信息來源。
Elva
2015-07-14 14:59:52 UTC
view on stackexchange narkive permalink

種子被哈希為32位有符號整數。程序員所說的數字可以是正數或負數,以32為底數2。

這給出了從-2,147,483,648到2,147,483,647的數字。

取決於實現Minecraft中的某些可能會在某些方面導致相同的世界,例如擁有2個具有不同生物群落但高度圖相同的種子。

(部分)更正:如果不設置文本,則Minecraft將代替以當前時間作為值,它是一個64位數字,因此那裡有更多選擇。

來源: http://minecraft.gamepedia.com/Seed_(level_generation)

如果Minecraft用當前時間替換字符串種子,為什麼我總是得到種子“ SEED”的同一個世界?
是否有特定的邏輯禁止輸入長度超過32位的數字?您是說遊戲可以處理64位的時間值,但是只能手動輸入32位的數字,對嗎?
@OrcJMR不會將字符串種子替換為當前時間,如果您未進行設置,它將使用當前時間。這就是為什麼您不能通過文本字段插入64位值的原因。它將文本(通過一種方式哈希)轉換為32位數字。如果要指定任意數字,則可以編輯地圖文件並刪除生成的塊,然後啟動我想的遊戲。
@KevinvanderVelden如果輸入的字符串是數字,則將其解析為long並用作種子,如果不是,則使用String.hashCode。
哦,我的意思是,在該時間問題上閱讀失敗。但是我已經開始遊戲並經過測試:http://i.imgur.com/x0fMiR3.png絕對可以輸入64位整數,例如超過90億的整數。
哦,我不知道。這就是@ratchetfreak所說的
Ionic
2015-07-14 14:37:26 UTC
view on stackexchange narkive permalink

種子的數量不受應用程序本身的限制。僅根據種子本身允許值的長度。

種子將不會存儲到Minecraft中。種子本身就是某種“起始值”,世界一代開始它的生成過程。遊戲本身內的每個世界都沒有種子。由於開始條件相同,您將只能獲得與生成過程將運行的世界相同的世界。

您可以通過計算從回家到工作的步驟進行比較。如果每天都適用相同的條件,則將使用相同的方法。如果有一天下雪,或者如果您下一天稍晚起床,則開始條件會有所不同,您需要採取另一種方式或時間進行工作。但是,如果相同的條件在另一天適用,它將以相同的方式結束。只是為了澄清非技術人員的示例。:-)

Jayden Miller
2015-07-15 08:32:19 UTC
view on stackexchange narkive permalink

計算機不會真正生成隨機數。提取隨機數時,它只是為您提供了看似隨機數序列中的下一個數字(它們之間沒有任何模式或相互連接)。

種子是真正使該數字列表隨機化的種子,在大多數情況下,當前系統時間將用作種子。您可以將種子視為重複獲取相同隨機結果的一種方法。
生成Minecraft世界的方法是通過反复獲取隨機數(例如何時增加表面高度等)的算法。p>

使用種子,這些隨機數每次都會相同,這導致使用相同種子時世界相同。
也就是說,種子不會佔用磁盤空間,因為它們是只是一種看似隨機數列表的加擾/隨機化方式。

好吧,它實際上是根據您設置計算機的時間來選擇種子之一。
更重要的是,這沒有回答所提出的問題。
MyTreeko78255
2016-09-02 19:23:38 UTC
view on stackexchange narkive permalink

1.2413916e + 61

顯然這 這是一個很大的數字,但48倍!就是答案

如果您解釋這些數字是從哪裡來的,那麼答案會好得多-什麼是48!應該代表?到目前為止,看來這是完全錯誤的。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...