Rozdział 19 · Model gry

Stan gry

Nie tylko „gra trwa lub się skończyła”

Gra nie tylko "idzie" lub "nie idzie"

Pierwszy prototyp znał tylko igra_okonchena — Bulevo tak/nie. Ostateczna wersja rozróżnia cztery stany zwykłej gry, a przejścia między nimi są następujące: To nie jest przypadek, ale jasne zasady:

READY
czekamy na pierwszy kierunek
request_direction() — pierwsze wydrukowanie
RUNNING
kleszcze
toggle_pause() ⇄ toggle_pause()
PAUSED
kleszcze ustały
kolizja ze ścianą/jaźnią
GAME_OVER
kolizja
restart()
READY
czekamy na pierwszy kierunek
StatusCo się dzieje
READYwąż jest na miejscu, poczekaj na pierwszy nacisk – kleszcze jeszcze nie odchodzą
RUNNINGkleszcze są planowane jeden po drugim przez ontimer()
PAUSEDtiknięcia się zatrzymają, model się nie zmienia, ekran pokazuje „PAUSE”
GAME_OVERdoszło do kolizji; czekamy na restart()
WONpole jest pełne, nie ma już pustej klatki na jedzenie - Rozdział 19.18
Piąty stan jest rzadki, ale prawdziwy
B GameStatus programie końcowym jest pięciu członków, a nie czterech: oprócz czterech stanów regularnej partii, są WON — wąż zajął dosłownie każdą komórkę pola. Jest to prawie nieosiągalne w prawdziwej grze, ale jest to pełny stan terminalny, a nie „prawie GAME_OVER”: rozdział 19.18 pokazuje, skąd pochodzi, a rozdział 19.21 — czym stany terminalne są podobne do siebie.
GameStatus jak Enum — ta sama idea, co Tool w rozdziale 18
Cztery stany to ostateczny znany lista, więc Enum tutaj jest tak samo uzasadnione jak Tool w przypadku narzędzi do rysowania: edytor wykryje literówkę w nazwie państwa, a nie cichy błąd w trakcie gry.
Praktyka: przejścia stanów gry
Automatyczne sprawdzanie – funkcja can_transition(): której dozwolone są przejścia między READY/RUNNING/PAUSED/GAME_OVER
Otwórz praktykę →