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

Полный код

Собираем все части в единый игровой цикл — и подводим итоги главы.

Соберём один игровой шаг из всех частей главы — эта функция и есть сердце игры, вызываемое снова и снова, пока игра не закончится:

igrovoj_shag.py
def igrovoj_shag():
    if igra_okonchena:
        return False

    dvigat_telo()
    dvigat_golovu()
    proverit_edu()
    proverit_stolknoveniya()
    screen.update()
    return not igra_okonchena

def glavnyj_cikl():
    global napravlenie
    napravlenie = "right"
    while igrovoj_shag():
        screen.update()
    tablo.goto(0, 0)
    tablo.write(f"Игра окончена! Счёт: {schet}", align="center", font=("Arial", 20, "bold"))

Полная, уже собранная и проверенная программа доступна отдельным файлом:

📄 projects/turtle/snake/snake.py

Запустите игру у себя
python snake.py в терминале — управление стрелками клавиатуры.
★★★ Задача повышенной сложности
Уровни сложности

Добавьте выбор уровня сложности перед стартом игры (input() из главы 8) — влияющий на начальную скорость через задержку между шагами.

Итоги

Что мы узнали в этой главе

  • screen.tracer(0) + ручной screen.update() — стандартный приём для плавной анимации в играх на Turtle.
  • screen.onkeypress() связывает клавиши со стрелками с функциями изменения направления; запрет разворота на 180° предотвращает мгновенное самостолкновение.
  • Тело змейки — список отдельных сегментов, каждый из которых следует за предыдущим; порядок обновления (сначала тело, потом голова) критически важен.
  • .distance() между двумя черепашками — удобный способ проверить, находятся ли они «достаточно близко» (для еды и столкновений).
  • Игровой цикл — функция, вызываемая снова и снова, пока не наступит условие конца игры.