首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NIM游戏-重新运行游戏

NIM游戏-重新运行游戏
EN

Stack Overflow用户
提问于 2012-11-16 08:36:38
回答 1查看 4.5K关注 0票数 2

我必须做一个叫NIM的小游戏。这个游戏是人与计算机的游戏,每个玩家都会移走一些吸管(1,2或3),而谁移走最后一根吸管,谁就失去了。我让游戏正常运行,但问题是,如果玩家想再次玩游戏,它就不想重新运行。任何帮助都将不胜感激。:)

代码语言:javascript
复制
import random
print("""************ NIM GAME   ***********
************ Game Start ***********
************ The rules  ***********
-----------------------------------------------------
You need to remove from 1 to 3 straws from the pile.
The player that removes the final straw is the loser.
-----------------------------------------------------""")

player1=str(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():
    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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-16 08:40:59

您忘记在每次游戏开始时重置吸管的数量。在def game():之后,您应该插入:

代码语言:javascript
复制
global strawsNumber
strawsNumber=random.randint(10,20)

注意:您还需要将answer=input("Do you want to play again?(y/n)")放在while answer=="y":循环的末尾。这将要求用户每次重播,而不是仅仅在第一场比赛之后。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13408711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档