Глава 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()между двумя черепашками — удобный способ проверить, находятся ли они «достаточно близко» (для еды и столкновений).- Игровой цикл — функция, вызываемая снова и снова, пока не наступит условие конца игры.