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 stanu | W stanie | Kiedy |
|---|---|---|
| MENU | PLAYING | naciskał Enter |
| PLAYING | PAUSED | kliknęli P |
| PAUSED | PLAYING | znów P kliknął |
| PLAYING | GAME_OVER | życia dobiegły końca |
| GAME_OVER | PLAYING | kliknął 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.
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.