Rozdział 19 · Projekt: „Wąż”

Nasz wąż je!

Zjedzone jabłko dodaje segment – a każdy segment musi prawidłowo podążać za poprzednim.

Nasz wąż je!

Sprawdź, czy główka jest wystarczająco blisko jabłka (metoda) .distance() liczy odległość między dwoma żółwiami) — jeśli Tak, jabłko jest „zjadane”

eda.py
def proverit_edu():
    global schet
    if golova.distance(yabloko) < RAZMER_SHAGA:
        novoe_yabloko()
        dobavit_segment()
        schet += 10
        obnovit_tablo()

Zmuszamy całą węża do ruchu

Każdy segment ciała powinien zajmować miejsce poprzednich segment (a pierwszy to miejsce głów) — tworzy to efekt "wąż pełza jako całość" zamiast "części poruszają się niezależnie":

dobavit_segment.py
def dobavit_segment():
    novyj = turtle.Turtle()
    novyj.speed(0)
    novyj.shape("square")
    novyj.color("grey")
    novyj.penup()
    segmenty.append(novyj)
dvigat_telo.py
def dvigat_telo():
    # zacznij od ogona i przejdź do głowy, aby nie tracić pozycji po drodze
    for indeks in range(len(segmenty) - 1, 0, -1):
        x = segmenty[indeks - 1].xcor()
        y = segmenty[indeks - 1].ycor()
        segmenty[indeks].goto(x, y)

    if segmenty:
        segmenty[0].goto(golova.xcor(), golova.ycor())
Kolejność wywołań decyduje o wszystkim
dvigat_telo() jest koniecznie nazywane do dvigat_golovu() — w przeciwnym razie pierwszy segment już „odziedziczy” nowy pozycję głowy zamiast starej, a ciało zlepi się z głową w jeden punkt.
Dwa prawdziwe okna obok siebie: po lewej głowa obok jabłka, po prawej jabłko zniknęło, a pojawił się jeden szary segment ciała
Prawdziwe okno przed i po proverit_edu(): zjedzeniu jabłka, wyniku wzrosł, a segment został dodany.
Praktyka: jedzenie jabłek i poruszanie się ciałem
Moduł turtle otwiera natywne okno Python – uruchamiane lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →