Глава 19 · Правила игры

Game Over как состояние

Столкновение не просто останавливает движение — оно переводит игру в отдельное состояние GAME_OVER.

Game Over — состояние, а не только надпись на экране

Реальное окно: неподвижная змейка S-образной формы, поверх поля крупная надпись 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: returnGAME_OVER сюда попадает точно так же, как PAUSED. Единственный способ снова сдвинуться с места — restart() (раздел 19.23), который явно создаёт новое состояние.

GAME_OVER — не единственный терминальный статус: раздел 19.18 показывает второй, куда более редкий случай — GameStatus.WON, когда змейка занимает буквально всё поле. Оба останавливают тики одним и тем же способом, отличается только причина и текст оверлея.

Практика: переход в GAME_OVER
Автоматическая проверка — функция resolve_tick(): какие столкновения переводят игру в GAME_OVER
Открыть практику →