2016-10-29 2 views
1

Возможно, мне трудно объяснить мою проблему, так что голая со мной. Я пытаюсь создать программу, которая работает как игровой автомат. В моем цикле я пытаюсь определить, сколько кредитов игрок получает по результатам их спина (ов). Однако скажите, когда игрок рулит и выигрывает 300 кредитов, когда его попросят снова закрутить, если они выиграют в другой раз, он не помнит результат прежнего вращения.Добавление результата рулона игрового автомата в петле

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

Вот что я имею в секции петли:

cashPool = 500 

import random 

# Assigning wheel properties 
wheel1 = ['Candy','Ghost','Pumpkin','Cat','Zombie','Witch','Witch','Cat','Ghost','Candy'] 
wheel2 = ['Candy','Ghost','Pumpkin','Cat','Zombie','Witch','Cat','Pumpkin','Ghost','Candy'] 
wheel3 = ['Candy','Ghost','Pumpkin','Cat','Zombie','Witch','Pumpkin','Candy','Candy','Ghost'] 

#loop to spin 


def AskYesNo(question): 
    tmp = input(question).lower() 
    if tmp.startswith('y'): 
     return True 
    else: 
     return False 

i = 0 

while True: 
    spin1 = random.randint(3,4) 
    spin2 = random.randint(3,4) 
    spin3 = random.randint(3,4) 
    print(str(wheel1[spin1])+ '\t' + str(wheel2[spin2]+ '\t' + str(wheel3[spin3]))) 
    i += 1 
    if spin1==4 and spin2==4 and spin3==4: 
     print('Congratulations! You have won 300 credits') 
     result = cashPool + 300 
     print('You currently have '+ str(result) +' credits') 
    if spin1==5 and spin2==5 and spin3==5: 
     print('Congratulations! You have won 250 credits') 
     result = cashPool + 250 
     print('You currently have '+ str(result)+ ' credits') 
    if spin1==3 and spin2==3 and spin3==3: 
     print('Congratulations! You have won 200 credits') 
     result = cashPool + 200 
     print('You currently have '+cashPool+' credits') 
    if spin1==2 and spin2==2 and spin3==2: 
     print('Congratulations! You have won 150 credits') 
     result = cashPool + 150 
     print('You currently have '+cashPool+' credits') 
    if spin1==1 and spin2==1 and spin3==1: 
     print('Congratulations! You have won 100 credits') 
     result = cashPool + 100 
     print('You currently have '+cashPool+' credits') 
    if spin1==0 and spin2==0 and spin3==0: 
     print('Congratulations! You have won 50 credits') 
     result = cashPool + 50 
     print('You currently have '+cashPool+' credits') 
    AskYesNo('Would you like to spin? Enter y/n ') 
    if False: 
     break 

Кроме того, я 100% уверен, что есть простой способ рассчитать результаты каждого спина, а не делать, если заявления снова и снова. Но опять же, я новичок, и это вне меня. Я не могу думать, как программист, я не знаю, как это делают люди.

+0

'if False' никогда не произойдет ... Кроме того, я думаю, вы хотите, чтобы' cashPool + = 300' обновлял пул, а не присваивал 'result' вообще –

ответ

0

Вместо определения новой переменной result просто увеличьте существующую переменную cashPool. Например .:

if spin1==4 and spin2==4 and spin3==4: 
    print('Congratulations! You have won 300 credits') 
    cashPool += 300 # Here 
    print('You currently have '+ str(result) +' credits') 
+0

Не могу поверить, что полностью забыл + = вместо просто =. Я клянусь в 95% случаев, когда сталкиваюсь с проблемой, когда я пытаюсь запрограммировать это буквально, я забываю одного персонажа или что-то такое незначительное. Спасибо, хотя! – ALLCAPS

0

Во-первых, random.randint(3,4) возвращает только 3 или 4 ... должен быть (0,4), если вы хотите, остальные значения.

Во-вторых, этот раздел не будет работать, потому что if False не вводится.

AskYesNo('Would you like to spin? Enter y/n ') 
if False: 
    break 

Вам нужно получить логическое значение от этой функции.

if AskYesNo('Would you like to spin? Enter y/n '): 
    break 

Некоторые другие предложения включают в себя не повторение себя так много. Сделать это DRY

Например, заимствование

Python: determine if all items of a list are the same item

def all_same(items, element): 
    return all(x == element for x in items) 

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

Таким образом, вы просто играете с цифрами, и у вас есть совершенно другая игра с минимальными изменениями, которые необходимо внести.

total_slots = 3 
max_range = 4 
multiplier = 50 

while True: 
    i += 1 
    spins = [random.randint(0, max_range) for _ in range(total_slots)] 
    print('\t'.join(map(str, spins))) 

    credits = 0 
    for i in range(max_range + 1): # We loop over all spin possible values 
     won = all_same(spins, i) 
     if won: 
      credits = (i + 1) * multiplier # when i == 0, we add 50 
      print('Congratulations! You have won {} credits'.format(credits)) 
      break # can stop the for-loop 

    cashPool += credits # if you didn't win, nothing is added 
    print('You currently have {} credits'.format(cashPool)) 

    if AskYesNo('Would you like to spin? Enter y/n '): 
     break 

Примечание: Я знаю, что я не включал wheel значения. Этот метод all_same по-прежнему будет работать, как только вы получите строки для каждого значения spin в списках wheel.