有没有一种方法可以使一个多人骰子游戏,玩家有轮流滚动和得分计数?

2024-09-30 06:14:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为一个多人掷骰子游戏做一个代码,用户可以输入多少玩家。 我希望代码重复,直到一个球员达到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

我希望代码继续,但是我在这里卡住了,代码只询问有多少玩家,然后中断。 this is how the code "breaks"

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

^{pr2}$

Tags: 代码infordef玩家roll球员str
1条回答
网友
1楼 · 发布于 2024-09-30 06:14:39

可能解决您的问题

代码中有各种各样的return语句,这使得某些代码无法执行。就像在diceroll函数中,返回die1和{}:

return die1, die2

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

你说你是这样执行函数的:

^{pr2}$

但是,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函数来检查玩家是否获胜。它以最高分数作为参数。在

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

相关问题 更多 >

    热门问题