simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Hearthstone: ハースストーンのスプリットダメージの期待値

スプリットダメージ
1ダメージずつ飛んで行くダメージのこと。分裂ダメージ。
対象を取らないランダムダメージであり
隠れ身(Stealth)やスペルの対象にならないミニオンにもダメージを与えられる

様々な盤面において
ダメージ回数が決まった時に
相手カードごとの撃破率というものを出したい。

答え方:
必ず撃破できるカード 1
撃破できないカード 0
2度同じ状況をつくれた場合、1度は撃破が期待できるカード 1/2
といった数字をカードごとに出します。

一番簡単なダメージ回数が1の時について説明してみます。

場のすべてのカードに一様にダメージが与えられる可能性があるわけですから
サイコロやコインの期待値と同じように
場に2枚あるならば、いずれのカードも1/2の確率でダメージが与えられます。

■問題1
場に2枚のカードがあり
すべてのカードのライフが1だった場合
★答え1
いずれのカードも撃破率は 1/2 です。

■問題2
場に3枚のカードがあり
すべてのカードのライフが1だった場合
★答え2
いずれのカードも撃破率は 1/3 です。

■問題3
場に2枚のカードがあり
一方のカードのライフが1の場合
一方のカードのライフが2の場合
★答え3
カードのライフが1のカードの撃破率は 1/2
カードのライフが2のカードの撃破率は 0

カードのライフがダメージ回数の1より大きい場合は無条件に 0 です。

■問題4
場に3枚のカードがあり
一枚目のカードのライフが1の場合
二枚目のカードのライフが2の場合
三枚目のカードのライフが2の場合
★答え4
カードのライフが1のカードの撃破率は 1/3
カードのライフが2のカードの撃破率は 0
カードのライフが2のカードの撃破率は 0

ここまで見てきて、撃破率に関わるパラメータには次のものがあることがわかります。
カードのライフ life
場のカードの数 numCard

これらを利用して、ダメージ回数が1の時についてのカードごとの撃破率の計算式は次のとおりです。

if (life == 1)
{
    1/numCard
}
else 
{
    0
}

次にダメージ回数が2の場合について確認してみましょう。

simplestar-tech.hatenablog.com