NIM游戏程序问题与解决方法

78 阅读2分钟

在NIM游戏程序中,用户体验到了以下问题:

  • 电脑在游戏中没有移除任何棋子,并且在所有棋子被移除后,没有显示祝贺信息或要求用户重新开始游戏。
  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

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