Rozdział 19 · Funkcje gry
High Score
score i high_score to różne pola o różnych czasach życia: jedno jest resetowane po restarcie, drugie go przeżywa.
Rekord przetrwa restart — licznik nie
score oraz high_score — dwa różne
pola o różnym czasie życia. Rozdział 19.23 już pokazał, że
restart() wyraźnie przekazuje high_score w
Nowe państwo, zamiast tworzyć je od nowa:
high_score.py
def new_game_state(rng, *, high_score=0):
snake = [(0, 0)]
return GameState(
snake=snake,
# ...
score=0, # zawsze od zera
high_score=high_score, # przekazane przez wywołujący kod
# ...
)
| Pole | Co się dzieje przy restart() |
|---|---|
| score | zawsze resetuje się do 0 — nowa gra zaczyna się od czystego wyniku |
| high_score | przekazywana z przeszłości state.high_score doświadcza restartu |
high_score jest aktualizowany w max() momencie, a nie na końcu gry
state.high_score = max(state.high_score, state.score) wywoływana od razu przy każdym zjedzonym jabłku (rozdział 19.24) — rekord nie wymaga „podsumowania” osobno na końcu: jest już dokładny w każdej chwili gry, w tym na ekranie Game Over.Praktyka: album zaczyna się wznowiać
Automatyczne sprawdzanie — funkcja update_high_score(): rekord tylko rośnie