Возможное решение вашей проблемы
В вашем коде есть все виды операторов return
, которые делают невозможным выполнение некоторого кода. Как и в функции diceroll
, где вы возвращаете die1
и die2
in:
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
, которая проверяет, выиграл ли игрок. В качестве аргумента используется максимальная оценка.
Теперь это, вероятно, не самый быстрый код, однако я думаю, что он понятен. Если у вас есть какие-либо вопросы по этому поводу, не стесняйтесь спрашивать.