首页 > 解决方案 > 有没有办法制作多人骰子游戏,玩家轮流滚动并计算分数?

问题描述

我正在尝试为多人掷骰子游戏制作代码,用户可以在其中输入多少玩家。我希望代码重复直到玩家达到 100 分并在所有玩家之间循环。

我为此尝试了各种功能/模块,并询问了同行和一些老师,在网上搜索了这个和整个堆栈溢出但找不到答案。

playerPoints = {}
toRoll = ""
minPlayers = 2
maxPlayers = 4
winner = 100
double1 = 25

def players(numberOfPlayers):
    numberOfPlayers = 0
    while numberOfPlayers not in (str(i) for i in range (minPlayers,maxPlayers)):
        numberOfPlayers = int(numberOfPlayers)
        for i in range(numberOfPlayers):
            playerPoints["score{}".format(i+1)] = 0
        return numberOfPlayers

def diceroll():
    die1 = randint(1,6)
    die2 = randint(1,6)
    return die1, die2
    roll = 0
    while roll not in (str(i) for i in toRoll):
        roll = input("Press enter to roll both dice")
        if roll == toRoll:
            print(str(die1) + " and " + str(die2))
            break

我希望代码继续,但是我被困在这一点上,代码只询问那里有多少玩家然后中断。 这就是代码的方式

我通过执行以下操作调用了该函数:

numberOfPlayers = input("How many players are there? (2-4)")
players(numberOfPlayers)
diceroll(die1, die2)
roll()

标签: pythonpython-3.xfunctionmodule

解决方案


可能解决您的问题

您的代码中有各种各样的return语句,这使得某些代码无法执行。就像在diceroll你返回的函数中die1一样die2

return die1, die2

该行之后的代码永远不会执行,因为该函数返回一些值。

你说你像这样执行函数:

numberOfPlayers = input("How many players are there? (2-4)")
players(numberOfPlayers)
diceroll(die1, die2)
roll()

但是,该diceroll函数采用零参数,而您给它两个 (die1die2),这将不起作用。此外,我roll在您的代码中看不到函数,因此也会给您一个错误。

我会怎么做

所以,我知道 StackOverflow 不是我们为您编写代码的地方。但是由于您的代码中有各种各样的东西,我觉得很奇怪。我已经按照我的方式重写了代码:

import random

playerPoints = []
minPlayers = 2
players = 0
maxscore = 100
amountOfDice = 2
gameRound = 0

def setPlayers():
    while True:
        players = input("How many players are playing?\n")
        if players.isdigit():
            players = int(players)
            if minPlayers <= players:
                for i in range(players):
                    playerPoints.append(0)
                return players

def diceroll(player, amountOfDice):
    throw = 0
    print("\tPlayer {0}s turn:".format(player + 1))
    for i in range(amountOfDice):
        die = random.randint(1, 6)
        print("\t\tPlayer {0} has thrown die {1} which landed on {2}".format(player + 1, i + 1, die))
        throw += die

    playerPoints[player] += throw
    print("\tPlayer {0}s score is now: {1}".format(player + 1, playerPoints[player]))
    return throw

def checkWin(maxscore):
    for player in range(players):
        if (playerPoints[player] >= maxscore):
            print("Player {0} wins!".format(player + 1))
            return True

    return False


if __name__ == "__main__":
    players = setPlayers()
    while True:
        gameRound += 1
        print("Round: {0}".format(gameRound))
        for i in range(players):
            diceroll(i, amountOfDice)
        if (checkWin(maxscore)):
            break

现在,首先,我删除了players函数中的一些限制(并将名称更改为setPlayers)。您的代码没有检查输入是否为数字,这可能会导致错误。我还取消了 4 名玩家的限制,因为代码适用于每个数量(当然如果 2 或更高)。

diceroll函数现在将要滚动的玩家以及要滚动的骰子数量作为参数。

我还添加了checkWin检查玩家是否获胜的功能。它以最高分作为参数。

现在这可能不是最快的代码,但我认为它是可以理解的。如果您对此有任何疑问,请随时提出。


推荐阅读