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
我希望代码继续,但是我被困在这一点上,代码只询问那里有多少玩家然后中断。
我通过执行以下操作调用了该函数:
numberOfPlayers = input("How many players are there? (2-4)")
players(numberOfPlayers)
diceroll(die1, die2)
roll()
解决方案
可能解决您的问题
您的代码中有各种各样的return
语句,这使得某些代码无法执行。就像在diceroll
你返回的函数中die1
一样die2
:
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
检查玩家是否获胜的功能。它以最高分作为参数。
现在这可能不是最快的代码,但我认为它是可以理解的。如果您对此有任何疑问,请随时提出。
推荐阅读
- r - 我可以在闪亮的应用程序 R 中添加一个包含五个数字的向量作为输入吗
- python - 如何将熊猫数据框输出从函数保存到工作区?
- cmd - Windows CMD -- 按修改日期排序文件列表
- router - 使 OpenThread 边界路由器在纯 IPv6 环境(SLAAC、RA、GUA)中正常运行
- javascript - 使用其他 div 滚动条在 div 内滚动
- macos - CATiledLayer 在 macOS 上渲染的图块太少
- iis - Blazor WASM 在 IIS 上发布 => 内存访问越界,加载 ICU 资产时出错
- javascript - 如何解构道具以传递给子组件?反应原生
- javascript - 在手机上用背景填充屏幕
- c# - 显示字符串异步延迟