Rozdział 19 · Finał
Podsumowanie rozdziału
Od blokującej pętli z globalnymi zmiennymi do modelu stanu z tikiem gry, pauzą, restartem i sprawdzanymi zasadami.
Podsumowanie rozdziału 19
Co zbudowaliśmy i czego się nauczyliśmy
- Realm – Dyskretna siatka z STEP przyrostami Pozycje prawne są zawsze wielokrotnością kroku i nie są arbitralne.
- Kierunek nie jest łańcuch znaków do porównania w if/elif, lecz wektor przemieszczenia (DIRECTION_VECTORS), a zakaz zawracania o 180° jest sprawdzany względem kierunku AKTUALNEGO, a nie już żądanego kolejnego kierunku.
- Tick gry to cały łańcuch zasad (kierunek → ruch → kolizje → jedzenie → renderowanie), a rysowanie to koncepcyjnie osobny etap.
- screen.ontimer() planuje następny tik i od razu zwraca sterowanie — zamiast blokować program w pętli while z time.sleep().
- Model węża — lista logicznych pozycji; nowa głowa plus stare ciało tworzy ruch w jednym przebiegu, bez pętli z ryzykiem pomylenia kolejności.
- Zderzenie z samym sobą jest sprawdzane z ciałem PO zakręcie – w przeciwnym razie legalne wejście do klatki pustego ogona jest błędnie uznawane za stratę.
- Jawne stany READY/RUNNING/PAUSED/GAME_OVER – pauza i restart nie tylko zmieniają obraz, ale też zmieniają stan, co decyduje, czy gra w ogóle tyka.
- Generowanie (generation) chroni restart() przed łańcuchami równoległymi ontimer() jest tym samym problemem co ponowne naciśnięcie przycisku w rozdziale 16.
- GameState nie przechowuje pojedynczego obiektu Turtle – zasady gry są testowane przez zwykłą assert, bez jednego prawdziwego okna.
Most do rozdziału 20
Następne: pełnoprawny silnik gier zamiast Turtle
Snake jest zbudowany na tej samej pętli zdarzeń Tkinter- co gra rysująca z rozdziału 18 — przydatne do samouczków, ale nigdy nie Turtle zaprojektowano jako silnik gry. Następny rozdział, Pygame, wprowadza prawdziwe sprite'y, zarządzanie kolizjami na poziomie biblioteki oraz pętlę klatek zaprojektowaną specjalnie do gier w czasie rzeczywistym.