Rozdział 21 · Projekt: kosmiczny strzelec

Menu, Gra, Pauza i Koniec

Jawne wyliczanie GameStatus oraz tabeli dozwolonych przejść zamiast jednej zmiennej boole'owskiej.

Rozdział 21.7 przechowywała końcową fazę gry w jednej zmiennej igra_okonchena nie ma odwrotu. Ostateczna wersja wykorzystuje jawne wyliczanie, ten sam trik co SostoyanieIgry w sekcji 20.25:

fragment_game_status.py
class GameStatus(Enum):
    MENU = auto()
    PLAYING = auto()
    PAUSED = auto()
    GAME_OVER = auto()
Spoza stanuW stanieKiedy
MENUPLAYINGnaciskał Enter
PLAYINGPAUSEDkliknęli P
PAUSEDPLAYINGznów P kliknął
PLAYINGGAME_OVERżycia dobiegły końca
GAME_OVERPLAYINGkliknął Enter (restart)

Exit (Esc lub zamknięcie okna) działa z dowolnego stanu — Dlatego w powyższej tabeli nie jest powiązany z konkretnym wierszem: nie jest przejściem między grą stanów, ale także samego ukończenia programu.

Trzy prawdziwe okna obok siebie: puste pole gry, ekran pauzy z przezroczystą nakładką, ekran Game Over z wynikiem
Rzeczywiste kadry trzech różnych stanów tej samej gry.
Załoga statku musi wiedzieć o stanie
Jeśli zapomnisz o statusie, zamelduj handle_input(), statek będzie nadal poruszać się i strzelać nawet na ekranie pauzy lub Game Over — ten sam typ błędu, który sekcja 21.7 prawie już popełniła z igra_okonchena.