Игра работает, но главный цикл стал длинным: в нём и движение, и столкновения, и рисование — всё в одной куче. Когда кода много в одном месте, его трудно читать и легко запутаться. Профессионалы так не оставляют: они вырезают кусок и дают ему имя — заводят функцию.
Вот шесть строк, которые рисуют змейку. Дадим им имя 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)
Код читается как рассказ: «залей фон, нарисуй еду, нарисуй змейку».
draw_snake говорит, что код делает, — и не нужно читать все
строки внутри. Из таких маленьких функций собрана любая большая программа:
и игра, и сайт, и приложение в телефоне.
next_head(snake, direction), которая возвращает новую голову.
Подсказка: проверки на стену и на себя должны остаться до того, как
голова вставится в список.
Выбери ответ. Ошибёшься — 30 секунд на то, чтобы вернуться в урок и перечитать.
Зачем выносить кусок кода в функцию с именем?
Что изменилось в самой игре после того, как мы завели функции?