西瓜遊戲得分裡的數學

最近這一兩週爆紅的西瓜遊戲,應該大家都玩得不亦樂乎吧?

西瓜遊戲在遊戲本質上來說,其實跟九年前也爆紅過的 2048 是一樣類型的遊戲:在一個相對小的限定空間當中進行物件合併的遊戲。這個「相對小的限定空間」還滿重要的,這也是它跟 Merge-three 類型的休閒遊戲的最大差別:因為限定空間小,填滿的時間相對很快,因此可以快速地在十數分鐘內完成一局再行挑戰,形成一個自然的遊戲迴圈;但 Merge-three 類遊戲的盤面相對大,填滿反而不是主要目的,因此它的遊戲迴圈會建立在多樣化的物件互動上。

不過今天我們不是來談遊戲類型的。大家是否想過,為什麼這個遊戲會有這樣一個天然的 2000、3000、3200、3400 等等的得分門檻在?在玩的過程中應該很少人會去注意到遊戲的得分結構,而大家也只是聽說「達成三千分就算強了」之類的話。這篇文章就來和大家分析一下到底為什麼有這樣的階級出現。

得分結構

要探討得分就要先知道遊戲是怎麼計分的。首先是遊戲本身有提的水果進階結構:由小到大依序是櫻桃、草莓、葡萄、柑橘、柿子、蘋果、梨子、桃子、鳳梨、哈密瓜、西瓜1,一共是 11 種2。它的計分方式是這樣子的:

  • 兩個櫻桃合成草莓得 1 分
  • 兩個草莓合成葡萄得 3 分
  • 兩個葡萄合成柑橘得 6 分
  • 兩個柑橘合成柿子得 10 分
  • 兩個柿子合成蘋果得 15 分
  • 兩個蘋果合成梨子得 21 分
  • 兩個梨子合成桃子得 28 分
  • 兩個桃子合成鳳梨得 36 分
  • 兩個鳳梨合成哈密瓜得 45 分
  • 兩個哈密瓜合成西瓜得 55 分
  • 兩個西瓜對消得 66 分

這個數列是標準的三角形數數列,也是由 1+2+… 至某個數字的和的數列——我有點覺得會選擇這些數字應該就真的是直接從 1+2+… 的和決定的。

當然中後期在升級時有時會一口氣連升一串,例如可能放一個柿子和場中的柿子合併後,合成的蘋果繼續和另一個蘋果合併成為梨子,這樣連串的升上去;這時的得分就是直接獲得各別的合成得分,例如上面這狀況就是合成蘋果的 15 分加合成梨子的 21 分總計得 36 分。

(簡化的) 蘋果的總價值

因為每一級升級都有分數的關係,場上有一個蘋果所能得到的分數並不只有合起來時的 15 分,還包含了所有其他前面的升級的分數。因此我們可以算一下一個蘋果的總值應該要是多少分。

先來簡化一點:假設出的水果全部都是櫻桃好了,那當合成第一個蘋果時的分數會是多少?

當然我們可以詳細列出每個階段的水果有多少個再來加總分數,不過這裡有一個利用遊戲的合併機制進行計算的方法比較容易推廣:首先,櫻桃是直接給我們的所以沒有分數;合成一個草莓得 1 分;合成一個葡萄要兩個草莓,所以葡萄的總分應該是 \(1\times2+3=5\) 分;合成一個柑橘是兩個葡萄,所以是 \(5\times2+6=16\) 分;依此類推,柿子是 \(16\times2+10=42\) 分,蘋果是 \(42\times2+15=99\) 分。

一般來說,令第 \(n\) 階段的水果分數是 \(S(n)\) 分,則它滿足這樣的遞迴式:\[\begin{cases}S(n)=2S(n-1)+\frac{n(n-1)}{2}\\S(1)=0\end{cases}\]這個式子單純這樣不好解,但我可以將它這樣改寫:\[S(n)+\frac{n^2+3n+4}{2}=2S(n-1)+2\times\frac{(n-1)^2+3(n-1)+4}{2}\]這個神奇的\(\frac{n^2+3n+4}{2}\)可以用待定係數法求得:直接令這個式子是 \(f(n)=an^2+bn+c\),然後令 \(2f(n-1)-f(n)=\frac{n(n-1)}{2}\) 後展開對應係數相等求解即可。這樣改寫之後只要令 \(T(n)=S(n)+\frac{n^2+3n+4}{2}\),就有 \[\begin{cases}T(n)=2T(n-1)\\T(1)=4\end{cases}\]這樣就能輕易解得 \(T(n)=4\times2^{n-1}=2^{n+1},\ S(n)=2^{n+1}-\frac{n^2+3n+4}{2}\)。代入 \(n=11\) 求得這種狀況下西瓜的總分應該是 \(2^{12}-\frac{121+33+4}{2}=4096-79=4017\)。

實際的水果生成

求出了一個四千出頭的分數,和實際遊戲差到兩倍了;這是因為我們一開始有一個假設:假設出的水果全部都是櫻桃——但實際上遊戲是會在前五種水果當中隨機出的。出了一個草莓就代表合成這顆草莓的 1 分沒了,而若出了柿子更代表合成柿子的 42 分就此消失。因此要能正確估計蘋果的分數,我們需要考慮遊戲給出的水果的種類及分布。

假設遊戲是平均出這五種水果好了。我們不能直接從上面求得的 99 分中直接扣掉各階的分數,因為這 99 分代表了 16 個草莓或 2 個柿子,顯然因為出草莓而扣掉的分數不只有 1 分,因為出柿子而扣掉的分數也不會到 42 分這麼多。

為了能正確求得蘋果的分數,不妨這麼考慮:如果我們合成蘋果之後就不繼續往上合成,只要某個時候盤面上全部都是蘋果,那我們就能平均得出一顆蘋果的分數該是多少。

那就來試試看吧:

  • 五種各 2 個:兩個相同的都往上合一級,因此盤面有 1 草莓 1 葡萄 1 柑橘 1 柿子 1 蘋果,得分 \(1+3+6+10+15=35\);
  • 五種各 4 個:上面盤面翻倍,能合的都升一級,盤面現有 1 葡萄 1 柑橘 1 柿子 3 蘋果,得分 \(35\times2+(3+6+10+15)=104\);
  • 五種各 8 個:類推,盤面現有 1 柑橘 1 柿子 7 蘋果,得分 \(104\times2+(6+10+15)=239\);
  • 五種各 16 個:盤面現有 1 柿子 15 蘋果,得分 \(239\times2+(10+15)=503\);
  • 五種各 32 個:盤面現有 31 蘋果,得分 \(503\times2+15=1021\)。

在各出 32 個之後得到了 1021 分及 31 個蘋果,因此可以平均得出一個蘋果能獲得的分數是 \(\frac{1021}{31}\approx32.94\) 分;和假設全部櫻桃合成算得的分數 99 分比起來只剩下三分之一了。這就是因為遊戲實際上是隨機出前五種水果的關係。

若要求自此開始累積到西瓜的分數,注意到我們算出來的數值其實就是 \(S(6)\) 應該要有的值,也就是初始條件不是 \(S(1)=0\) 而應該是 \(S(6)=\frac{1021}{31}\) 了。用同樣方式求解可得公式為:\[S(n)=\frac{30}{31}\times2^n-\frac{n^2+3n+4}{2},n\geq6\]由這個公式求得的蘋果之後的水果的平均分數是:3

階數水果平均分
6蘋果\(\frac{1021}{31}\approx32.94\)
7梨子\(\frac{2693}{31}\approx86.87\)
8桃子\(\frac{6254}{31}\approx201.74\)
9鳳梨\(\frac{13624}{31}\approx439.48\)
10哈密瓜\(\frac{28643}{31}\approx923.97\)
11西瓜\(\frac{58991}{31}\approx1902.94\)
12「雙西瓜」\(\frac{120028}{31}\approx3871.87\)

由此可見,合成西瓜時的分數都約在 1900~2000 這個區間並不是巧合,這正是因為平均合成一個西瓜可以得到約 1903 分,加上合成時旁邊留下的其他水果的分數就是大約 2000 分;3000 的檻則是一個西瓜一個哈密瓜加其他東西的分數,如果沒能合成哈密瓜但留著兩個鳳梨的話,這三個水果會塞住大半的盤面,導致滿盤時不容易超出 3000 太多。同理 3200 就是一個西瓜一個哈密瓜一個鳳梨,而如果鳳梨沒能合成還是兩個桃的話四個大水果會幾乎塞滿盤面,因此 3200 也會是一階;再加一個桃子就是約 3400~3500。最後最大的崁,雙西瓜的分數即是上面的第 12 階約 3872 分,所以實際達成時的分數應在 3900~4000 左右——那個 7355 分紀錄的影片中間雙西瓜對消瞬間的分數是 3979,加上最後滿盤時是因為沒合成哈密瓜的兩個鳳梨合起來了,盤面變成一西瓜一哈密瓜一鳳梨而滿盤,這兩個點的分數都確實是略多於這裡求得的平均值的。

另一種推導

上面我們推出平均值的方法是實際照生成比例堆出整數個數求出來的。如果已知比例堆不出整數個的話要怎麼辦?那就不要限制在整數就好了。

考慮第一階合成,兩個櫻桃合成一個草莓得 1 分;比例上來說,這其實可以「平均地」考慮成每個櫻桃等於半個草莓和 0.5 分。如果要再往上換算呢?兩個草莓合成一個葡萄得 3 分,所以半個草莓等於四分之一個葡萄和 0.75 分,也就是說一個櫻桃等於四分之一個葡萄和 0.5+0.75=1.25 分。把這個算法套用到將前五種水果換算成蘋果的話,會是這樣:

階數水果公式比例換算到蘋果
5柿子1/2 蘋果+7.5 分1/2 蘋果+7.5 分
4柑橘1/2 柿子+5 分1/4 蘋果+8.75 分
3葡萄1/2 柑橘+3 分1/8 蘋果+7.375 分
2草莓1/2 葡萄+1.5 分1/16 蘋果+5.1875 分
1櫻桃1/2 草莓+0.5 分1/32 蘋果+3.09375 分

那麼等比例的五種水果總計就是 \(\frac{31}{32}\) 個蘋果加 31.90625 分,因此一個蘋果即是 \(31.90625\div\frac{31}{32}\approx32.94\) 分,得到了同樣的數值。

如果出的水果比例不等的話,上面的換算值可以乘上各自比例加起來再進行平均。一個自然的後續問題就是:實際亂數出水果的比例不均造成的價值變動會有多少?我寫了一隻小程式4進行簡單模擬:一局遊戲進行五種水果 250 抽5,將抽出來的個數乘上上面的比例後去求出這一局裡的蘋果約值多少分,然後這樣模擬了一千萬局。得到的結果是:平均來說蘋果的分數約是 33.01 分 (比上面求得的理論平均值大了約 0.07),但標準差有 1.5 分——這表示有 95% 的機會蘋果的價值是會在 30~36 分之間,相對應的西瓜分數約是 1800~2000 分。這個變動值也能說明有些人合成西瓜時分數還不到 1900,但有些人雜物多時會到了 2200 到 2300 才合成出西瓜。因此 3000 這個流傳甚廣的數值其實不過就是「一個西瓜加一個哈密瓜」的分值範圍正好勉強跨過 3000 這個大整數的關係。

小結

於是這就是西瓜遊戲之所以會有這樣接近千的倍數的階段崁的原因了——某種程度上其實也是有一點巧合,畢竟原始分數結構其實是很單純的三角形數,但這平均分數正好在第十階左右踩到了千的倍數附近而已。

既然跟當年的 2048 一樣爆紅自然幾天之內就有了許多仿作,不過各種仿作在實作規格和分數結構上並不會跟原作完全一致,所以同樣的終點也不一定會有一樣的分數崁,到達終點的難度也都各有不同,在遊玩時是可以多方比較的。

那麼今天的數學課就到這裡,下課!

註腳

  1. 我參照的來源是ニコニコ大百科的條目裡引述原作者推文所說的。當中第四階段的水果是デコポン,那是日本那邊將兩種柑橘雜交出來的所謂「凸頂柑」,那本文為行文方便就全部稱做柑橘了。 ↩︎
  2. 這裡也看得出西瓜遊戲有受到 2048 類遊戲的影響的設計:如果最小的櫻桃是 2,草莓是 4,依此類推的話,西瓜正好是 2048。當然不排除這是因為類似大小的空間就只是塞得下這麼多種類的東西,但 2048 原版是固定大小的格子,西瓜遊戲是不同大小的水果,都正好取了 11 種有點難說沒有受到影響。 ↩︎
  3. 不能用這個公式代入 \(n\leq5\) 去估計前五種的分數,因為它們是遊戲會生成的水果,直接用這個公式估計會多扣掉未來才會合成的分數。 ↩︎
  4. 程式在這裡↩︎
  5. 250 抽的數字來源是這樣的:以註腳 2 的合成值來算的話,平均一顆出的水果合成值是 \((2+4+8+16+32)\div5=12.4\),於是要出到能累積到一個西瓜加一個哈密瓜的合成值 3072 的水果數目平均是 \(3072\div12.4=247.74\) 個,因此就取一個整數 250 作為一局長度。因為取的是一個西瓜加一個哈密瓜,這個長度其實比不少短局還來得長不少,就當做多抽一點做些長期平均的感覺吧。 ↩︎

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料