Глава 19 · Проект: «Змейка»

Проверка столкновений

Игра заканчивается при столкновении со стеной или с собственным хвостом.

Игра заканчивается при одном из двух столкновений: со стеной поля или с собственным телом.

stolknoveniya.py
def proverit_stolknoveniya():
    global igra_okonchena

    # столкновение со стеной
    if abs(golova.xcor()) > GRANICA or abs(golova.ycor()) > GRANICA:
        igra_okonchena = True

    # столкновение с собственным телом
    for segment in segmenty:
        if segment.distance(golova) < RAZMER_SHAGA / 2:
            igra_okonchena = True
abs() снова экономит код
abs(golova.xcor()) > GRANICA проверяет сразу обе стены (левую и правую) одним сравнением — вместо golova.xcor() > GRANICA or golova.xcor() < -GRANICA. Сама встроенная функция abs() знакома по разделу 5.4 — здесь она впервые работает не как «модуль числа», а как способ сравнить расстояние до границы независимо от знака координаты.
Реальное окно: голова змейки у самого правого края тёмного поля, счёт остаётся прежним
Реальное окно: голова вышла за GRANICA — proverit_stolknoveniya() выставила igra_okonchena в True.
★★ Самостоятельная задача
Ускорение игры

Увеличивайте скорость движения (уменьшайте задержку между шагами) на каждые 50 очков — игра станет постепенно сложнее.

Практика: столкновения
Модуль turtle открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →