0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonでボードゲーム「バンカース」の家の止まりやすさを計算した

Last updated at Posted at 2021-01-06

はじめに

年末年始にボードゲーム「バンカース」をプレイして、明らかに止まりやすい家があるなと興味を持ち、シミュレーションして、止まりやすさを計算することにした。
環境はiPhoneのPythonistaで行った。

bankers
出典:Amazon | バンカース(復刻版) | すごろく | おもちゃ

実行結果

結果のみ知りたい方のために、まず実行結果を示す。横軸はシミュレーションで止まった回数である。
89A0A821-CE31-4BA4-8075-0ADDE64B2D21.jpeg

コード解説

シミュレーションの方針

シミュレーションを行い、家に止まった回数をカウントし、それを十分大きな数だけ繰り返すことで収束した値を比較する。

盤の実装

盤には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)

参考文献

ソースコード

GitHub - PyBankers
PyPI - PyBankers

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?