NIM游戏无法正常工作

-1 投票
1 回答
648 浏览
提问于 2025-04-18 07:26

我刚开始学习用Python编程,做了一个简单的NIM游戏。这个游戏是人类对电脑,每个玩家可以从1到3根稻草中选择去掉一些。不过我遇到一个问题,就是电脑在玩的时候,似乎没有去掉任何稻草,电脑的回合结束后,稻草的数量还是和之前一样。而且当所有稻草都被去掉后,也没有显示祝贺的信息,也没有提示可以再玩一次。希望能得到一些帮助。

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
    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

def resetGameover():
    global gameover
    gameover=False
    return gameover

def game():
    global strawsNumber
    strawsNumber=random.randint(10,20)
    while gameover==False:
        print("It's ",player2,"turn. The number of straws left: ",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()

1 个回答

0

你只需要调整一下你的缩进

def removingStrawsComputer():
    removedNumber=random.randint(1,3)
    global strawsNumber
    while removedNumber>strawsNumber:
         removedNumber=random.randint(1,3) 
         strawsNumber-=removedNumber
    return strawsNumber

这段代码只会在 if removedNumber > strawsNumber 的情况下,移除 strawNumber 的吸管

要解决这个问题,调整一下你的缩进就可以了

def removingStrawsComputer():
    removedNumber=random.randint(1,3)
    global strawsNumber
    while removedNumber>strawsNumber:
         removedNumber=random.randint(1,3)
    strawsNumber-=removedNumber #now always remove the straws
    return strawsNumber

撰写回答