亂數種子:同一個種子,同一張地圖

gaming%20setup%20with%20RGB%20keyboard%2C%20gaming...
發表時間:2026 年 10 月 29 日 | 更新日期:2026 年 10 月 29 日 | 編輯:雅寶社區編輯團隊
亂數種子:同一個種子,同一張地圖 - 雅寶社區 · 頂客論壇

1.3 種子的三種常見型態

不同遊戲對種子的處理方式差異很大,大致可以分成三類:

第一類:整數種子。最單純的形式,例如一個 32 位元或 64 位元的整數。《Minecraft 基岩版》的種子本質上是 32 位元整數,《泰拉瑞亞》也是走類似路線。整數種子的好處是明確、好複製,缺點是「種子空間」可能不夠大。

第二類:字串種子。你輸入一串文字,遊戲內部先把這串文字「雜湊」(hash)成一個整數,再拿這個整數當種子。《Minecraft Java 版》就能接受文字種子,這也是為什麼會出現「輸入自己的名字當種子」這種玩法。要注意的是,字串種子的轉換規則會隨版本改變,這也是為什麼跨版本的同一個種子,地圖可能完全不同。

第三類:複合種子。世界種子只是「母種子」,遊戲會用母種子再派生出一堆「子種子」,分別負責地形、礦物、結構、生物生成。這種設計讓開發者可以獨立調整某一層的生成邏輯,不會牽一髮動全身。

二、為什麼同一個種子,一定會生成同一張地圖?

2.1 確定性演算法的骨幹

我們用最簡單的線性同餘生成器(Linear Congruential Generator,LCG)來示範這件事。它的公式是:

next_state = (a * state + c) mod m

其中 a、c、m 是固定的常數,state 就是當前的「種子狀態」。

假設 a = 1664525、c = 1013904223、m = 2^32。你給它種子 12345,它就吐出某個數字;你把同樣的 12345 再丟進去一次,它吐出來的還是同一個數字,下一個、下下一個也都一樣。原因很簡單:公式裡沒有任何「外部變數」,所以結果必然可重現。

真實遊戲用的 PRNG 當然比 LCG 複雜得多——可能會用梅森旋轉演算法(Mersenne Twister)、PCG、Xoshiro,或遊戲自製的混合演算法。但核心精神完全一樣:演算法固定 + 初始狀態固定 = 輸出序列固定。

2.2 從種子到地圖:地形生成的完整流程

知道種子會產生固定的隨機序列之後,下一個問題是:這串數字是怎麼變成「山、河、森林、村莊」的?大致可以拆成以下幾個階段:

步驟一:雜湊與初始化。玩家的輸入(字串或數字)先被轉換成一個內部種子值,用來初始化 PRNG。有些遊戲會先做一次攪拌(scramble),讓相鄰的種子值不會產生過於相似的世界。

步驟二:雜訊函式取樣。這是最關鍵的一步。遊戲會用 Perlin Noise、Simplex Noise 或 OpenSimplex Noise 這類「連貫性雜訊」(coherent noise)函式,在二維或三維網格上取樣,得到一張平滑起伏的數值場。這種雜訊的特性是「相鄰的點數值相近」,所以畫出來會像自然地形的坡度,不會是純白的雜訊點。

步驟三:分形疊加(Fractal / FBM)。單層雜訊太單調,所以遊戲會把好幾層不同頻率、不同振幅的雜訊疊在一起:低頻決定大陸與山脈的大輪廓,中頻決定丘陵與河谷,高頻負責石頭、草地這類細節。這就是所謂的「碎形布朗運動」(Fractal Brownian Motion)。

height(x, y) =

0 * noise(x / 256, y / 256) // 大陸尺度

+ 0.5 * noise(x / 64, y / 64) // 丘陵尺度

+ 0.25 * noise(x / 16, y / 16) // 細節起伏

+ 0.125 * noise(x / 4, y / 4) // 碎石紋理

步驟四:生物群系判定。得到高度場之後,再加進溫度、濕度、奇異度(weirdness)等第二層雜訊,交叉比對後決定每個座標屬於哪個生物群系。這一步決定了你會不會出生在沙漠、雪原還是蘑菇島。

步驟五:結構與裝飾物放置。要塞、村莊、遺跡、地牢這些「結構」,通常使用獨立的隨機流。開發者的做法是:拿世界種子,加上一個固定的「鹽」(salt,例如字串 “village” 或某個常數),再雜湊成結構專用的子種子。這樣做的好處是:結構的分布可以獨立控制,而且只要你改動地形生成邏輯,結構的位置依然可以保持相對穩定。

步驟六:區塊載入時的即時生成。很多遊戲不是「一次生成整張地圖」,而是「玩家走到哪、生成到哪」。每個區塊(chunk)會用「世界種子 + 區塊座標」去算出該區塊專屬的子種子。這種設計稱為「可重入生成」(re-entrant generation):你離開再回來,區塊被重新載入時,還是會算出完全一樣的內容。

把這六步串起來,你就會明白:地圖其實是「種子經過一連串確定性運算」的結果。種子變了,結果才會變;種子不變,哪怕你重開一百次,那棵樹還是長在原來的位子上。

2.3 為什麼「同一個種子」有時還是會不一樣?

這裡要補一個很重要的例外。很多玩家會抱怨「我明明用了朋友的種子,為什麼地圖長得不一樣?」常見原因有四個:

  • 遊戲版本不同。地形生成邏輯只要改一行,整張圖就可能天翻地覆。《Minecraft》1.18 的「洞穴與山崖」改版就是經典案例:同一個種子,1.17 和 1.18 生成的世界幾乎沒有關聯。
  • 平台或版本分支不同。Java 版與基岩版的生成演算法本來就不同,種子通常不通用(少數巧合下會相似,但不要當成通則)。
  • 遊戲設定不同。世界類型(預設、超平坦、放大化、單一生物群系)、是否開啟結構生成、是否安裝模組,都會影響結果。
  • 雜湊轉換規則不同。字串種子在不同版本可能被雜湊成不同的整數,導致「看起來一樣的種子」其實內部數值不同。
  • 所以,種子分享的第一條鐵律是:種子 + 遊戲版本 + 平台 + 設定,四個要素要一起講清楚。只貼一串數字,等於只講了四分之一。

    三、各大遊戲的種子機制比一比

    3.1 《Minecraft》:種子文化的發源地

    《Minecraft》大概是史上最把「種子」當成社交貨幣的遊戲。從 2010 年代的 Alpha 版開始,玩家就發現輸入同樣的數字會得到同樣的世界,於是論壇上開始出現「種子串」,大家互相分享「出生點旁有村莊」、「五分鐘內找到要塞」的神圖。

    Java 版的種子空間是 64 位元有號整數,範圍大約是負九兆到正九兆。這個數字有多大?大約是 1.8 × 10¹⁹ 種可能。理論上,你隨便輸入一個數字,幾乎可以保證它是「世界首見」的——因為全世界玩家測試過的種子數量,遠遠比不上這個空間的總量。

    但要注意幾件事:

  • 1.18 之後地形生成大改。以前很紅的「神種子」在 1.18+ 幾乎全部失效。找種子時一定要看對方標註的版本。
  • 結構位置依賴「鹽」。要塞、村莊、遠古城市等結構,都是用世界種子加鹽派生出來的子種子決定位置。這也是為什麼有人可以開發出「種子地圖網站」,讓你輸入種子後直接畫出附近所有結構的座標。
  • 基岩版種子空間小很多。32 位元的整數種子,全世界只有約 42 億種可能,加上生成演算法的一些特性,會出現「不同種子生成高度相似世界」的現象。
  • 地圖種子(Seed Map)工具。社群開發的線上工具可以模擬生成結果,讓你不用真的開遊戲就能先看方圓幾千格內有什麼。這對「找圖」來說是革命性的便利。
  • 3.2 《泰拉瑞亞》:世界種子與秘密種子

    《泰拉瑞亞》同樣支援世界種子,而且它的種子系統有一個很有趣的進化:除了普通的數字種子之外,官方還加入了「秘密種子」(Secret Seeds)機制。某些特定的文字種子會觸發特殊的世界規則,例如:

    輸入特定字串可以讓世界變成「飢荒模式」(世界永遠是黑暗的、食物會腐敗)。

    某些種子會讓世界充滿陷阱、或讓所有敵人都變成爆炸兔。

    還有一些種子純粹是彩蛋性質,會改變背景音樂或 NPC 的對話。

    這種設計把種子從「地圖座標」升級成「遊戲規則開關」,是相當聰明的做法。玩家分享的不再只是「這張圖很好挖礦」,而是「這張圖的體驗完全不同」。

    3.3 《飢荒》與《飢荒聯機版》:地圖種子與世界自訂

    《飢荒》的世界生成同樣依賴種子,而且它的生成邏輯更偏向「規則驅動」:遊戲會先決定這張圖要包含哪些生態環境(豬人村、沼澤、沙漠、月島……),再根據權重把它們塞進地圖。種子決定的是「生態環境的排列組合」與「資源點的具體位置」。

    聯機版還加入了「世界自訂」(World Customization)功能,讓玩家可以調整資源密度、怪物強度。這意味著同一個種子在不同設定下,地圖依然會不一樣——再次印證了「種子只是四要素之一」。

    3.4 Roguelike 類:《以撒的結合》與《殺戮尖塔》

    這一類遊戲的種子概念跟沙盒遊戲不太一樣。Roguelike 的「地圖」通常是「一層一層的房間組合」,種子決定的是房間順序、道具掉落、敵人配置。

    《以撒的結合》有很成熟的種子分享機制:你可以直接輸入一串英數字,重現某一次遊玩的完整流程。對速通玩家來說,這代表「同一條路線可以被無數人反覆研究」。每日挑戰更是強制使用當天日期作為種子,讓全世界玩家在同一天面對完全相同的關卡。

    《殺戮尖塔》也支援種子系統,玩家可以分享「這局有神卡」的種子,讓朋友體驗同樣的開局。這類遊戲的種子樂趣在於:沙盒遊戲的種子決定「你在哪裡」,Roguelike 的種子決定「你會遇到什麼」。

    3.5 其他值得一提的例子

    《Factorio》:地圖生成器提供種子欄位,並且可以調整礦物頻率、水體大小、敵人生成等參數。玩家常分享「礦區超密集」的種子。

    《No Man's Sky》:整個宇宙都是程序化生成,每顆星球都有對應的種子座標。玩家可以透過「傳送門座標」分享星球。

    《瓦爾海姆》(Valheim):世界種子決定大陸分布,玩家會挑「出生點附近就有商人」的種子。

    《薩爾達傳說:王國之淚》/《曠野之息》:雖然不能自訂種子,但遊戲內部的隨機狀態(例如刷武器、刷人馬)可以透過存讀檔或特定操作重現,這也算是種子概念的變體。

    四、玩家實戰:種子的搜尋、驗證與應用

    4.1 怎麼找到「好種子」?

    找種子這件事,早期靠的是「土法煉鋼」:開新世界、記下種子、跑圖、貼上論壇。現在則有幾種更有效率的方法:

    方法一:社群分享。論壇、Discord、Reddit 的種子版,每天都有人在貼「出生點神圖」。關鍵是要看清楚對方的版本號、平台、以及他想強調的賣點(村莊?要塞?終界城?)。

    方法二:種子地圖工具。輸入種子後,工具會模擬地形生成,直接在地圖上標示結構位置。這讓你可以在不開遊戲的情況下,先確認「這張圖到底有沒有料」。

    方法三:自己寫程式掃描。進階玩家會用社群提供的 API 或開源函式庫,寫腳本批次掃描大量種子,設定條件(例如「出生點 200 格內要有村莊,且 1000 格內要有要塞」),讓電腦幫你篩。這個做法在《Minecraft》社群裡很常見,尤其是速通玩家。

    方法四:觀察種子數字的規律。有些玩家發現,特定形式的種子(例如很小的數字、重複數字、或是特定尾數)比較容易生成有趣的結構。這多半是統計上的錯覺,但有時候確實能撈到寶。

    4.2 拿到種子之後,怎麼驗證?

    驗證種子的流程其實很簡單,但魔鬼藏在細節裡:

  • 確認版本號。先問清楚對方用的是哪一個版本。如果是 Java 版,版本號要精確到小版本(例如 1.20.4 與 1.20.1 雖然接近,但生成結果可能有差異)。
  • 確認平台。Java 版與基岩版的種子通常不通用。手機版、主機版也要分別確認。
  • 確認世界設定。是不是超平坦?有沒有開結構生成?有沒有裝模組(尤其是地形生成類的模組)?
  • 開新世界實測。輸入種子後,先飛到高處看地形輪廓,再對照對方提供的座標。如果出生點就不對,先別急著放棄——有可能是版本問題,換個版本再試。
  • 用種子地圖交叉比對。把種子丟進線上工具,看標示的結構位置是否與對方描述一致。這是最快的驗證方式。
  • 4.3 種子在速通(Speedrun)中的應用

    速通玩家對種子的態度很有意思。在「隨機種子」(Random Seed)類別的競速中,玩家不能挑種子,必須當場生成、當場適應,這考驗的是臨場反應與地圖判讀能力。但在「固定種子」(Set Seed)類別中,所有參賽者使用同一個種子,比的就是「誰能把這張圖的路線最佳化到極致」。

    固定種子競速的準備過程通常長這樣:

    選定種子,反覆遊玩數十次,記錄每次的路線與時間。

    用種子地圖工具分析結構位置,規劃最短路徑。

    研究隨機事件(例如怪物生成、掉落物)在這個種子下的分布,判斷哪些環節可以「凹」、哪些必須避開。

    把路線寫成筆記,甚至做成圖文攻略,分享給社群。

    這其實就是把「隨機」轉化成「可研究的對象」。當種子固定,遊戲就從「運氣遊戲」變成「資訊遊戲」——誰掌握更多地圖知識,誰就有優勢。

    五、進階議題:種子與亂數管理的那些坑

    5.1 種子碰撞與「世界重複」

    種子空間再大,也是有限的。32 位元種子只有約 42 億種可能,而全世界玩家開過的世界數量早就超過這個數字。這代表什麼?代表「理論上」會出現不同玩家使用不同種子、卻生成完全相同世界的情況,這叫做種子碰撞(seed collision)。

    64 位元種子的碰撞機率就低得多,幾乎可以忽略。但要注意,碰撞與「相似」是兩回事:有些遊戲因為只使用種子的部分位元,會導致大量種子生成高度相似的世界,這不是嚴格意義上的碰撞,但玩家體驗上差不多。

    另外,PRNG 本身的週期也很重要。如果 PRNG 的週期太短,長時間遊玩後可能會出現「隨機序列重複」的現象——理論上會發生,實務上很少見,但對於需要長時間模擬的遊戲(例如大型沙盒或模擬經營),開發者還是會選用週期夠長的演算法。

    5.2 時間種子的陷阱

    很多遊戲在玩家不指定種子時,會用「當前時間」當種子。這聽起來很合理,但有一個經典陷阱:如果時間精度不夠(例如只用到秒),而玩家又快速連續開新世界,就可能生成兩個完全相同的世界。

    更糟的情況是「可預測性」。如果攻擊者知道你的種子產生規則,理論上可以預測你接下來會生成什麼世界。對單機遊戲來說這無傷大雅,但對多人伺服器或涉及交易的系統,就可能被利用。

    所以成熟的遊戲通常會混合多個熵源:時間 + 記憶體位址 + 系統亂數 + 玩家輸入的雜湊值,再用雜湊函式攪拌一次,確保種子夠「亂」。

    5.3 平行生成與順序依賴

    現代遊戲為了效能,常常把地圖生成拆成多執行緒平行處理。這裡有一個很容易踩的坑:如果多個執行緒共用同一個 PRNG,那麼「誰先要到隨機數」就會影響結果,導致同一個種子在不同硬體、不同執行順序下生成不同地圖。

    解決方案是「每個區塊用獨立的子種子」。也就是說,不要共用一個全域 PRNG,而是用「世界種子 + 區塊座標 + 用途標籤」去雜湊出一個專屬種子,每個區塊、每個用途都有自己的 PRNG 實例。這樣不管執行順序怎麼變,結果都一樣。這正是《Minecraft》等遊戲的做法。

    5.4 種子與存檔的關係

    最後提醒一個實務問題:種子通常只決定「初始生成」,不決定「後續變化」。你在遊戲裡蓋的房子、砍的樹、殺的怪,這些狀態是存在存檔裡的,跟種子無關。所以:

    如果你用同一個種子開新世界,你會得到「原始地貌」,但不會有你朋友存檔裡的建築。

    如果你把別人的存檔連同種子一起拿來,你看到的會是「他玩過的世界」,而不是「種子原始生成的樣子」。

    有些遊戲會把種子寫進存檔的 metadata,方便你日後重現;有些則不會,這時就得自己記下來。

    六、常見問題 FAQ

    Q1:同一個種子,在不同電腦上跑,地圖會一樣嗎?

    只要遊戲版本、平台、設定都相同,而且生成邏輯沒有依賴硬體特性(例如浮點數精度差異),地圖就會一樣。但實務上,跨平台(Java 版 vs 基岩版)通常不一樣。

    Q2:我可以自己「發明」一個神種子嗎?

    可以,但你得先知道「神」的定義。如果你的條件是「出生點旁邊有村莊」,那隨便掃幾百個種子就可能找到;如果你的條件是「五分鐘內能打完終界龍」,那可能要掃幾千萬個種子,需要寫程式輔助。

    Q3:為什麼我輸入文字種子,有時候會顯示「無效種子」?

    有些遊戲只接受數字,有些則會把文字雜湊成數字。如果遊戲不接受你的輸入,通常是因為格式不符,或是版本不支援文字種子。

    Q4:種子可以拿來作弊嗎?

    看你怎麼定義「作弊」。在單機遊戲裡,用種子找資源是官方允許的玩法;但在多人伺服器或競速比賽中,主辦單位可能規定必須使用隨機種子。參賽前請務必看清楚規則。

    Q5:為什麼有些種子地圖網站顯示的結果,跟我實際開遊戲不一樣?

    最常見的原因是版本不符。其次可能是網站使用的模擬程式與遊戲實際演算法有細微差異(尤其是結構生成與裝飾物)。建議把網站結果當作「參考」,實際還是要開遊戲驗證。

    Q6:種子會影響遊戲的難度嗎?

    會,而且影響很大。出生點在資源豐富的地區,前期就輕鬆;出生在孤島或沙漠,可能連木頭都很難找。這也是為什麼速通玩家會特別挑種子。

    七、結語:把「隨機」變成「可理解的秩序」

    回到文章開頭那句話:「同一個種子,同一張地圖。」這句話背後其實藏著一個很迷人的概念:隨機只是一種我們還沒拆解完的秩序。

    當你不知道種子的存在時,地圖是隨機的、是不可預測的、是每次開新世界都要重新適應的。但當你理解了 PRNG、雜訊函式、子種子派生這些機制之後,地圖就變成一本可以被閱讀的書——你可以查目錄(種子地圖工具)、可以對照版本(確認生成規則)、可以重複實驗(固定種子跑同一條路線)。

    對一般玩家來說,種子最實用的價值是「分享」。你可以把一張好圖變成一句話、一串數字,傳給朋友,讓他在十分鐘內體驗你當初的驚喜。對進階玩家來說,種子是「研究素材」:你可以用它來測試遊戲機制、規劃最短路線、甚至反推生成演算法的邏輯。

    下次開新世界時,不妨試著做三件事:第一,把種子記下來;第二,觀察出生點附近的結構;第三,把這串數字跟你的體驗一起分享出去。你會發現,原本孤獨的探索,因為一串數字而變成了可以傳遞的風景。

    畢竟,在這個由演算法構成的世界裡,種子就是我們與他人共享同一片天空的唯一憑證。同一個種子,同一張地圖——而地圖上的每一個座標,都等著被某個人第一次看見。

    🏠 返回首頁