当运行此代码时,它应该在播放器和计算机之间交替,但是当计算机轮到时,它才会完成游戏。我已经反复检查了缩进级别,但我找不到问题。
答案 0 :(得分:2)
你写这篇文章的方式让我们很难弄清楚控制流程是如何进行的。有很多重复,这对游戏来说并不是必需的,这增加了复杂性。一个主要的事情是你有四个位置,你要求玩家是否重启游戏。如果你只是确保拥有一次,那么你已经可以使一切变得更容易了。
你会注意到的第一件事是结构是这样的:
while winFlag == False:
# player move
while sticksOnBoard != 0:
# evaluate winner
# AI move
# evaluate winner
因此,除非任何一名球员已经通过低于0杆获胜,否则人工智能的举动将一次又一次地发生,直到有人获胜。但玩家永远不会有机会再次移动。相反,你可能想要完全删除你的winFlag
,因为当游戏结束时没有更多的支持。所以你只需要这样:
while sticksOnBoard > 0:
# player move
if sticksOnBoard <= 0:
# evaluate winner
# AI move
# evaluate winner
或者要删除评估的重复,您只需切换活动播放器:
isPlayerMove = True
while sticksOnBoard > 0:
if isPlayerMove:
# player move
else:
# AI move
isPlayerMove = not isPlayerMove # toggle current player
# evaluate winner
这就是我制作这款游戏的方法,减少了所有重复:
def playerVsAiGame (sticksOnBoard):
# main game loop
while True:
sticks = sticksOnBoard
isPlayerMove = True
# only ask when there are more than 3 left; otherwise the current
# player can just choose the remaining number and win
while sticks > 3:
print('There are {} sticks on the board.'.format(sticks))
if isPlayerMove:
move = int(input('How many sticks would you like to take? (1-3) '))
else:
# the computer just chooses randomly between 1, 2, and 3 sticks
# this is where you could add additional game logic to make the AI
# smarter
move = random.choice((1, 2, 3))
print('The computer takes {} sticks.'.format(move))
sticks -= move
isPlayerMove = not isPlayerMove
# the current player wins
print('There are {} sticks on the board.'.format(sticks))
if isPlayerMove:
print('You win!')
else:
print('The computer wins!')
# break the main loop unless the player wants to play again
if input('Play again? Yes (1) / No (0) ').lower() not in ('1', 'yes', 'y'):
break
答案 1 :(得分:0)
我认为你在这段代码中遇到了一些错误。
您永远不会在内循环中请求用户输入。
检查sticksOnBoard
是否小于0,并检查它是否为1。
但是,在大多数情况下,sticksOnBoard
只会有更大的值,因此,
while sticksOnBoard != 0
将循环直到您的游戏结束。
与此同时,您的基本人工智能将不断从董事会中抽出棍棒,而无需用户做任何事情。
你似乎并不熟悉编程(这没有问题,每个人都曾经开始)。这就是为什么我建议你拿笔和纸一步一步地运行你的功能的示例。 这样就很明显为什么程序不能按你的意愿运行。