подсчет очков для игры в кости

Я неделю учусь на буткемпе по кодированию, так что простите меня за упрощенное и, возможно, небрежное кодирование, но мне было интересно, как я могу подсчитывать выигрыши в моей игре с двумя игроками в кости. Я могу получить окончательный счет и зациклить функцию, чтобы начать снова, если игроки хотят продолжать играть, но я хотел бы вести текущий подсчет побед, чтобы игроки знали, сколько раз выигрывал каждый игрок. Вот моя функция:

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!")

person Joe Weinfurt    schedule 02.11.2015    source источник
comment
На самом деле это не отвечает на ваш вопрос, но вот несколько идей по очистке кода: dice = [random.randint(1, 20) for _ in range(6)] должен упростить ваши шесть переменных в одну.   -  person inspectorG4dget    schedule 03.11.2015
comment
куда вы на самом деле звоните DiceRoll?   -  person R Nar    schedule 03.11.2015


Ответы (2)


Поскольку в вашей функции нет цикла, я предполагаю, что у вас есть этот цикл управления в программе, которая вызывает 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

Я сохранил это на уровне программирования, который, я думаю, вы используете. Сначала вы должны это понять. Через несколько занятий в учебном лагере вернитесь, чтобы узнать, как бы вы хотели улучшить свой кодинг.

person Prune    schedule 02.11.2015
comment
Где бы я определил game_on? - person Joe Weinfurt; 03.11.2015
comment
Над циклом while. Это просто логический флаг, указывающий, решили ли игроки продолжать игру. Вы сказали, что уже знаете, как зациклить игру. Поскольку вы не предоставили этот код, я составил канонический. - person Prune; 03.11.2015

Самым простым решением было бы, чтобы функция 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, просто проверьте возвращенный результат.

Теперь у вас много повторяющегося кода в этой функции. Вы в основном делаете все дважды. Это делает его главным кандидатом на взлом другой функции. Я бы предложил сделать функцию, которая принимает игрока в качестве параметра, а затем делает броски костей только для этого игрока и возвращает счет. Затем вы можете просто вызвать функцию для каждого игрока, сравнить результаты и определить победителя.

Последняя вещь. Если игрок решает не бросать, он выходит из программы. Это, вероятно, следует изменить, чтобы считаться неустойкой, и выйти из внешнего цикла, чтобы вы могли отобразить окончательный счет.

person Tofystedeth    schedule 02.11.2015