我正在尝试为多人掷骰子游戏编写代码,用户可以在其中输入玩家数量。 我希望代码重复直到玩家达到 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()
最佳答案
可能解决您的问题
你的代码中有各种return
语句,导致某些代码无法执行。就像在返回 die1
和 die2
的 diceroll
函数中:
return die1, die2
该行之后的代码永远不会执行,因为该函数返回一些值。
你说你像这样执行函数:
numberOfPlayers = input("How many players are there? (2-4)")
players(numberOfPlayers)
diceroll(die1, die2)
roll()
但是,diceroll
函数接受零个参数,而您给它两个参数(die1
和 die2
),这是行不通的。此外,我在您的代码中没有看到 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/