2015-11-02 3 views
0

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

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

Это не отвечает на ваш вопрос, но вот некоторые идеи по очистке кода: 'dice = [random.randint (1, 20) для _ в диапазоне (6)]' должно упростить ваши шесть переменных в один – inspectorG4dget

+0

, где do вы на самом деле называете «DiceRoll»? –

ответ

1

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

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

+0

Где я могу определить game_on? –

+0

Выше цикла while. Это всего лишь логический флаг, который указывает, решили ли игроки продолжить игру. Вы сказали, что уже знаете, как делать петлю, чтобы продолжать игру. Поскольку вы не предоставили этот код, я составил канонический. – Prune

1

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

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

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