はじめに
年末年始にボードゲーム「バンカース」をプレイして、明らかに止まりやすい家があるなと興味を持ち、シミュレーションして、止まりやすさを計算することにした。
環境はiPhoneのPythonistaで行った。
出典:Amazon | バンカース(復刻版) | すごろく | おもちゃ
実行結果
結果のみ知りたい方のために、まず実行結果を示す。横軸はシミュレーションで止まった回数である。
コード解説
シミュレーションの方針
シミュレーションを行い、家に止まった回数をカウントし、それを十分大きな数だけ繰り返すことで収束した値を比較する。
盤の実装
盤には40マスあり、40番目の次は1番目に戻る。
したがって、総移動数をカウントし、剰余演算でどこのマスにいるかを判定する。
実装しないマス
止まりやすさ(移動の仕方)に影響しないマスについては特に細かいところは実装せず、何も起こらないマスとして扱う(実際にはお金を取られたりもらったりする)。
止まったことの判定の仕方
止まったと判定するのは1ターンの最後に止まったマスとしている。なぜなら、家に泊まった場合は必ずそこでターンが終了するため。また、このシミュレーションの目的は家の止まりやすさを計算し、比較することにある。
マスの評価の仕方
マスを移動する関数を作成し、それを介して移動することで、マスの評価を行う。
def stepEval(steps, count, card):
if (count + steps) % len(BOARD) == 18:
if steps == 7:
return steps
if steps == 0:
return 0
else:
count += steps
next_steps = BOARD[where_board(count)].getMove(card, where_board(count))
return steps + stepEval(next_steps, count, card)
参考文献