python - 有没有办法制作多人骰子游戏,让玩家轮流掷骰子并计算分数?

标签 python python-3.x function module

我正在尝试为多人掷骰子游戏编写代码,用户可以在其中输入玩家数量。 我希望代码重复直到玩家达到 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"

我通过以下方式调用函数:

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

最佳答案

可能解决您的问题

你的代码中有各种return语句,导致某些代码无法执行。就像在返回 die1die2diceroll 函数中:

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 函数来检查玩家是否赢了。它以最大分数作为参数。

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

关于python - 有没有办法制作多人骰子游戏,让玩家轮流掷骰子并计算分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56109602/

相关文章:

python - Python 中的字节总是八位字节吗?

javascript - 这个 JavaScript 数字比较函数实际上是如何工作的?

javascript - 连接函数

mysql - #1111 - 组函数 : MAX COUNT doesn't work with MYSQL5. 5 的使用无效

python - 创建一个数组,其中一个字母重复另一个数组给定的给定次数

python - 使父对象不出现在 before_flush 事件监听器的 session.dirty 中

python - 如何获取Python中exec()定义的可调用函数?

python - 正则表达式:不要将以换行符 (\n) 结尾的字符串与行尾 anchor ($) 匹配

python - 如何编辑 django-machina 论坛模板和样式

python - 如何在使用按位运算添加两个整数时添加无限循环的代码修复