Глава 19 · Функции игры

High Score

score и high_score — разные поля с разным временем жизни: одно обнуляется при рестарте, другое переживает его.

Рекорд переживает рестарт — счёт нет

Реальное окно: одна голова в центре поля, табло сверху показывает Счёт: 0 Рекорд: 40
Реальное окно: после restart() счёт обнулился, а рекорд остался прежним.

score и high_score — два разных поля с разным временем жизни. Раздел 19.23 уже показал, что restart() явно передаёт high_score в новое состояние, а не создаёт его заново:

high_score.py
def new_game_state(rng, *, high_score=0):
    snake = [(0, 0)]
    return GameState(
        snake=snake,
        # ...
        score=0,               # всегда с нуля
        high_score=high_score, # передан вызывающим кодом
        # ...
    )
ПолеЧто происходит при restart()
scoreвсегда сбрасывается в 0 — новая игра начинается с чистого счёта
high_scoreпередаётся из прошлого state.high_score — переживает рестарт
high_score обновляется в момент max(), а не в конце игры
state.high_score = max(state.high_score, state.score) вызывается сразу при каждом съеденном яблоке (раздел 19.24) — рекорд не нужно «подводить» отдельно в конце: он уже точен в любой момент игры, включая экран Game Over.
Практика: рекорд переживает рестарт
Автоматическая проверка — функция update_high_score(): рекорд только растёт
Открыть практику →