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.
Rzeczywiste okno: głowa węża przesunęła się w prawo od środka pola o kilka kroków
Rzeczywiste okno: po kilku wywołaniach dvigat_golovu() z kierunkiem right.
Praktyka: Klucze i ruch głowy
Moduł turtle otwiera natywne okno Python – uruchamiane lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →