在NIM游戏程序中,用户体验到了以下问题:
- 电脑在游戏中没有移除任何棋子,并且在所有棋子被移除后,没有显示祝贺信息或要求用户重新开始游戏。
- 解决方案
以下代码更改已解决此问题:
def removingStrawsComputer():
removedNumber = random.randint(1, 3)
global strawsNumber
while removedNumber > strawsNumber:
removedNumber = random.randint(1, 3)
strawsNumber -= removedNumber
print("The number of straws left: ", strawsNumber)
return strawsNumber
在removingStrawsComputer()函数中,我们确保removedNumber永远不会比strawsNumber大。这将防止电脑移除比实际数量更多的棋子。
def checkWinner(player):
if strawsNumber == 0:
print(player, " wins.")
global gameover
gameover = True
return gameover
else:
return False
在checkWinner()函数中,我们更改了胜利条件。现在,当strawsNumber为0时,才会宣布胜利。
def game():
global strawsNumber
strawsNumber = random.randint(10, 20)
while gameover == False:
removingStrawsComputer()
checkWinner(player1)
if gameover == True:
break
humanLegalMove()
print("The number of straws left: ", removingStrawsHuman())
checkWinner(player2)
在game()函数中,我们添加了对removingStrawsComputer()函数的调用,以确保在玩家回合之前,电脑总是先移动。
def playAgain():
answer = input("Do you want to play again?(y/n)")
resetGameover()
while answer == "y":
game()
else:
print("Thanks for playing the game")
在playAgain()函数中,我们添加了resetGameover()函数的调用,以便在用户选择重新开始游戏时重置游戏状态。
代码示例
以下代码实现了上述解决方案:
import random
player1 = raw_input("Enter your name. ")
player2 = "Computer"
howMany = 0
gameover = False
strawsNumber = random.randint(10, 20)
if (strawsNumber % 4) == 1:
strawsNumber += 1
def removingStrawsComputer():
removedNumber = random.randint(1, 3)
global strawsNumber
while removedNumber > strawsNumber:
removedNumber = random.randint(1, 3)
strawsNumber -= removedNumber
print("The number of straws left: ", strawsNumber)
return strawsNumber
def removingStrawsHuman():
global strawsNumber
strawsNumber -= howMany
return strawsNumber
def humanLegalMove():
global howMany
legalMove = False
while not legalMove:
print("It's your turn, ", player1)
howMany = int(input("How many straws do you want to remove?(from 1 to 3) "))
if howMany > 3 or howMany < 1:
print("Enter a number between 1 and 3.")
else:
legalMove = True
while howMany > strawsNumber:
print("The entered number is greater than a number of straws remained.")
howMany = int(input("How many straws do you want to remove?"))
return howMany
def checkWinner(player):
if strawsNumber == 0:
print(player, " wins.")
global gameover
gameover = True
return gameover
else:
return False
def resetGameover():
global gameover
gameover = False
return gameover
def game():
global strawsNumber
strawsNumber = random.randint(10, 20)
while gameover == False:
removingStrawsComputer()
checkWinner(player1)
if gameover == True:
break
humanLegalMove()
print("The number of straws left: ", removingStrawsHuman())
checkWinner(player2)
def playAgain():
answer = input("Do you want to play again?(y/n)")
resetGameover()
while answer == "y":
game()
else:
print("Thanks for playing the game")
game()
playAgain()