カイジ闇の黙示録の「HIGH & LOW」についての考察

# 目次

[はじめに](#はじめに)
[ルール](#ルール)
[勝率について](#勝率について)
[シミュレーションしてみた](#シミュレーションしてみた)
#はじめに

先日リリースされ大反響を集めているあるソーシャルゲームがあります。

それが**カイジ闇の黙示録**です。

https://kaiji-yami-no-mokushiroku.com/

あの名作マンガカイジのソシャゲでしかも**小室哲哉**氏が手掛けているBGMが随所にあり、LUNA SEAのボーカルで有名な**河村隆一**氏の主題歌もあり、カイジやアカギのCVでおなじみ、プロ雀士でもある**萩原聖人**氏が様々な名言をゲーム内随所で喋ってくれる超豪華なゲームとなっております。私もリリースからプレーしていますが楽しすぎて時間を溶かしてしまっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/e4f39c1c-5252-dc75-271e-e927e95960e3.png)

ゲーム自体はたくさんのミニゲームで構成されているのですが、その中の一つにトランプゲームの**HIGH&LOW**があります[^1]。飲み会で定番のゲームなのでご存じの方も多いかもしれません。

#ルール

このゲームにおいてのルールは非常にシンプルです。


![IMG_8517.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/fff05b56-2343-21bf-5408-7fc1485f8026.jpeg)

まず初めに賭け金を設定します。ゲームを始めた際に所持しているゲーム内通貨は200000エーンですが、一回当たりに賭け金として設定できる金額は$ \{ 2000 + (lv-1) * 3000 \} $エーンとなっています。lv1なら5000エーン、lv100なら305000エーンです。

![IMG_8515.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/09417a34-e944-f6db-4a3b-0e9ea69b5b2f.jpeg)

次に、利根川がランダムでカードを提示してきた後に、自分が持っているカードがそれよりも上か下か選ぶように強いられます。ここで、カードの強さは強い順にA>K>Q>J>10>9>8>7>6>5>4>3>2とし、カードの中にジョーカーは入っていないものとします。(1000回以上試行してきて一枚も出てこなかったので多分入っていないはず)

![IMG_8513.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/696fcc54-3262-8727-97e4-f349f2d41aeb.jpeg)

この選択が当たった場合、見事右上の**現在の金額**が倍になります。また、その後にダブルアップをするかの選択をさせられます。

![IMG_8518.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/b79c19c0-7bda-0dcc-e768-bac504539218.jpeg)

ここで、ダブルアップをすると**賭け金が倍になり**、またゲームをすることになります。ここで「いいえ」を選択すると現在の金額をそのまま受け取ることができます。

![IMG_8514.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/d668fe17-bc95-e1da-6644-1936bafabf1c.jpeg)

しかし、ここで負けてしまうと、**賭け金が没収されます**。ここで注意すべき点が一つあります。

没収されるのは賭け金です。先ほど、ダブルアップをすると賭け金が倍になると書きました。

例えば、5000エーンを最初に賭け一回目のゲームに勝った場合、二回目のゲームには自分が倍の10000エーンを賭けたということになります。

もしもここで二回目のゲームに負けた場合、没収されるのは初めに賭けた5000エーンではなく、**二回目に賭けた10000エーンです**。したがって自分の所持金は195000エーンではなく190000エーンとなります[^2]。


ダブルアップは最大6回行うことができ、すべてに勝率すると元々の賭け金の128倍をゲットすることができます。一方で6回目に負けてしまうと最初の賭け金の64倍が失われてしまいます。

#勝率について

HIGH & LOWゲームの勝率について考察します。自分は最も有利な選択をするものとします[^3]。

利根川がAまたは2を提示した場合...自分は確実にA以下または2以上を所持しているため、52枚のトランプのうちから利根川が出した1枚を除く51枚のうち、Aまたは2の残り3枚を除く48枚を選べば勝てるので勝率は $ \frac{48}{51} $となります。

利根川がKまたは3を提示した場合...自分が負けるor引き分けるのは

- 利根川がKの場合...自分がA, Kを所持している場合
- 利根川が3の場合...自分が3, 2を所持している場合

となるため、それぞれ7枚となります。したがって勝率は $ \frac{44}{51} $ となります。

以下、同様に考察していくと2～Aにおける勝率は

|利根川の手|2  |3  |4  |5  |6  |7  |8  |9  |10  |J  |Q  |K  |A  |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|勝率| $ \frac{48}{51} $ | $ \frac{44}{51} $ | $ \frac{40}{51} $ | $ \frac{36}{51} $ | $ \frac{32}{51} $ | $ \frac{28}{51} $ | $ \frac{24}{51} $ | $ \frac{28}{51} $ | $ \frac{32}{51} $ | $ \frac{36}{51} $ | $ \frac{40}{51} $ |$ \frac{44}{51} $ | $ \frac{48}{51} $ |

となります。利根川が8を出した場合は勝率が5割を切ってしまうのでめんどくさいです。

全ての組み合わせが出る確率は同様に確からしいので、全体の勝率は

```math
\left\{ \left( \frac{48}{51} + \frac{44}{51} + \frac{40}{51} + \frac{36}{51} + \frac{32}{51} + \frac{28}{51} \right)*2 + \frac{24}{51} \right\} = 0.7239819004524887... \fallingdotseq 0.724 ...A
```

となり、**約72.4%**だとわかりました。

ただし、これは引き分けを考えた時のケースなのですが、実際にやってみると引き分けの場合には**再試行**することになるため、引き分けの場合を考察する必要がないことに気づきます。従って各ケースにおける勝率は

|利根川の手|2  |3  |4  |5  |6  |7  |8  |9  |10  |J  |Q  |K  |A  |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|勝率| $ 1 $ | $ \frac{11}{12} $ | $ \frac{5}{6} $ | $ \frac{3}{4} $ | $ \frac{2}{3} $ | $ \frac{7}{12} $ | $ \frac{1}{2} $ | $ \frac{7}{12} $ | $ \frac{2}{3} $ | $ \frac{3}{4} $ | $ \frac{5}{6} $ |$ \frac{11}{12} $ | $ 1 $ |

となります。この場合全体の勝率は

```math
\left\{ \left( 1 + \frac{11}{12} + \frac{5}{6} + \frac{3}{4} + \frac{2}{3} + \frac{7}{12} \right)*2 + \frac{1}{2} \right\} = 0.7692307692307693 ... \fallingdotseq 0.769...B
```

となり、引き分けを考慮しない場合勝率は**約76.9%**、9回に7回は勝てるということがわかります。

なお、この確率Bを用いた場合の1回の賭けの期待値(負けるまでor7連勝する)は、

```math
bet\{(1 - b) (-1 - 2b - 4b^2 -8b^3 - 16b^4 -32b^5 -64b^6 )+128b^7 \}
```

で計算でき、$ bet = 302000 $の場合、期待値としては3649693.8961282573円となり、**元値の約12倍**と計算できます。

#シミュレーションしてみた

ということでここからが本題です。条件は以下の通りに設定します。

初期所持金...0(実際にはプラスの状態からスタートしますが、考察のため0からとします。)
賭け金...302000(レベル100時の上限です)
勝利次は常にダブルアップをする。

この条件のもと、最初に100万回試行を行ってみます。

## ソースコード

用いたソースコードは以下の通りです。

```python
import random
def act():
    #A...14とする
    tonegawa = random.choice(range(2, 15))
    you = random.choice(range(2, 15))
    if(you in [2, 14]):
        return True
    else:
        if((you > 7 and you > tonegawa) or (you <= 7 and you < tonegawa)):
            return True
        elif((you > 7 and you < tonegawa) or (you <= 7 and you > tonegawa)):
            return False
        else:
            act()

bet = 302000 #lv100
now, count = 0, 0
res = []
wl = 0
for _ in range(1000000):
    if(act()):
        wl += 1
        count += 1
        if(count == 7):
            now += bet * 2 ** count
            count = 0
    else:
        wl -= 1
        now -= bet * 2 ** count
        count = 0
    res.append(now)
```

多分あってるはず((追記)間違ったので訂正しました)。```count```には連勝数、```res```には各ステップごとの所持金を入れています。

実行して横軸にステップ数、縦軸に所持金の推移をプロットしたグラフは以下の通りです。

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/81411aee-2657-ef82-26e9-5e7d03d2c896.png)

ほぼ線形に上昇していき、100万回終えた時点での金額は**509989212000エーン、およそ5100億エーン**になることがわかりました。

ただ実際には線形にはならないということが容易に考えられます。ズームして10000回の試行までについて次は見ていきます。

![10000_time.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/f02c2ab3-e2c2-6838-c900-1fb33859fd38.png)

実際にはかなり増えて微増して...を繰り返していることがわかります。

ですが、これはあくまでもシミュレーションであり、実際のルールに則して再度考慮するとこのようになります。

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413178/24c1e517-79f6-ef54-4c7e-bffba3251525.png)

実はこのゲーム、上のスクリーンショットを見ていただいても分かると思うんですけどエーンの所持上限が**2147483647**であり、それよりも上にはいきません。ちなみに表示上そうなっているとかではなく、負けたら**普通に減ります**。



というわけで自分が最近ハマっていたソシャゲについて考察しました。ハマっていたというのは上限値に達して飽きちゃったんですよね...。```int```を```ll```とかにアプデで変えてくれたらいいなあと思って締めさせていただきます。


[^1]: 原作でハイローやったことあったっけ...
[^2]: これ大分理不尽だと思ってるけどどうなんですかね
[^3]: 例えば利根川がAを出したときにわざとHIGHを選ばないみたいな感じです