Clash Royale 最重要的是卡牌之間的組合。但分析起來太複雜,還得從單兵種之間的對抗入手。
首先,我們面對的就是怎麼把費用(Cost)轉換成攻擊力和防禦力。第一個方案是,爲所有卡牌找到一個統一的指標,數值越大,攻擊力越強。但這顯然不現實,卡牌之間都是相互制約的。看來只能針對某一對卡牌建模計算了。
我們先考慮一個具體例子:當 mini PEKKA 遇上 Knight ,二者都是近身搏鬥型。mini PEKKA 菜掉 Knight 需要n = (Knight.hit_points / mini_PEKKA.damage).ceil刀,这段时间挨了(m = n * mini_PEKKA.hit_speed / Knight.hit_speed).floor刀(即掉了m * Knight.damage)滴血。剩下的血量就很简单了:
mini_PEKKA.hit_points - (((Knight.hit_points / mini_PEKKA.damage).ceil) * mini_PEKKA.hit_speed / Knight.hit_speed).floor) * Knight.damage
但是還有個問題,這是近身互砍的情況,要是兩個(設爲 a, b)都是遠程攻擊型卡牌呢?其實也很簡單,只要對攻擊距離短的一方(設爲 b)的血量做一修正就行了:b.hit_points - a.damage_per_second * (a.range - b.range) / (a.v + b.v)。

這樣,我們就得到一張粗略的對戰表:
| Cards | mini PEKKA | Knight | Giant | Witch | Musketeer | Spear Goblins | Archers | Valkyrie | Prince |
|---|---|---|---|---|---|---|---|---|---|
| mini PEKKA | 0 | 270.0 | 0 | 488.6 | 84.6 | 519.7 | 121.3 | 321.0 | 0 |
| Knight | 0 | 0 | 0 | 678.7 | 131.0 | 626.3 | 315.2 | 102.0 | 0 |
| Giant | 932.0 | 1472.0 | 0 | 2233.0 | 1604.1 | 2194.8 | 1812.2 | 1388.0 | 875.6 |
| Witch | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Musketeer | 0 | 0 | 0 | 224.0 | 0 | 326.0 | 172.0 | 0 | 0 |
| Spear Goblins | 0 | 0 | 0 | 7.0 | 0 | 0 | 0 | 0 | 0 |
| Archers | 0 | 0 | 0 | 212.0 | 0 | 314.0 | 0 | 0 | 0 |
| Valkyrie | 0 | 0 | 0 | 716.7 | 245.0 | 740.3 | 429.2 | 0 | 0 |
| Prince | 236.0 | 440.0 | 0 | 790.6 | 326.2 | 751.1 | 645.0 | 305.0 | 0 |
顯然,這張對戰表存在很多問題,比如:移動速度是估的(好在距離不長,影響不大)、Giant 只會攻擊建築不打人、Witch 能召喚小鬼……所以它們的數據幾乎沒有意義。但我們還是能得出一些規律:
mini PEKKA 菜 Spear Goblins, Valkyrie, Knight ,險勝 Archers, Musketeer ,不敵 Prince。
Knight 菜Spear Goblins, Archers ,險勝 Musketeer, Valkyrie ,不敵 mini PEKKA, Prince。
Musketeer 菜 Spear Goblins ,險勝 Archers ,不敵mini PEKKA, Knight, Valkyrie, Prince
(不知道是不是計算有誤,感覺女槍手蠻強的)。Spear Goblins 只有被菜的份,也就是來拖拖時間(後面可以算算能折算成多少藥水)。
Archers 只能菜 Spear Goblins。
Valkyrie 秒 Spear Goblins ,菜 Archers, Musketeer ,不敵 mini PEKKA, Knight, Prince。
女武神可以群傷,不過在這應該差不了太多。Prince 菜 Spear Goblins, Archers, Knight, Musketeer, Valkyrie, mini PEKKA 。
但是被骷髏兵團秒,不適用這個模型,分析起來有點麻煩(好吧,主要是我沒拿到)。
下面,我們來思考下「防禦力」如何計算。當遇到某個兵種 b 進攻,我們決定投放卡牌 a 去阻擊。會出現兩種情況:
一是不敵,但是拖延了時間。這就要看看究竟贏得了多少時間,減去投放該卡牌的費用,若還有剩,則雖然沒能阻擊成功,但變相賺取了藥水,決策正確。否則,虧本買賣。
二是成功禦敵。那麼就可以用
�(剩下的血量 / a.hit_points) * a.cost
折換成藥水。

比如:用 Knight 去阻擊 mini PEKKA。3.6秒後歇菜,mini PEKKA 還有270滴血,阻擊失敗。但是拖延了3.6秒,而 Knight 只花了3滴藥水,相當於賺了0.6滴藥水。
| Cards | mini PEKKA | Knight | Giant | Witch | Musketeer | Spear Goblins | Archers | Valkyrie | Prince |
|---|---|---|---|---|---|---|---|---|---|
| mini PEKKA | -2.2 | 1.4 | 2.0 | 2.2 | 0.0 | 2.3 | 0.0 | 1.6 | -1.0 |
| Knight | 0.6 | 5.8 | 6.0 | 1.8 | 0.0 | 1.5 | 0.0 | 0.3 | 1.5 |
| Giant | 1.8 | 2.8 | 17.5 | 4.1 | 2.5 | 4.0 | 3.1 | 2.6 | 1.3 |
| Witch | -3.2 | -1.7 | -2.0 | 4.1 | -1.7 | -1.1 | -1.4 | -0.5 | -2.0 |
| Musketeer | -2.2 | -0.7 | -1.0 | 2.7 | -0.7 | 2.9 | 1.5 | -1.0 | -1.0 |
| Spear Goblins | -2.0 | 0.2 | -0.5 | 0.1 | -0.9 | 0.6 | -0.8 | -0.5 | -0.5 |
| Archers | -1.2 | 0.3 | 0.0 | 1.4 | -0.8 | 2.1 | 0.6 | 0.0 | 0.0 |
| Valkyrie | -0.4 | 4.8 | 6.5 | 2.2 | 0.0 | 2.3 | 0.5 | 6.5 | 2.0 |
| Prince | 1.1 | 2.0 | 4.0 | 3.5 | 0.5 | 3.3 | 2.5 | 2.1 | 2.5 |
由上表可以看出:
用 mini PEKKA 去阻擊 mini PEKKA 其實是不划算的,因爲兩下就報銷了,回血都來不及。
用 Musketeer 去阻擊貌似也不划算,Knight 貌似更適合一些。
……
好吧,我就圖一樂子。但你不覺得,創建一些指標來支撐你的決策,這不就是會計思維的第二層境界——解讀數據的能力?!