Rozdział 19 · Projekt: „Wąż”
Czy ekran rejestruje naciśnięcia strzałek na klawiszach?
Podłącz klawiaturę i poruszaj głową — chroniąc przed natychmiastowym obrotem o 180°.
Czy ekran rejestruje naciśnięcia strzałek na klawiszach?
Aby Turtle reagować na klawiaturę, musi ona mieć wyraźne pozwolenie na „słuchanie”screen.listen()) i przypisują konkretne klucze do funkcji za pomocą
onkeypress() jest tym samym pomysłem co .bind()
Tkinter w rozdziale 17, tylko z prostszym, bardziej wyspecjalizowanym interfejsem:
klavishi.py
def idti_vverh():
global napravlenie
if napravlenie != "down": # nie może natychmiast obrócić się o 180°
napravlenie = "up"
def idti_vniz():
global napravlenie
if napravlenie != "up":
napravlenie = "down"
#idti_vlevo() i idti_vpravo() są ułożone podobnie
screen.listen()
screen.onkeypress(idti_vverh, "Up")
screen.onkeypress(idti_vniz, "Down")
screen.onkeypress(idti_vlevo, "Left")
screen.onkeypress(idti_vpravo, "Right")
Dlaczego nie mogę po prostu obrócić się o 180°?
Jeśli wąż przesunie się w prawo, a gracz naciśnie "lewo", głowa natychmiast "przejedzie" po pierwszym segmentie jego ciała, co wyglądałoby jak natychmiastowa strata bez wyraźnego powodu. Weryfikacja
if napravlenie != "down": zabrania obracania się na miejscu, pozwalając na obrót tylko o 90°.Spraw, by głowa węża się ruszyła
dvizhenie_golovy.py
def dvigat_golovu():
if napravlenie == "up":
golova.sety(golova.ycor() + RAZMER_SHAGA)
elif napravlenie == "down":
golova.sety(golova.ycor() - RAZMER_SHAGA)
elif napravlenie == "left":
golova.setx(golova.xcor() - RAZMER_SHAGA)
elif napravlenie == "right":
golova.setx(golova.xcor() + RAZMER_SHAGA)
sety()/setx() — połowa od goto()
sety(y) zmienia jedynie współrzędną Y, pozostawiając X tym samym — wygodniej niż obliczanie obu współrzędnych przez goto() za każdym razem.
Praktyka: Klucze i ruch głowy
Moduł turtle otwiera natywne okno Python – uruchamiane lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie