Глава 19 · Правила игры
Game Over как состояние
Столкновение не просто останавливает движение — оно переводит игру в отдельное состояние GAME_OVER.
Game Over — состояние, а не только надпись на экране
Когда is_wall_collision() или is_self_collision()
возвращают True, тик не просто останавливает движение — он переводит
state.status в GAME_OVER и рисует
оверлей поверх последнего кадра игры:
game_over.py
if is_wall_collision(head):
state.status = GameStatus.GAME_OVER
self.render()
self._show_overlay("GAME OVER", f"Счёт: {state.score} | R — новая игра")
return
GAME_OVER не запускает больше тиков
game_tick() в самом начале проверяет if state.status is not RUNNING: return — GAME_OVER сюда попадает точно так же, как PAUSED. Единственный способ снова сдвинуться с места — restart() (раздел 19.23), который явно создаёт новое состояние.GAME_OVER — не единственный терминальный статус: раздел 19.18
показывает второй, куда более редкий случай — GameStatus.WON,
когда змейка занимает буквально всё поле. Оба останавливают тики одним и тем же способом,
отличается только причина и текст оверлея.
Практика: переход в GAME_OVER
Автоматическая проверка — функция resolve_tick(): какие столкновения переводят игру в GAME_OVER