Глава 21 · Проект: космический шутер
Меню, игра, пауза и завершение
Явное перечисление GameStatus и таблица разрешённых переходов вместо одной булевой переменной.
Раздел 21.7 хранил конец игры в одной переменной igra_okonchena
без пути назад. Финальная версия использует явное перечисление — тот же приём, что и
SostoyanieIgry в разделе 20.25:
fragment_game_status.py
class GameStatus(Enum):
MENU = auto()
PLAYING = auto()
PAUSED = auto()
GAME_OVER = auto()
| Из состояния | В состояние | Когда |
|---|---|---|
| MENU | PLAYING | нажали Enter |
| PLAYING | PAUSED | нажали P |
| PAUSED | PLAYING | нажали P ещё раз |
| PLAYING | GAME_OVER | жизни закончились |
| GAME_OVER | PLAYING | нажали Enter (перезапуск) |
Выход (Esc или закрытие окна) работает из любого состояния —
поэтому в таблице выше он не привязан к конкретной строке: это не переход между игровыми
состояниями, а завершение самой программы.
Управление кораблём должно знать о состоянии
Если проверку состояния забыть в
handle_input(), корабль продолжит двигаться и стрелять даже на экране паузы или Game Over — тот же класс ошибки, что раздел 21.7 уже почти совершил с igra_okonchena.