這次出現的魔王會是誰?從Roguelike遊戲看「機率」

這次出現的魔王會是誰?從Roguelike遊戲看「機率」

我們想讓你知道的是

機率1/3,不代表每3次會出現一次!

文:高竹嵐(陽明交通大學統計學研究所助理教授)

近年來,Roguelike類型遊戲含其變體Roguelike-like和Rogue-lite大行其道。從遊戲的開山祖師《Rogue》到聲名大噪的《暗黑破壞神》(Diablo),再到近代的遺跡遊戲《Spelunky》、間諜遊戲《隱形公司》(InvisibleInc.)、極度抑鬱的《暗黑地牢》(DarkestDungeon)乃至於卡牌遊戲《殺戮尖塔》(SlaytheSpire),一直到去(2020)年火紅的《黑帝斯》(Hades),這些無疑地已經是遊戲市場中一種主流的遊戲類別。

而Roguelike遊戲一般有以下兩大特點:

  1. 永久死亡機制:如果玩家在遊戲中死亡,就必須從頭開始玩一整輪遊戲。
  2. 隨機生成地圖:每一輪遊戲的地圖、道具、敵人等都是隨機生成的。

這樣的特性,導致玩家在每一輪遊戲都會面對全新的狀況,迫使他們無法死背某些既定的套路,必須充分掌握整個遊戲的基本原理,才能夠順利通關。

如上所述,「隨機生成」是Roguelike遊戲的一大要素,因此本文便來討論一下機率與這類遊戲之間的關係。

620_P40
Photo Credit: 科學月刊
《Rogue》是Roguelike 類型遊戲的開山祖師,圖為《Rogue》遊戲中的隨機生成地圖。(Artoftransformation, public domain, Wkipedia Commons)

什麼是獨立事件?

讓我們先討論相對比較簡單的獨立事件。為了簡單起見,我們以《殺戮尖塔》為例。《殺戮尖塔》遊戲總共分為3大關,每一大關都會有一個最終大魔王,而這些魔王會從3個候選魔王中隨機選擇,例如第一關有「大史萊姆」、「守護者」、「六角鬼」3個候選魔王。以下就假設程式是平均地從3個魔王中選一個出來,這樣在每一輪遊戲裡,第一關3個候選魔王出現的機率都是1∕3。

雖然說這3個都是第一關的最終大魔王,但其實他們的強度還是有一點差距,「大史萊姆」會比其他兩隻稍微弱一些。照此邏輯來看,我是不是可以瘋狂重啟遊戲,想辦法刷出「大史萊姆」,讓遊戲的難度變低呢?

舉例來說,假設我第一次開遊戲時出現「守護者」,第二次遊戲則出現「六角鬼」,我能不能立刻重開遊戲,因為第三次就會出現「大史萊姆」?

等等,不對!這是一個很嚴重的誤解!

機率1/3,不代表每3次會出現一次!
機率1/3,不代表每3次會出現一次!
機率1/3,不代表每3次會出現一次!

因為這個概念真的太重要也太常被誤解了,請容我講3遍。

就讓我們實際來算算「大史萊姆在3次遊戲裡恰好出現一次」的機率是多少吧。如果是第一次遊戲時出現大史萊姆,後面兩次不是,那麼這件事情的機率是:第一次是大史萊姆×第二次不是大史萊姆×第三次不是大史萊姆=1/3×2/3×2/3=4/27

同理可證,只有第二次遊戲出現大史萊姆的機率,跟只有第三次遊戲出現大史萊姆的機率,一樣都是4/27。再把3個機率相加,就能得到「大史萊姆在三次遊戲裡恰出現一次」的機率=4/27+4/27+4/27=12/27。

這個機率顯然不是1!也就是說,機率為1/3,並不保證「每三次會出現一次」。如果這還不能說服你,那或許你可以這樣想:既然每一次重新開始遊戲,我們都假設遊戲會重新從3個候選魔王中選一個出來,而且這個選擇是獨立於過去歷史的,那前面遊戲出現的是哪一隻魔王、總共出現了多少次,都應該和我這次的選擇機率,完全沒有關係啊!

因此結論就是,不論前面已經出現多少次「守護者」或「六角鬼」,只要你按下了重啟遊戲的按鈕,這次新遊戲出現「大史萊姆」的機率,就仍然是1/3。

什麼是條件機率?

前面說的都是所謂的「獨立事件」,也就是說每一次隨機生成時,會生出什麼都跟其他事件沒有關係。例如玩遊戲時不會因為之前出現過「守護者」,這次出現「大史萊姆」的機率就會有所改變。

但並不是所有的「隨機生成」都可以用獨立機率來進行,我們以之前提到的《Spelunky》來說明。這是一款遺跡探索的2D平台遊戲,玩家在遊戲中會從一個隨機生成的地圖上方入口出現,他必須想辦法在各種平台、障礙、陷阱、敵人之中,安全抵達地圖下方的出口。

你可能會產生這樣的想法:「那我就所有牆壁、平台、障礙、陷阱,全部都隨機生成不就好了嗎?」舉例來說,我可以把地圖切成很多區塊,並且在每一個區塊內,都隨機決定那邊的物件是什麼?這樣不行嗎?老實說,還真的不行。因為,你要怎麼保證所有物件都隨機決定而產生出來的地圖,存在著一條可以從上方走到下方的路?搞不好所有的路都被各種物件堵死了啊!

你也可以這樣想像:就算只是要生成一個很簡單的「迷宮」,如果牆壁隨便生,就很有可能生出一個根本走不出去的迷宮!

所以《Spelunky》用以下方式解決這個問題:

1.首先,把每一張地圖切成4×4,以下稱為「區塊」。

P42-1
Photo Credit: 科學月刊

2.接著,著,準備一大堆跟「區塊」一樣大的地圖樣板,包含以下幾種:

  • A類:只能通到左邊或右邊。
  • B類:只能通到左邊、右邊、下面。
  • C類:只能通到左邊、右邊、上面。

3.程式接下來會想辦法生出一條「保證可以抵達出口的道路」。首先,從最上面的那條橫排中,隨機選擇一個區塊設置入口。

P42-2
Photo Credit: 科學月刊

4.然後再從入口開始,隨機生一條能抵達最下層的通道與對應的出口。

P42-3
Photo Credit: 科學月刊

5.接著在上圖中黃色的地方,都從A、B、C三種樣板裡選出可以完成該方向移動的樣板。例如,如果有一個區塊要通往其正下方的另一個區塊,那麼位於上方的區塊就必須要有往下的路,所以必須是B類樣板;而下方的區塊則需要和上方相通,因此只能是C類樣板。以上方的圖為例,每一格黃色要抽出的對應類型樣板如下:

P42-4
Photo Credit: 科學月刊

透過以上方式,就保證了我們一定可以生出一張「存在從入口到出口路徑」的隨機地圖。這邊我們省略了一些技術性的細節,例如在第4步驟中的那條通道要怎麼產生等。有興趣的朋友,也可以上YouTube搜尋「How(andWhy)SpelunkyMakesitsOwnLevels」,看看以上操作的細節。

你或許會注意到在這個狀況下,各個格子的機率就不是獨立的了!更明確的說,它們會取決於一個條件機率。

簡單來說:

  1. 我們首先生出一條黃色路徑X。
  2. 「給定X」之後,再生出其他各個格子的地圖。

也就是說,我們是先隨機生成X,然後在「給定X的這個條件下」,依據一個「條件機率」生出地圖。

有興趣的人其實也可以自行證明看看,在這個狀況下,每一個格子抽出來的樣板不是獨立的。懶得證的人也可以這樣想:如果每一個格子的樣板抽取是獨立的,那不管我上面的區塊有沒有通往下面的路,下面的區塊抽出沒有向上通路的樣板的機率都是一樣的;換言之,你一定會有機率抽出一張都是死路的地圖!

最後,這個概念在去年的遊戲產業中被應用到一個非常極致的狀況。在《看門狗:自由軍團》(WatchDog:Legion)中,遊戲公司育碧(Ubisoft)採用這個方式生出了整座城市中的每一個人,包含語音、視覺與動作!若你對這個遊戲城市的生成方式有興趣,可以在YouTube上搜尋「HowWatchDogs:LegionWorks」看看他們是怎麼辦到的。

機率、遊戲、生活的連結

其實在數學中「機率」的概念,已經默默地融入到我們生活中的各項遊戲。不論是投擲硬幣、骰子、剪刀石頭布,甚至是你手機遊戲中的「抽卡」、「扭蛋」全都與機率有關,而數學也不全然是冷冰冰的數字,它也是可以很生活化的呢!

本文經科學月刊授權刊登,原文刊載於此

延伸閱讀

責任編輯:蕭汎如
核稿編輯:翁世航


Tags: