Бегом подсчитывать для игры в кости
Я нахожусь на одной неделе в буткемпинге по кодированию, так что простите за мое упрощенное и, вероятно, небрежное кодирование, но мне было интересно, как я могу подсчитать количество побед в моей игре в кости для двух игроков. Я могу набрать окончательный счет и снова обернуть функцию, чтобы начать снова, если игроки хотят продолжать играть, но я хотел бы продолжать подсчет побед, чтобы игроки знали, сколько раз выиграл каждый игрок. Вот моя функция:
def DiceRoll():
Dice1 = random.randint(1, 20)
Dice2 = random.randint(1, 12)
Dice3 = random.randint(1,6)
Dice4 = random.randint(1, 20)
Dice5 = random.randint(1, 12)
Dice6 = random.randint (1, 6)
DoubleDice1 = (((Dice1 + Dice2)*2) + Dice3)
DoubleDice2 = (((Dice1 + Dice3)*2) + Dice2)
DoubleDice3 = (((Dice2 + Dice3)*2) + Dice1)
DoubleDice4 = (((Dice4 + Dice5)*2) + Dice6)
DoubleDice5 = (((Dice4 + Dice6)*2) + Dice5)
DoubleDice6 = (((Dice5 + Dice6)*2) + Dice4)
TripleDice1 = ((Dice1 + Dice2 +Dice3) * 3)
TripleDice2 = ((Dice4 + Dice5 +Dice6) * 3)
print("Player 1, Roll?")
Roll = input("Y/N?")
if Roll =="y":
print("Ok!")
if Roll == "n":
print("Goodbye!")
time.sleep(2)
sys.exit(0)
print(" ")
print(Dice1, Dice2, Dice3)
Score1 = Dice1 + Dice2 + Dice3
if Dice1 == Dice2:
Score1 = DoubleDice1
print(Score1)
elif Dice1 ==Dice3:
Score1 = DoubleDice2
print(Score1)
elif Dice2 == Dice3:
Score1 = DoubleDice3
print(Score1)
elif Dice1 == Dice2 ==Dice3:
Score1 = TripleDice1
print(Score1)
else:
print(Dice1 + Dice2 + Dice3)
print("""
""")
print("Player 2, Roll?")
Roll2 = input("Y/N?")
if Roll2 =="y":
print("Ok!")
if Roll2 == "n":
print("Goodbye!")
time.sleep(2)
sys.exit(0)
print(" ")
print(Dice4, Dice5, Dice6)
Score2 = (Dice4 + Dice5 + Dice6)
if Dice4 == Dice5:
Score2 = DoubleDice4
print(Score2)
elif Dice4 == Dice6:
Score2 = DoubleDice5
print(Score2)
elif Dice5 == Dice6:
Score2 = DoubleDice6
print(Score2)
elif Dice4 == Dice5 ==Dice6:
Score2 = TripleDice2
print(Score2)
else:
print(Dice4 + Dice5 + Dice6)
print("""
""")
if Score1 > Score2:
print("Player 1:", Score1, "Player 2:", Score2)
print("Player 1 Wins!")
if Score1 < Score2:
print("Player 1:", Score1, "Player 2:", Score2)
print("Player 2 Wins!")
if Score1 == Score2:
print("Player 1:", Score1, "Player 2:", Score2)
print("Tie!")
2 ответа
Наиболее простым решением было бы возвращение функции DiceRoll, которую выиграл игрок.
winner = None
if Score1 > Score2:
print("Player 1:", Score1, "Player 2:", Score2)
print("Player 1 Wins!")
winner = 1
elif Score1 < Score2:
print("Player 1:", Score1, "Player 2:", Score2)
print("Player 2 Wins!")
winner = 2
elif Score1 == Score2:
print("Player 1:", Score1, "Player 2:", Score2)
print("Tie!")
winner = 0
return winner
Затем в цикле, который вызывает DiceRoll, просто проверьте возвращаемый результат.
Теперь у вас есть много повторяющегося кода в этой функции. Ты в основном все делаешь дважды. Это делает его главным кандидатом для взлома другой функции. Я бы предложил создать функцию, которая принимает игрока в качестве параметра, а затем бросает кубики только для этого игрока и возвращает счет. Затем вы можете просто вызвать функцию для каждого игрока, сравнить результаты и определить из этого победителя.
Одна последняя вещь. Если игрок решает не бросать, он выходит из программы. Вероятно, его следует изменить, чтобы он считался штрафом, и он должен выходить из внешнего цикла, чтобы вы могли отобразить итоговый счет.
Поскольку в вашей функции нет цикла, я предполагаю, что у вас есть этот цикл управления в программе, которая вызывает DiceRoll. Чтобы подвести итоги, вам нужно вернуть обозначение "победа / поражение" этой программе, примерно так:
if Score1 > Score2:
print("Player 1:", Score1, "Player 2:", Score2)
print("Player 1 Wins!")
winner = 1
elif Score1 < Score2:
print("Player 1:", Score1, "Player 2:", Score2)
print("Player 2 Wins!")
winner = 2
else:
print("Player 1:", Score1, "Player 2:", Score2)
print("Tie!")
winner = 0
Теперь вернемся к вашей основной программе, у нас будет что-то вроде:
p1_wins = 0
p2_wins = 0
ties = 0
while game_on:
result = DiceRoll()
if result == 1:
p1_wins += 1
elif result = 2
p2_wins += 1
else:
ties += 1
Я сохранил это на уровне программирования, я думаю, что вы используете. Сначала вы поймете это. Еще через несколько сессий загрузочного лагеря вернитесь, чтобы увидеть, как вы хотите улучшить свой код.