🏠 Главная 🐍 Змейка
1 2 3 4 5 6 7 8
Урок 8 · наводим порядок

Функции — даём кускам имена

Что ты увидишь Точно ту же игру, что и в уроке 7 — но код стал короче и понятнее. Это называется «навести порядок» (по-взрослому — рефакторинг). Файл: step8_functions.py
⬇️ Скачать код урока

🔍 Зачем это нужно

Игра работает, но главный цикл стал длинным: в нём и движение, и столкновения, и рисование — всё в одной куче. Когда кода много в одном месте, его трудно читать и легко запутаться. Профессионалы так не оставляют: они вырезают кусок и дают ему имя — заводят функцию.

🧩 Вырезаем рисование змейки

Вот шесть строк, которые рисуют змейку. Дадим им имя draw_snake:

def draw_snake(screen, snake):
    head_rect = pygame.Rect(snake[0][0] * CELL, snake[0][1] * CELL, CELL, CELL)
    pygame.draw.rect(screen, GREEN, head_rect)
    for segment in snake[1:]:
        rect = pygame.Rect(segment[0] * CELL, segment[1] * CELL, CELL, CELL)
        pygame.draw.rect(screen, DARK_GREEN, rect)

И так же вынесем рисование яблока в draw_food. Теперь в главном цикле рисование занимает три строки вместо восьми:

screen.fill(BLACK)
draw_food(screen, food)
draw_snake(screen, snake)

Код читается как рассказ: «залей фон, нарисуй еду, нарисуй змейку».

было: 8 строк рисования в цикле стало: draw_food() + draw_snake()
💡 Зачем давать имена кускам Названный кусок легко найти, починить и переиспользовать. Имя draw_snake говорит, что код делает, — и не нужно читать все строки внутри. Из таких маленьких функций собрана любая большая программа: и игра, и сайт, и приложение в телефоне.
⚠️ Поведение игры не изменилось! Мы не добавили ничего нового — змейка играет точно так же. Мы только переставили код красивее. Это и есть «навести порядок»: тот же результат, но чище. Запусти и сравни с уроком 7 — игра одинаковая.
🎮 Попробуй сам (со звёздочкой) Вынеси подсчёт новой головы в свою функцию next_head(snake, direction), которая возвращает новую голову. Подсказка: проверки на стену и на себя должны остаться до того, как голова вставится в список.

🧠 Проверь себя

Выбери ответ. Ошибёшься — 30 секунд на то, чтобы вернуться в урок и перечитать.

Зачем выносить кусок кода в функцию с именем?

✅ Имя функции (draw_snake) говорит, ЧТО она делает. Из таких маленьких функций собрана любая большая программа.

Что изменилось в самой игре после того, как мы завели функции?

✅ Это «навести порядок» (рефакторинг): тот же результат, но короче и понятнее. Поведение игры не меняем.
← НазадУрок 7 — Игра окончена