Rozdział 19 · Architektura

SnakeApp: oddzielenie modelu od wizualizacji

app.state jest model gry; app.screen i Turtle-obiekty to tylko to, co jest widoczne na ekranie.

app HAS-A screen jest taki sam jak w rozdziałach 16–18

app : SnakeAppscreen = Screenstate = GameStaterng = random.Randomhead = Turtlefood_turtle = Turtle_segment_pool = list[Turtle]
app przechowuje zarówno widżety Turtle, jak i model (state) — ale ich nie myli ze sobą.
Grupa metodZa co odpowiada
bind_keysbudować obsługi klawiatury — raz, przy starcie
request_directionklucz → poproś o kierunek, teraz brak ruchu
game_tickjeden odznak → zmianie state
renderstate → Turtle (jedyne miejsce, które naprawdę rysuje)
toggle_pause / restartZarządzanie cyklem życia gry
SnakeApp nie dziedziczy po turtle.Screen
Na przykład PaintApp(tk.Tk) w rozdziale 18 dziedziczenie tutaj technicznie jest możliwe, ale nie wybierane: self.screen jest atrybutem indywidualnym, a nie samym obiektem SnakeApp. Kompozycja sprawia, że granica między „moją logiką” a „wnętrzem Turtle” jest oczywista.
Praktyka: Złóż graf obiektowy SnakeApp
Moduł turtle otwiera natywne okno Python – uruchamiane lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →