Глава 19 · Функции игры
High Score
score и high_score — разные поля с разным временем жизни: одно обнуляется при рестарте, другое переживает его.
Рекорд переживает рестарт — счёт нет
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(): рекорд только растёт