ミニマムゲームVer. 1.5を実装した

とりあえずコンソールで動く奴を実装してカードの選択だけモンテカルロにしたところ。ビットの配置はコンピュータに最大限有利な配置にしてある。1回プレイしてバグはなさそうだったので試行回数を増やして今からプレイしてみる。

--------------------
    AddBit [1, 0] []
   MoveBit [1, 0] []
 RemoveBit [1, 0] []
     Crack [1, 0] []
      Bomb [1, 0] []
life: [10, 10]

player 1 thinking @ AddBit

Player 1がコンピュータで0が僕。

    AddBit [1, 0] []
   MoveBit [1, 0] []
 RemoveBit [1, 0] []
     Crack [1, 0] []
      Bomb [1, 0] [1]
life: [10, 10]

Bombに置いたようだ。これ全部発動したら死んでしまう。そして僕はBombで追いかけても勝てない。RemoveBitでビットを削ろう。

    AddBit [1, 0] []
   MoveBit [1, 0] []
 RemoveBit [1, 0, 0] []
     Crack [1, 0] []
      Bomb [1, 0, 1] []
life: [10, 10]

player 1 thinking @ MoveBit

    AddBit [1, 0] []
   MoveBit [1, 0] [0]
 RemoveBit [1, 0, 0] []
     Crack [1, None] []
      Bomb [1, 0, 1] []
life: [10, 10]

むう、そういうことするね。嫌らしい。ビットの追加はカードが変わるときに処理されるルールを有効活用している。同じことをするよ。RemoveBitのコンピュータビットをMoveBitに移動。

    AddBit [1, 0] []
   MoveBit [1, 0, 0, 1] []
 RemoveBit [0, 0] []
     Crack [1] []
      Bomb [1, 0, 1] []
life: [10, 10]

引き続き僕のターン。これでBombに乗っている2枚のビットを両方削除する。

    AddBit [1, 0] []
   MoveBit [1, 0, 0, 1] []
 RemoveBit [0, 0] []
     Crack [1] []
      Bomb [0] []
life: [8, 10]

Crackで2ポイントのダメージを受けて8:10。Bombを発動しよう。8:6になる。さてAIはAddBitをどこに使うか。予想ではBomb。予想どおりだった。僕はRemoveBitに積む。

    AddBit [1, 0] []
   MoveBit [1, 0, 0, 1] []
 RemoveBit [0, 0, 0] []
     Crack [1] []
      Bomb [0, 1] []
life: [8, 6]

player 1 thinking @ MoveBit

    AddBit [1, 0] []
   MoveBit [1, 0, None, 1] [0]
 RemoveBit [0, 0, 0] []
     Crack [1] []
      Bomb [0, 1] []
life: [8, 6]

ふむ。そして今気づいたけどもBombで使ったビットが消えていないバグがあるw だからAIはBombばっかり狙うのかww

僕はMoveBitでMoveBitの最後のビットを無効化して、次のRemoveBit3連発でごっそりビットを削る。Bombのビットは残っているけどバグだから発動しないことにする。

    AddBit [1, 0] []
   MoveBit [0, 0] []
 RemoveBit [0, 0, 0] []
     Crack [1] []
      Bomb [0] []
life: [6, 6]

AddBitでどこに置いたとしてもRemoveBitで3つのビットを削除して勝利、と。


もう1戦してみたけど、さすがにまだ本気で戦える相手ではないなぁ。一番不利な局面からでも逆転できる。MoveBit上にMoveBitで移動したときに「ビットの追加はカードが変わるタイミング」というルールから無効化されるってのはちょっと目から鱗だったが、それを使うなら初手でMoveBitの僕のビットをMoveBitに移動して無効化して、RemoveBitではRemoveBitの僕のビットを削除するといいんじゃないか。そうされることを見込んだら僕はAddBitでRemoveBitに置くわけなのだけどもなー。まあ、まだモンテカルロだ。次はUCBをいれよう。