Как сделать функцию, которая позволяет пользователю принимать решение Да/Нет

Я создаю игру, используя pygame на python, и пытаюсь разрешить пользователю принимать решение «да» или «нет», но по какой-то причине он не входит в мой цикл «для события в pygame.event.get():»

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

Вот функция, которая вызывает функцию Y/N:

if SwordCheck == None:
    dispOnTextBox("You don't have", 'anything to buy.', '')
elif SwordCheck == False:
    displayMoney(Kelts, Parts, Shreds)
    dispOnTextBox('Do you want to', 'purchase that?', "it's 200 kelts")
    VALUE = waitForYNDecision()
    if VALUE == None:
        pygame.display.update()
        FPSCLOCK.tick()
    elif VALUE == False:
        dispOnTextBox('No? Ok, but please', 'put it back when', "you are done")
        return False
    elif VALUE == True:
        dispOnTextBox('Alright! here you', 'go. Thank you', 'for your purchase')
        return True

А вот функция Y/N:

print 'CHOOSE Y/N with Up = Yes and Down = No'
for event in pygame.event.get():
    if event.type == QUIT:
        terminate()
    elif event.type == KEYDOWN:
        if event.key in (K_W, K_KP8):
            return True
        elif event.key in (K_S, K_KP5):
            return False
return None

Я проверил все остальные функции, и только с ними возникла проблема. Я любитель в этом и был бы признателен за хороший ответ.


person Lighform    schedule 17.01.2017    source источник
comment
pygame не получает события от оболочки - вы можете получить его только при нажатии кнопки в окне pygame. Поэтому нет смысла использовать print() для отображения сообщения, если вам нужно использовать окно pygame.   -  person furas    schedule 17.01.2017
comment
Кстати: мы используем CamelCase имена только для классов и UPPER_CASE имен только для констант, для переменных и функций мы используем lower_case имен - это делает код более читабельным.   -  person furas    schedule 17.01.2017
comment
Кстати: for event не блокирует код и не ждет вашего ключа - и он выполняется быстрее, чем вы даже думаете нажать кнопку. Вы должны поместить это в while True, чтобы поймать нажатую клавишу.   -  person furas    schedule 17.01.2017
comment
Большое спасибо! Это сработало для меня.   -  person Lighform    schedule 18.01.2017


Ответы (1)


Он ожидает, что пользователь сделает это мгновенно, я не уверен, что это его намерение, но если он не просто поместил его в истинный цикл while

person Pyrolle    schedule 19.01.2017