我在这样的方法中有一个循环:
from random import randint
class Player:
def __init__(self, position=0):
self.position = position
def move(self, move):
self.position += move
class Game:
def __init__(self, size=10, p1=1, p2=1):
self.size = size
self.p1 = Player()
self.p2 = Player()
def finished(self):
if self.p1.position >= self.size:
return True
if self.p2.position >= self.size:
return True
def run(self):
while True:
roll = randint(1,2)
self.p2.move(roll)
if self.finished():
break
roll = randint(1,2)
self.p1.move(roll)
if self.finished():
break
if self.p2.position >= self.p1.position: # if player 2 won return 2, else 1
return 2
else:
return 1
def jump(self, iterations):
move1, move2, i = 0,0,0
while i < iterations:
print(move1, move2) # move1 is 0 again
a = Game(self.size, self.p1.position+1, self.p2.position)
x = a.run()
print(x) # x is either 1 or 2, for the sake of testing
# it's been set to always 1
if x == 1:
move1 += 1
print(move1) # if move1 is incremented, it is shown here successfully
b = Game(self.size, self.p1.position+2, self.p2.position)
y = b.run()
if y == 1:
move2 += 1
i += 1
if move2 >= move1:
return 2
else:
return 1
human, comp, i = 0, 0, 0
times = 10
while i < times:
g = Game()
while True:
roll = g.jump(4)
g.p1.move(roll)
if g.finished():
human += 1
break
roll = g.jump(4)
g.p2.move(roll)
if g.finished():
comp += 1
break
i += 1
然而,在每个循环开始时,应该更新的变量正在被重置。我的缩进似乎是正确的,所以我不确定问题是什么。它可以是可变范围吗?
谢谢你的帮助。
编辑:这是所有代码的pastebin:http: //pastebin.com/GjKA8yag
编辑:将所有代码添加到帖子中。以下是底部控制器代码应该发生的事情的概览:
初始化游戏,g
. g
有2个玩家,每个玩家都有一个位置,他们需要到达棋盘的末端才能获胜,棋盘长10个方格,他们可以一次移动1个或2个方格。
jump
我们使用该方法来决定要移动多少个方格。该jump
方法在其中创建了两个游戏,一个是游戏初始化为 player1 比他所在位置早 1 个方格,一个是游戏初始化为 player1 比他所在位置早 2 个方格。然后使用该方法随机完成这些游戏run
,并返回一个值以查看谁赢得了该游戏(2
对于 player2,1
对于 player1)。
这是完成iterations
的次数,然后是更成功的游戏,即最初向前移动 1 或向前移动 2,这就是实际游戏中将采取的移动g
。
打印语句示例:
0 0
1
1
0 0
2
0
0 0
1
1
0 0
1
1
第一行是print(move1, move2)
,它位于 while 循环的开头。然后print(x)
作为从run()
方法返回的值,然后print(move1)
在它增加之后。
我在 Windows 8 上运行 Python 3.3 x64。
结果:切换到 Python 2.7.3,它现在可以工作了。