私は以前のポスターのいくつかに反対し、物事をより複雑にするので、オブジェクト指向のアプローチはここで行うべきことではないと言います。
必要なのは、各プレイヤーの位置と、ボードを表すベクトルを追跡することだけです。ボードの位置にシュートまたははしごがない場合、それは 0 です。はしごが含まれている場合、ボードには前方に移動する位置の数を示す正の数が含まれます。シュートが含まれている場合は、後ろに移動するための負の数が含まれています。各プレイヤーのターン数と位置を追跡するだけです。
この方法による実際のシミュレーションは非常に単純で、ほぼすべてのプログラミング言語で実行できます。私は R または python をお勧めしますが、それは私が最近最もよく使用するものだからです。
シュートとはしごのコピーを持っていないので、小さなボードを作りました。適切なボードを配置する必要があります。
#!/usr/bin/python
import random, numpy
board = [0, 0, 0, 3, 0, -3, 0, 1, 0, 0]
numplayers = 2
numruns = 100
def simgame(numplayers, board):
winner = -1
winpos = len(board)
pos = [0] * numplayers
turns = 0
while max(pos) < winpos:
turns += 1
for i in range(0, numplayers):
pos[i] += random.randint(1,6)
if pos[i] < winpos:
pos[i] += board[pos[i]]
if pos[i] >= winpos and winner == -1:
winner = i
return (turns, winner)
# simulate games, then extract turns and winners
games = [simgame(numplayers, board) for x in range(numruns)]
turns = [n for (n, w) in games]
winner = [w for (t, w) in games]
pwins = [len([p for p in winner if p == i]) for i in range(numplayers)]
print "runs:", numruns
print "mean(turns):", numpy.mean(turns)
print "sd(turns):", numpy.std(turns)
for i in range(numplayers):
print "Player", (i+1), "won with proportion:", (float(pwins[i])/numruns)