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.