Rozdział 20 · Tworzenie gier z Pygame

Stany gry

Menu, rozgrywka, pauza i game over — to różne stany gry i kod musi wyraźnie wiedzieć, w którym z nich jest w danej chwili.

Już teraz Twoje projekty mają przynajmniej jeden niejawny stan — «gra trwa». W praktyce prawie każda gra przechodzi przez kilka wyraźnie rozróżnialnych stanów i w każdym z nich zachowuje się inaczej.

Typowe stany gry
Menu
Pokazuje nagłówek i przycisk „Graj"
Nie przesuwa żadnych obiektów gry
Czeka, aż zostanie nacisnięty lub naciśnięty klawisz
Gra trwa dalej
Aktualizuje pozycje, sprawdza kolizje
Reaguje na sterowanie graczem
Podstawowy stan gry
Pauza
Nie aktualizuje pozycji funkcji
Kontynuuje renderowanie ostatniej klatki
Czeka na polecenie wznowienia
Game Over
Pokazuje końcowy wynik
Nie akceptuje sterowania
Proponuje zacząć od nowa

Państwo jako wyliczenie

Znany z rozdziału 19 sposób — przechowywać bieżący stan jako wartość enum.Enum (Rozdział 18), nie jako kilku niezależnych Boolean flagi takie jak na_pauze oraz igra_okonchena oddzielnie. Enum nie może znajdować się w dwóch stanach jednocześnie — u poszczególnych flag boolean taka pomyłka jest całkowicie możliwa przypadkowo:

sostoyaniya_enum.py
from enum import Enum, auto

class SostoyanieIgry(Enum):
    MENU = auto()
    IGRA = auto()
    PAUZA = auto()
    GAME_OVER = auto()

tekushee_sostoyanie = SostoyanieIgry.MENU

Przejścia między stanami

Stany tej mini-gry tworzą nie linię prostą, lecz graf: z PAUZA gra wraca z powrotem do IGRAi nie idzie dalej do przodu, podobnie jak powrót z GAME_OVER w MENU. Bezpieczniej jest narysować wyraźne lista dozwolone przejścia Tabela „od → do”

Spoza stanuW stanieKiedy
MENUIGRAnaciśnięto „Graj”
IGRAPAUZAnacisnął pauzę
IGRAGAME_OVERkolizja / porażka
PAUZAIGRAponownie nacisnąć pauzę (odpauzować)
GAME_OVERMENUkliknął „Jeszcze raz”

Ważne, że nie każdy ruch jest dozwolony: z MENU nie możesz bezpośredni dostęp do GAME_OVER, omijając samą grę, i z PAUZA nie można trafić do GAME_OVER bezpośrednio — najpierw gra musi wrócić do IGRA. Kod, który obsługuje wprowadzanie danych i aktualizacje, musi wcześniej wyraźnie sprawdzać aktualny stan Wykonywanie czynności dozwolonych tylko w nim jest dokładnie takie samo jak w rozdziale 19 Potrzebne było oczyszczenie GameStatus dla węża.

Cztery rzeczywiste okna obok siebie: menu z podpisem i podpowieścią, rozgrywka z piłką i punktem, piłka z żółtą nakładką PAUSE na środku oraz GAME OVER ekran z końcowym wynikiem
Real Window: Cztery stany mini-gry – Menu, Gra, Pauza game over. To cztery oddzielne strzały, a nie jeden ciągły przebieg, więc liczenie nie powtarza się nawzajem.
Praktyka: stany gry i przejścia
Zeskanowanie bezpośrednio w przeglądarce – nie wymaga instalacji Pygame
Otwórz praktykę →