ゲームの仕様が曖昧な点をつぶす

  • [CopyFuture][RemoveCard][X][Y]
    • CopyFutureでRemoveCardをコピーしてRemoveCard自体を削除した場合、次に実行されるのはX
    • コピーは「このカードが一時的に『コピー対象の命令が転記されたカード』に変わったかのように」振る舞う。つまり実行前にコピーは終わっている。
  • [CopyFuture][MoveCard][X]
    • CopyFutureでMoveCardをコピーしてCopyFuture自体を別の場所に移動したとしても次に発動するのはX
  • [CopyFuture][Bomb][X]
    • CopyFutureでBombをコピー、発動した時点でCopyFutureが削除されるのでXは発動しない。XがFloatなどの時にどのカードが動くのかが問題になる。
  • [CopyFuture][Reverse][CopyPast]
    • CopyFutureでReverseをコピーして実行順が反転するが、CopyPastのコピー方向まで変わるとCopyPastがCopyPast自体をコピーして無限再起になる。CopyPast, CopyFuture、Floatは「そのカード実行時の実行順」でコピー方向が決まる
    • エラー確認→テストケース作成→修正


全部テストケースを書いて確認したよ!

{"IndexError('list index out of range',)": 18, 'You': 416, 'Computer': 385, 'draw': 37, "RuntimeError('Too Long Play',)": 144}

うーん、まだ1000回中18回くらいのバグがあるな。

Float      ^ (C)  x-1, x-1 

うわ。なるほど、Floatの移動量の数字を負になるまでデクリメントすると該当するカードが存在しなくなってエラーか。これ逆にインクリメントされすぎてもダメだろうな。

直した。お、1000件中1件だけまだエラーになる。これはCharmでビット書き換え後に「ビット個数が0になることによる死亡」の判定をし忘れている。

おーけー、なおった。後はAIを賢くすればToo Long Playになりにくくなるだろう。一応別の1000件でテストしてみるか。

"ValueError('list.index(x): x not in list',)": 1, "IndexError('list index out of range',)": 1

あー。Jump先がJump発動後に削除されたらどうなるのか、という問題らしい。
もう1つはジャンプ先がインクリメントされすぎて適切なジャンプ先が見つからない問題。