keyboard.wait() не дает остановить цикл while (Python). Помогите найти обходной путь
Решил сделать известную игру "Сапер" на ЯП Python в консоли. Захотел сделать управление не вписыванием координат в input()
для "копания", а клавишами клавиатуры(стрелочки, пробел и т.д.). Использовал для этого библиотеку keyboard для отслеживания нажатий. В процессе оказалось, что функция keyboard.wait()
блокирует основной поток программы, и из-за этого не могу остановить цикл while
, в котором и находится keyboard.wait()
.
Остановка цикла while является важным моментом программы, так как цикл является основным, и по его итогу игра завершается либо проигрышем, либо выигрышем.
Итак, вот пример этого цикла в коде программы:
def play(self):
# Main game loop
while self.main_loop:
def on_press(key):
# On key press, update the game state depending on the key pressed
self.field[self.marker_y][self.marker_x] = self.prev_cell
match key.name:
# В зависимости от клавиши выполняет функцию
# перемещения маркера, копания или ставит флажок.
pass
# Update the marker's position
self.prev_cell = self.field[self.marker_y][self.marker_x]
self.field[self.marker_y][self.marker_x] = self.marker_sign
# Refresh the console and redraw the game field
os.system('cls')
self.draw()
# НЕ ДАЕТ ОСТАНОВИТЬ ЦИКЛ
keyboard.on_press(on_press)
keyboard.wait()
Небольшое дополнение: если вписать break
до keyboard.wait()
, то программа остановится (что очевидно, ведь очередь не дойдет до исполнения ф-ии).
Мне нужно, чтобы при значении self.main_loop = False
программа останавливалась. А так, игру можно остановить принудительно сочетанием Ctrl+C.
Со всем кодом можно ознакомится на github.