Создаем игру «Змейка» на Python с помощью Pygame: шаг за шагом

Создаем игру «Змейка» на Python с помощью Pygame: шаг за шагом
Декабрь 2024
15 минут
Представьте: вы новичок, который только что осознал, что Python — это не только «змея» в переводе с английского, но и мощный инструмент для создания чего угодно: от сложных алгоритмов до увлекательных игр. Вы открываете редактор, смотрите на пустой экран и думаете: «С чего начать? Как создать что-то интересное, что действительно работает?».
Теперь вспомните знаменитую «Змейку». Простая игра, в которую многие, если не все, играли на старых кнопочных телефонах. Управляете маленькой змейкой, собираете еду, увеличиваете длину. Легко? Да. Увлекательно? Безусловно.
Создание этой игры — отличный старт для начинающего программиста. Потому что это проект с понятной логикой и четкими правилами: есть поле, змейка и еда. Также это возможность прикоснуться к реальному программированию: вы научитесь работать с графикой, анимацией, обработкой событий и подсчетом очков (score). И наконец, это весело.
Эта статья — ваше пошаговое руководство. Давайте разберемся, как написать код «Змейки» на Python, используя библиотеку Pygame. Минимум теории — максимум практики. Чтобы в результате вы не просто освоили навык разработки игр, но и получили готовый проект, которым сможете гордиться.

Установка и настройка Pygame

Pygame — это библиотека, предназначенная для написания компьютерных игр и приложений на языке Python. Она облегчает работу с графикой, анимацией, звуками и настройку взаимодействия с пользователем. Вместо того чтобы писать десятки строк сложного кода, можно использовать уже готовые функции библиотеки. Так вы сможете создавать игры быстрее и эффективнее.

В создании игры «Змейка» на Python Pygame будет отвечать за:

  • отрисовку игрового поля и всех элементов на нем,
  • реализацию управления с помощью клавиатуры,
  • создание анимации движений змейки,
  • обработку столкновений и подсчет очков.

Системные требования

Чтобы работать с Pygame, не нужен мощный компьютер. Библиотека поддерживается на Windows, macOS и Linux.

Что понадобится:

  1. Python. Установите или обновите Python до наиболее оптимальной версии, совместимой с Pygame, 3.13.0 или выше. Это можно сделать, скачав инсталлятор с официального сайта Python. Во время установки обязательно поставьте галочку напротив Add Python to PATH, чтобы не пришлось вручную настраивать переменные окружения.
  2. Среда разработки (например, VS Code или стандартный IDLE). Выберите ту, с которой вам комфортно работать.
  3. Стабильный доступ к интернету, для корректной установки всего необходимого.

Установка Pygame

Чтобы установить библиотеку, запустите терминал или командную строку и выполните:
pip install pygame

python3 -m pip install pygame
Благодаря встроенному инструменту Python — pip — этот процесс автоматизирован.

Подготовка среды разработки

После установки Pygame важно настроить рабочую среду, чтобы все компоненты корректно взаимодействовали:

  • Проверка Python.

Убедитесь, что Python успешно установлен: откройте терминал (или командную строку) и введите:
python --version
Если появится номер версии, все готово.

  • Создание проекта.
Сделайте отдельную папку для будущей игры. Это поможет структурировать все файлы — от исходного кода до изображений и звуков. Важно, чтобы Pygame была добавлена в ваш проект.

  • Проверка библиотеки.

Далее стоит проверить, корректно ли установлена Pygame. Для этого выполните:
import pygame
print(pygame.ver)
Если ошибок нет и отображается версия, значит, библиотека готова к использованию.

Также существует альтернативная проверка: python -m pygame.examples.aliens для быстрого запуска встроенного примера.

Советы для успешного старта

  1. Организация файлов: убедитесь, что вы создали четкую структуру проекта. Например, папки для кода, ресурсов (картинок, звуков) и других файлов. Это особенно важно, если в будущем вы захотите улучшить игру.
  2. Установка дополнительных библиотек: если вы планируете дополнить игру более сложными функциями, такими как анимации и спецэффекты, убедитесь, что у вас есть все необходимое. Хотя для создания «Змейки» на Python достаточно только Pygame.
  3. Резервное копирование: настройте систему сохранения кода. Это поможет восстановить проект, если что-то пойдет не так. Используйте Git или хотя бы регулярно сохраняйте копии кода на компьютере.
Создание проекта на Python в среде разработки
Все файлы, используемые при создании игры «Змейка» на Python, важно четко структурировать, чтобы в дальнейшем можно было вносить изменения в проект

Инициализация Pygame и работа с модулями

На этом этапе важно настроить все инструменты, которые позволят запустить игру, управлять элементами и создавать визуальные эффекты.

Для начала работы с Pygame необходимо импортировать модули. Это похоже на добавление инструментов в набор для творчества. Без них библиотека не сможет выполнять ключевые задачи: рисовать объекты, обрабатывать нажатие клавиш и управлять временем.

Импорт — это способ сообщить Python: «Я собираюсь использовать функции Pygame в своем проекте». Для этого понадобятся следующие команды:
import pygame
import sys
import random
Каждый модуль выполняет свою задачу:

  • pygame — это сердце нашей игры, оно отвечает за отрисовку, анимацию и взаимодействие с пользователем;
  • sys — системный модуль для корректного завершения игры при нажатии кнопки «Закрыть»;
  • random пригодится, чтобы создавать случайную еду на игровом поле.

Инициализация библиотеки

Этот процесс можно сравнить с запуском автомобиля: сначала «включаем зажигание» и готовим систему к работе. Инициализация проверяет, все ли готово для старта, и активирует основные компоненты: управление окном, графикой, событиями и звуком. Делается это одной строкой:
pygame.init()
Если инициализация прошла успешно, Pygame будет готов к дальнейшим действиям. Если же что-то пошло не так, например, система не может загрузить аудио драйвера, вы получите уведомление об ошибке, что поможет быстро найти и устранить проблему.

Какие модули нужны для создания игры

  1. pygame.display — управляет игровым окном. Через этот модуль мы создадим поле, где будет происходить действие.
  2. pygame.draw — используется для отрисовки фигур, например, змейки и еды.
  3. pygame.event — обрабатывает события, например, нажатия клавиш или закрытие окна.
  4. pygame.time — помогает задавать скорость игры, например, скорость движения змейки.
  5. pygame.font — отображает текст, например, счет игрока.

Эти модули работают как отдельные инструменты, комбинация которых позволит разработать полноценную игру.

Отрисовка игрового поля: Display и Surface

На этом этапе следует создать главное окно игры (display) — оно станет «холстом» для всех визуальных элементов. Также предстоит работать с поверхностями (surface) — это своеобразные строительные блоки графики, на которых можно рисовать, менять изображения и управлять их отображением на экране.

Что такое Display

Display — это главное окно, которое игрок видит на экране. Именно здесь будет происходить весь игровой процесс: змейка будет двигаться, еда появляться, а очки увеличиваться.

В Pygame создать display можно при помощи функции pygame.display.set_mode(). Она задает параметры окна и возвращает объект, на котором предстоит рисовать. Также можно сделать заголовок окна, с функцией set_caption().

Например, в игре «Змейка» размер игрового поля определяет пространство, где будет перемещаться змейка. Его можно настроить как квадратное поле, например, 800x800 пикселей или прямоугольное (800x600 пикселей), в зависимости от предпочтений.

Параметры, которые нужно учитывать:

  1. Ширина и высота поля: задаются в пикселях и передаются в виде кортежа — неизменяемого упорядоченного набора элементов, похожего на список. Например, (800, 600).
  2. Дополнительные флаги: можно добавить, чтобы изменять свойства окна (например, полноэкранный режим).

Как взаимодействуют Display и Surface

Отрисовка в Pygame всегда идет в два этапа:

  1. Рисуете графику на поверхностях (surface).
  2. Переносите эти поверхности на экран (display).

Настройка фона игрового поля

Одна из первых задач в отрисовке поля — задание фона. Для этого нужен метод fill() — он закрашивает поверхность выбранным цветом. Цвет задается в формате RGB — это три числа от 0 до 255, которые описывают красный, зеленый и синий цвет.
Например:

  • (0, 0, 0) для черного;
  • (255, 255, 255) для белого;
  • (34, 139, 34) для зеленого, напоминающего цвет травы.

Фон помогает выделить пространство, где будет происходить игра, и создать атмосферу.

В игре «Змейка» на Python отрисовка поля — это больше, чем просто эстетика. От правильного оформления окна и работы с поверхностями зависит то, как будут восприниматься границы поля, элементы и даже динамика игры.

Что еще нужно знать

  1. Размер поля определяет масштаб игры. Если вы выберете слишком маленькое окно, игра будет тесной и неудобной. Слишком большое — может стать сложным для восприятия.
  2. Display и Surface работают вместе. Вы можете создавать множество поверхностей, но только одна — главная (display) — покажет игроку финальную картинку.
  3. Цветовая палитра имеет значение. Фон, змейка, еда и счет должны визуально отличаться, чтобы игрок мог легко ориентироваться на поле.

Как привязать размеры к игровым элементам

Чтобы игровое пространство смотрелось аккуратно, размеры объектов (змейки, еды) лучше привязывать к сетке. Например, если каждый элемент занимает квадрат 20×20 пикселей, то поле должно делиться на такие квадраты без остатка:
# Размеры клетки
CELL_SIZE = 20
# Поле делится на клетки
GRID_WIDTH = WIDTH // CELL_SIZE
GRID_HEIGHT = HEIGHT // CELL_SIZE
Теперь вся графика будет масштабироваться пропорционально клеткам. Это упрощает работу с игровыми объектами и их позиционированием.

Работа с изображениями и прямоугольниками

В Pygame для работы с графическими элементами есть мощная система прямоугольников (Rect) и изображений (Images). Она позволяет управлять позициями, размерами и взаимодействием объектов на игровом поле.

Что такое Rect

Прямоугольники (или Rect) — это основа многих графических операций в Pygame. Они описывают границы объекта: координаты верхнего левого угла, ширину и высоту. С помощью Rect можно:

  • определять, где находится объект на экране;
  • проверять столкновения, например, когда змейка съедает еду;
  • перемещать объекты по игровому полю.

Прямоугольники можно создавать вручную или используя изображения. Если вы работаете с изображением, Rect автоматически создастся при загрузке:

  • верхний левый угол прямоугольника задает его начальное положение на экране;
  • размер прямоугольника определяется изображением или задается вручную.

Чтобы перемещать объект, нужно просто менять координаты прямоугольника. Например, голова змейки будет двигаться по игровому полю за счет изменения координат ее Rect.

Зачем нужны изображения

С ними игра становится визуально привлекательной. Вместо однотонных квадратов можно использовать графику для змейки, еды или фона. Например, добавить змейке текстуру, а вместо квадратной еды сделать иконку в виде яблока.

Чтобы загрузить изображение, воспользуйтесь опцией pygame.image.load(). Например, если вы хотите, чтобы еда выглядела как яблоко, загрузите соответствующий файл.

Изображения в Pygame должны быть следующих форматов: PNG, JPG, GIF и BMP. Также важно помнить, что они обрабатываются как прямоугольники. Даже если ваше изображение круглое, библиотека все равно видит его как прямоугольный блок.

Иногда загруженное изображение оказывается слишком большим или маленьким для игрового поля. В таких случаях его можно масштабировать с помощью функции pygame.transform.scale(). Например, если вы создали поле размером 800x600 пикселей, а изображение еды занимает 200x200, его нужно уменьшить.

Чтобы игра работала быстрее, изображения стоит преобразовать в подходящий формат для Pygame. Это можно сделать с помощью метода .convert() — для простых изображений или .convert_alpha() — если у изображения есть прозрачность.

После того как загрузите изображение, его нужно привязать к прямоугольнику, что особенно важно для сложной графики. Воспользуйтесь rect = image.get_rect().

Rect и изображения: работа в связке

  1. Прямоугольник как «контур» изображения: даже если вы добавляете в игру красивую текстуру или картинку, Pygame использует прямоугольник для управления этим изображением. Фактически, прямоугольник — это невидимая коробка вокруг вашего изображения.
  2. Рисование на экране: после загрузки изображения и его Rect вы «привязываете» прямоугольник к дисплею. Это позволяет размещать изображение в нужном месте.

Как это работает в «Змейке»?

  • Змейка состоит из нескольких прямоугольников (сегментов). Их размеры и местоположение определяются через Rect. При движении координаты этих прямоугольников обновляются, создавая иллюзию движения.
  • Еда представляет собой либо простой прямоугольник, закрашенный цветом, либо изображение. Rect определяет ее положение, а метод colliderect() помогает определить, когда змейка съест еду.
  • Границы игрового поля тоже можно задать через Rect, чтобы проверить, не столкнулась ли змейка с краем экрана.

Важные моменты

  • Размеры и пропорции: убедитесь, что размеры изображения и прямоугольника соответствуют масштабу игрового поля.
  • Оптимизация: работайте с преобразованными изображениями (convert()), чтобы избежать замедлений.
  • Проверка столкновений: используйте встроенные методы Rect, к примеру, colliderect(), чтобы упростить логику игры.

Разработка правил игры «Змейка»

Рассмотрим основные правила, которые делает игру одновременно простой и увлекательной:

  1. Змейка движется по игровому полю. Игрок управляет змейкой. Направление ее движения можно задать стрелками или другими клавишами. Важно: змейка не должна останавливаться, и игрок должен реагировать быстро.
  2. Задача игрока. Цель игры — управлять змейкой так, чтобы она собирала еду на игровом поле. С каждым съеденным объектом змейка становится длиннее, а игрок зарабатывает очки.
  3. Ограничение поля. Змейка должна оставаться в пределах поля. Если она пересекает границу экрана, игра завершается.
  4. Столкновения. Если голова змейки сталкивается с телом или границей поля, игра завершена.
  5. Еда. Она появляется случайным образом в пределах поля. После того как змейка съедает еду, сразу появляется новая. Сложность игры увеличивается с каждым новым объектом: змейка становится длиннее, а поле — теснее.
  6. Счет (Score) увеличивается после каждой съеденной еды. Чем больше очков, тем выше достижения игрока. Для интереса можно предусмотреть рейтинг с рекордами, чтобы игроки стремились побить свои или чужие результаты.
Змейка увеличивается в процессе поедания еды
Чем больше еды съедает змейка, тем она становится длиннее — а значит, повышается уровень сложности игры

Дополнительные элементы для улучшения игры

Хотя классическая версия «Змейки» имеет простые правила, их можно разнообразить:

  • Бонусы и усиления. Например, можно добавлять редкие объекты, которые дают больше очков или временно ускоряют змейку.
  • Уровни сложности. Можно предусмотреть разные режимы, где игрок выбирает размер поля, скорость змейки или частоту появления еды.
  • Препятствия. Можно добавить, например, стены, чтобы игроку пришлось продумывать маршрут движения.
  • Ограничение времени. Добавление таймера для сбора еды делает игру более динамичной и напряженной.
Подписка РБК Pro на 3 месяца
Мини-курс на выбор
Любой интенсив РБК Pro
Профессия «Python-разработчик» со скидкой до 70%

Пошаговое создание «Змейки» с нуля

Выше подробно рассмотрели основные этапы создания игры, теперь переходим к руководству, где пошагово отразим перечисленные алгоритмы действий с примерами кода.

Шаг 0. Запуск Python

Прежде чем приступить к созданию игры, убедитесь, что у вас все настроено:

  1. Установлен Python (рекомендуемая версия от 3.13.0 или выше).
  2. Установлена библиотека Pygame (команда: pip install pygame).
  3. Есть среда разработки (IDE), например, PyCharm, VS Code или просто текстовый редактор с терминалом.

Запустите среду и напишите базовый код, чтобы проверить, что все работает:

import pygame


pygame.init()


print("Добро пожаловать в змейку!")
pygame.quit()
Если код выполняется без ошибок, можно приступать к следующему шагу.

Шаг 1. Отрисовка игрового поля

Для создания игрового поля нам понадобится функция pygame.display.set_mode(). Сделаем его размером 800×600 пикселей:
import pygame
import sys


# Инициализация Pygame
pygame.init()


# Настройки игрового поля
WIDTH, HEIGHT = 800, 600  # Размеры экрана
CELL_SIZE = 20  # Размер одной ячейки
FPS = 10  # Частота обновления экрана


# Настройка цветов
FIELD_COLOR = (0, 0, 0)  # Цвет фона (черный)
SNAKE_COLOR = (0, 255, 0)  # Цвет змейки (зеленый)
FOOD_COLOR = (255, 0, 0)  # Цвет еды (красный)
TEXT_COLOR = (255, 255, 255)  # Цвет текста (белый)


# Создание окна
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Змейка на Python")
clock = pygame.time.Clock()


# Основной игровой цикл
def main():
   running = True


   while running:
       # Обработка событий
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
               pygame.quit()
               sys.exit()


       pygame.display.flip()
       clock.tick(FPS)  # Установка частоты обновления экрана


# Запуск игры
if __name__ == "__main__":
   main()
Важно: «основной цикл игры», прописанный в коде, обязательно нужно использовать при создании «Змейки» на Python, иначе она не запустится.

После выполнения кода появится окно с черным фоном — основа для отрисовки остальных элементов.

Создание игрового поля в игре «Змейка» на Python
Размер и фон игрового поля можно задать любыми в зависимости от предпочтений. На картинке представлено окно — 800х600 пикселей.

Шаг 2. Создание змейки

Главный персонаж игры будет состоять из списка сегментов, где каждый из них — это прямоугольник.
# Параметры змейки


CELL_SIZE = 20  # Размер одной ячейки
snake = [(100, 100), (80, 100), (60, 100)]  # Начальная змейка


# Отрисовка змейки
for segment in snake:
   pygame.draw.rect(screen, SNAKE_COLOR, pygame.Rect(segment[0], segment[1], CELL_SIZE, CELL_SIZE))
Так на экране отобразится змейка, состоящая из трех зеленых прямоугольников.
Создание главного персонажа в игре «Змейка»
Змейка состоит из трех сегментов, каждый из которых представляет собой прямоугольник.

Шаг 3. Описание движений змейки

Чтобы она двигалась, нам нужно обновлять координаты головы и сдвигать остальные сегменты. Для управления будем использовать стрелки:
direction = "RIGHT"  # Начальное направление


# Обработка событий
for event in pygame.event.get():
   if event.type == pygame.QUIT:
       pygame.quit()
       sys.exit()
   elif event.type == pygame.KEYDOWN:
       if event.key == pygame.K_UP and direction != "DOWN":
           direction = "UP"
       elif event.key == pygame.K_DOWN and direction != "UP":
           direction = "DOWN"
       elif event.key == pygame.K_LEFT and direction != "RIGHT":
           direction = "LEFT"
       elif event.key == pygame.K_RIGHT and direction != "LEFT":
           direction = "RIGHT"
# Обновление положения змейки
head_x, head_y = snake[0]
if direction == "UP":
   head_y -= CELL_SIZE
elif direction == "DOWN":
   head_y += CELL_SIZE
elif direction == "LEFT":
   head_x -= CELL_SIZE
elif direction == "RIGHT":
   head_x += CELL_SIZE
new_head = (head_x, head_y)
Так змейка будет двигаться, следуя заданному направлению.

Шаг 4. Установка границ игрового поля

Чтобы игра заканчивалась, если змейка сталкивается с краем поля, добавим проверку:
# Функция для проверки столкновений
def check_collision(position, snake_body):
   return (
       position in snake_body or
       position[0] < 0 or
       position[1] < 0 or
       position[0] >= WIDTH or
       position[1] >= HEIGHT
   )
Далее добавляем проверку в наш основной цикл игры:
# Проверка столкновений
if check_collision(new_head, snake):
   print(f"Игра окончена! Ваш счет: {score}")
   running = False
   break
Эта проверка завершает игру, если голова персонажа выходит за границы окна.

Шаг 5. Добавление еды для змейки

Еда для основного персонажа должна появляться на поле в случайном порядке. Для генерации ее координат нужен модуль random:
import random
food_position = (
   random.randint(0, (WIDTH // CELL_SIZE) - 1) * CELL_SIZE,
   random.randint(0, (HEIGHT // CELL_SIZE) - 1) * CELL_SIZE
)


# Отрисовка еды
pygame.draw.rect(screen, FOOD_COLOR, pygame.Rect(food_position[0], food_position[1], CELL_SIZE, CELL_SIZE))
После выполнения кода на экране можно будет увидеть красный квадрат — еду для змейки.
Создание еды для персонажа в игре «Змейка» на Python
Чтобы создать еду, которая будет отображаться на игровом поле случайно, нужно использовать стандартный модуль Python — random.

Шаг 6. Увеличение длины змейки

После того как персонаж съедает еду, его размер увеличивается на один сегмент:
# Добавление новой головы змейки
snake.insert(0, new_head)


# Проверка на съедение еды
if new_head == food_position:
   score += 1
   food_position = (
       random.randint(0, (WIDTH // CELL_SIZE) - 1) * CELL_SIZE,
       random.randint(0, (HEIGHT // CELL_SIZE) - 1) * CELL_SIZE
   )
else:
   snake.pop()  # Удаление последнего сегмента змейки
Теперь змейка будет расти, как только съест еду.

Шаг 7. Отображение и подсчет очков

Каждое поедание еды увеличивает score. Добавим отображение очков в верхний угол экрана:
# Функция для отображения счета
def draw_score(score):
   score_text = font.render(f"Score: {score}", True, TEXT_COLOR)
   screen.blit(score_text, (10, 10))
Добавим функцию подсчета очков в наш основной цикл игры:
# Отрисовка элементов игры
draw_score(score)
Теперь игрок может следить за своими достижениями.

Итоговый код и завершение проекта

Итак, мы подошли к самой важной части: объединению всех элементов, о которых говорили ранее, в единую структуру игры. Конечный код «Змейки» на Python будет охватывать все ключевые этапы: от настройки поля и создания змейки до управления движением, подсчета очков и проверки столкновений.

Перед запуском убедитесь, что Python и Pygame установлены на вашем компьютере. Как только все будет готово, выполните код, чтобы оживить вашу змейку.

Полный код игры «Змейка»

import pygame
import sys
import random


# Инициализация Pygame
pygame.init()


# Настройки игрового поля
WIDTH, HEIGHT = 800, 600  # Размеры экрана
CELL_SIZE = 20  # Размер одной ячейки
FPS = 10  # Частота обновления экрана


# Настройка цветов
FIELD_COLOR = (0, 0, 0)  # Цвет фона (черный)
SNAKE_COLOR = (0, 255, 0)  # Цвет змейки (зеленый)
FOOD_COLOR = (255, 0, 0)  # Цвет еды (красный)
TEXT_COLOR = (255, 255, 255)  # Цвет текста (белый)


# Создание окна
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Змейка на Python")
clock = pygame.time.Clock()


# Шрифт для отображения очков
font = pygame.font.Font(None, 36)


# Функция для отображения счета
def draw_score(score):
   score_text = font.render(f"Score: {score}", True, TEXT_COLOR)
   screen.blit(score_text, (10, 10))


# Функция для проверки столкновений
def check_collision(position, snake_body):
   return (
       position in snake_body or
       position[0] < 0 or
       position[1] < 0 or
       position[0] >= WIDTH or
       position[1] >= HEIGHT
   )


# Основной игровой цикл
def main():
   snake = [(100, 100), (80, 100), (60, 100)]  # Начальная змейка
   direction = "RIGHT"  # Начальное направление
   food_position = (
       random.randint(0, (WIDTH // CELL_SIZE) - 1) * CELL_SIZE,
       random.randint(0, (HEIGHT // CELL_SIZE) - 1) * CELL_SIZE
   )
   score = 0
   running = True


   while running:
       # Обработка событий
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
          pygame.quit()
               sys.exit()
           elif event.type == pygame.KEYDOWN:
               if event.key == pygame.K_UP and direction != "DOWN":
                   direction = "UP"
               elif event.key == pygame.K_DOWN and direction != "UP":
                   direction = "DOWN"
               elif event.key == pygame.K_LEFT and direction != "RIGHT":
                   direction = "LEFT"
               elif event.key == pygame.K_RIGHT and direction != "LEFT":
                   direction = "RIGHT"


       # Обновление положения змейки
       head_x, head_y = snake[0]
       if direction == "UP":
           head_y -= CELL_SIZE
       elif direction == "DOWN":
           head_y += CELL_SIZE
       elif direction == "LEFT":
           head_x -= CELL_SIZE
       elif direction == "RIGHT":
           head_x += CELL_SIZE
       new_head = (head_x, head_y)


       # Проверка столкновений
       if check_collision(new_head, snake):
           print(f"Игра окончена! Ваш счет: {score}")
           running = False
           break


       # Добавление новой головы змейки
       snake.insert(0, new_head)


       # Проверка на съедение еды
       if new_head == food_position:
           score += 1
           food_position = (
               random.randint(0, (WIDTH // CELL_SIZE) - 1) * CELL_SIZE,
               random.randint(0, (HEIGHT // CELL_SIZE) - 1) * CELL_SIZE
           )
       else:
           snake.pop()  # Удаление последнего сегмента змейки
      # Отрисовка элементов игры
       screen.fill(FIELD_COLOR)  # Заливка фона
       for segment in snake:
           pygame.draw.rect(screen, SNAKE_COLOR, pygame.Rect(segment[0], segment[1], CELL_SIZE, CELL_SIZE))
       pygame.draw.rect(screen, FOOD_COLOR, pygame.Rect(food_position[0], food_position[1], CELL_SIZE, CELL_SIZE))
       draw_score(score)


       pygame.display.flip()
       clock.tick(FPS)  # Установка частоты обновления экрана


# Запуск игры
if __name__ == "__main__":
   main()

Как запустить игру?

  1. Убедитесь, что Python и Pygame установлены.
  2. Скопируйте код в файл с расширением .py, например, snake_game.py.
  3. Откройте терминал или командную строку, перейдите в папку с файлом и выполните команду: python snake_game.py или python3 snake_game.py в зависимости от операционной системы и способа установки Python.
  4. Игра запустится, и вы сможете управлять змейкой с помощью стрелок на клавиатуре.

Поздравляем! Вы создали свою первую игру «Змейка» на Python с помощью библиотеки Pygame. Этот проект объединяет основы работы с библиотеками, управление графикой, событиями и игровой логикой.

В продемонстрированной реализации игры «Змейка» еда с небольшой вероятностью, но может отображаться поверх змейки, попробуйте это исправить с помощью дополнительной проверки.

Если захотите улучшить игру, добавьте:

  • уровни сложности (увеличивающуюся скорость);
  • таблицу рекордов;
  • препятствия или бонусные элементы.
Игры, подобные «Змейке», — это не только развлечение, но и отличный способ начать развивать навыки программирования. А чтобы глубоко погрузиться в разработку и прокачать текущий бэкграунд, пройдите курс по Python-разработке от ProductStar. С ним вы сможете освоить расширенные возможности языка Python, научитесь работать с Git, SQL, Django и другими инструментами разработчика. А после курса вы станете профессиональным программистом — сможете не только писать игры на Python, но и развиваться в других направлениях разработки.

Статья написана при участии эксперта — Никиты Четверикова, разработчика РБК Pro

Комментарии

Нажимая кнопку «Получить консультацию», вы подтверждаете согласие на обработку персональных данных в соответствии с условиями Политики конфиденциальности

Проконсультируйтесь
с карьерным специалистом

Проанализируем ваши навыки, сферу интересов и дадим рекомендации по дальнейшему профессиональному развитию

Вам может понравиться

до -70% на курсы и подарки к Новому году
Теперь вспомните знаменитую «Змейку». Простая игра, в которую многие, если не все, играли на старых кнопочных телефонах. Управляете маленькой змейкой, собираете еду, увеличиваете длину. Легко? Да. Увлекательно? Безусловно. Создание этой игры — отличный старт для начинающего программиста. Потому что это проект с понятной логикой и четкими правилами: есть поле, змейка и еда. Также это возможность прикоснуться к реальному программированию: вы научитесь работать с графикой, анимацией, обработкой событий и подсчетом очков (score). И наконец, это весело. Установка и настройка Pygame Pygame — это библиотека, предназначенная для написания компьютерных игр и приложений на языке Python. Она облегчает работу с графикой, анимацией, звуками и настройку взаимодействия с пользователем. Вместо того чтобы писать десятки строк сложного кода, можно использовать уже готовые функции библиотеки. Так вы сможете создавать игры быстрее и эффективнее. В создании игры «Змейка» на Python Pygame будет отвечать за: отрисовку игрового поля и всех элементов на нем, реализацию управления с помощью клавиатуры, создание анимации движений змейки, обработку столкновений и подсчет очков. Системные требования Чтобы работать с Pygame, не нужен мощный компьютер. Библиотека поддерживается на Windows, macOS и Linux. Что понадобится: Python. Установите или обновите Python до наиболее оптимальной версии, совместимой с Pygame, 3.13.0 или выше. Это можно сделать, скачав инсталлятор с официального сайта Python. Во время установки обязательно поставьте галочку напротив Add Python to PATH, чтобы не пришлось вручную настраивать переменные окружения. Среда разработки (например, VS Code или стандартный IDLE). Выберите ту, с которой вам комфортно работать. Стабильный доступ к интернету, для корректной установки всего необходимого. Установка Pygame Чтобы установить библиотеку, запустите терминал или командную строку и выполните: pip install pygameВ некоторых операционных системах, например, macOS, нужно выполнить команду:python3 -m pip install pygame Благодаря встроенному инструменту Python — pip — этот процесс автоматизирован. Подготовка среды разработки После установки Pygame важно настроить рабочую среду, чтобы все компоненты корректно взаимодействовали: Проверка Python. Убедитесь, что Python успешно установлен: откройте терминал (или командную строку) и введите: python --version Если появится номер версии, все готово. Создание проекта. Сделайте отдельную папку для будущей игры. Это поможет структурировать все файлы — от исходного кода до изображений и звуков. Важно, чтобы Pygame была добавлена в ваш проект. Проверка библиотеки. Далее стоит проверить, корректно ли установлена Pygame. Для этого выполните: import pygame print(pygame.ver) Если ошибок нет и отображается версия, значит, библиотека готова к использованию. Также существует альтернативная проверка: python -m pygame.examples.aliens для быстрого запуска встроенного примера. Советы для успешного старта Организация файлов: убедитесь, что вы создали четкую структуру проекта. Например, папки для кода, ресурсов (картинок, звуков) и других файлов. Это особенно важно, если в будущем вы захотите улучшить игру. Установка дополнительных библиотек: если вы планируете дополнить игру более сложными функциями, такими как анимации и спецэффекты, убедитесь, что у вас есть все необходимое. Хотя для создания «Змейки» на Python достаточно только Pygame. Резервное копирование: настройте систему сохранения кода. Это поможет восстановить проект, если что-то пойдет не так. Используйте Git или хотя бы регулярно сохраняйте копии кода на компьютере. Инициализация Pygame и работа с модулями На этом этапе важно настроить все инструменты, которые позволят запустить игру, управлять элементами и создавать визуальные эффекты. Для начала работы с Pygame необходимо импортировать модули. Это похоже на добавление инструментов в набор для творчества. Без них библиотека не сможет выполнять ключевые задачи: рисовать объекты, обрабатывать нажатие клавиш и управлять временем. Импорт — это способ сообщить Python: «Я собираюсь использовать функции Pygame в своем проекте». Для этого понадобятся следующие команды: import pygame import sys import random Каждый модуль выполняет свою задачу: pygame — это сердце нашей игры, оно отвечает за отрисовку, анимацию и взаимодействие с пользователем; sys — системный модуль для корректного завершения игры при нажатии кнопки «Закрыть»; random пригодится, чтобы создавать случайную еду на игровом поле. Инициализация библиотеки Этот процесс можно сравнить с запуском автомобиля: сначала «включаем зажигание» и готовим систему к работе. Инициализация проверяет, все ли готово для старта, и активирует основные компоненты: управление окном, графикой, событиями и звуком. Делается это одной строкой: pygame.init() Если инициализация прошла успешно, Pygame будет готов к дальнейшим действиям. Если же что-то пошло не так, например, система не может загрузить аудио драйвера, вы получите уведомление об ошибке, что поможет быстро найти и устранить проблему. Какие модули нужны для создания игры pygame.display — управляет игровым окном. Через этот модуль мы создадим поле, где будет происходить действие. pygame.draw — используется для отрисовки фигур, например, змейки и еды. pygame.event — обрабатывает события, например, нажатия клавиш или закрытие окна. pygame.time — помогает задавать скорость игры, например, скорость движения змейки. pygame.font — отображает текст, например, счет игрока. Эти модули работают как отдельные инструменты, комбинация которых позволит разработать полноценную игру. Отрисовка игрового поля: Display и Surface На этом этапе следует создать главное окно игры (display) — оно станет «холстом» для всех визуальных элементов. Также предстоит работать с поверхностями (surface) — это своеобразные строительные блоки графики, на которых можно рисовать, менять изображения и управлять их отображением на экране. Что такое Display Display — это главное окно, которое игрок видит на экране. Именно здесь будет происходить весь игровой процесс: змейка будет двигаться, еда появляться, а очки увеличиваться. В Pygame создать display можно при помощи функции pygame.display.set_mode(). Она задает параметры окна и возвращает объект, на котором предстоит рисовать. Также можно сделать заголовок окна, с функцией set_caption(). Например, в игре «Змейка» размер игрового поля определяет пространство, где будет перемещаться змейка. Его можно настроить как квадратное поле, например, 800x800 пикселей или прямоугольное (800x600 пикселей), в зависимости от предпочтений. Параметры, которые нужно учитывать: Ширина и высота поля: задаются в пикселях и передаются в виде кортежа — неизменяемого упорядоченного набора элементов, похожего на список. Например, (800, 600). Дополнительные флаги: можно добавить, чтобы изменять свойства окна (например, полноэкранный режим). Surface: рабочие поверхности Surface в Pygame — это «холст», на котором можно рисовать. Так, основной экран (screen) — тоже Surface. Главный экран (display) — это поверхность с уникальной ролью: он отвечает за отображение финального изображения. Остальные поверхности служат для подготовки графики. Например: Surface для фона: можно заранее создать поверхность с текстурой или цветом, чтобы использовать ее как задний план. Surface для еды змейки: еду можно нарисовать или загрузить как изображение, поместив на отдельную поверхность. Surface для счета: отдельная поверхность, где будет отображаться текущий score. Surface — это своего рода буфер, куда вы можете добавлять элементы, изменять их и потом отображать на экране. Это позволяет оптимизировать отрисовку: менять можно только ту часть, которая нужна, а не все поле. Как взаимодействуют Display и Surface Отрисовка в Pygame всегда идет в два этапа: Рисуете графику на поверхностях (surface). Переносите эти поверхности на экран (display). Настройка фона игрового поля Одна из первых задач в отрисовке поля — задание фона. Для этого нужен метод fill() — он закрашивает поверхность выбранным цветом. Цвет задается в формате RGB — это три числа от 0 до 255, которые описывают красный, зеленый и синий цвет. Например: (0, 0, 0) для черного; (255, 255, 255) для белого; (34, 139, 34) для зеленого, напоминающего цвет травы. Фон помогает выделить пространство, где будет происходить игра, и создать атмосферу. В игре «Змейка» на Python отрисовка поля — это больше, чем просто эстетика. От правильного оформления окна и работы с поверхностями зависит то, как будут восприниматься границы поля, элементы и даже динамика игры. Что еще нужно знать Размер поля определяет масштаб игры. Если вы выберете слишком маленькое окно, игра будет тесной и неудобной. Слишком большое — может стать сложным для восприятия. Display и Surface работают вместе. Вы можете создавать множество поверхностей, но только одна — главная (display) — покажет игроку финальную картинку. Цветовая палитра имеет значение. Фон, змейка, еда и счет должны визуально отличаться, чтобы игрок мог легко ориентироваться на поле. Как привязать размеры к игровым элементам Чтобы игровое пространство смотрелось аккуратно, размеры объектов (змейки, еды) лучше привязывать к сетке. Например, если каждый элемент занимает квадрат 20×20 пикселей, то поле должно делиться на такие квадраты без остатка: Теперь вся графика будет масштабироваться пропорционально клеткам. Это упрощает работу с игровыми объектами и их позиционированием. Работа с изображениями и прямоугольниками В Pygame для работы с графическими элементами есть мощная система прямоугольников (Rect) и изображений (Images). Она позволяет управлять позициями, размерами и взаимодействием объектов на игровом поле. Что такое Rect Прямоугольники (или Rect) — это основа многих графических операций в Pygame. Они описывают границы объекта: координаты верхнего левого угла, ширину и высоту. С помощью Rect можно: определять, где находится объект на экране; проверять столкновения, например, когда змейка съедает еду; перемещать объекты по игровому полю. Прямоугольники можно создавать вручную или используя изображения. Если вы работаете с изображением, Rect автоматически создастся при загрузке: верхний левый угол прямоугольника задает его начальное положение на экране; размер прямоугольника определяется изображением или задается вручную. Чтобы перемещать объект, нужно просто менять координаты прямоугольника. Например, голова змейки будет двигаться по игровому полю за счет изменения координат ее Rect. Зачем нужны изображения С ними игра становится визуально привлекательной. Вместо однотонных квадратов можно использовать графику для змейки, еды или фона. Например, добавить змейке текстуру, а вместо квадратной еды сделать иконку в виде яблока. Чтобы загрузить изображение, воспользуйтесь опцией pygame.image.load(). Например, если вы хотите, чтобы еда выглядела как яблоко, загрузите соответствующий файл. Изображения в Pygame должны быть следующих форматов: PNG, JPG, GIF и BMP. Также важно помнить, что они обрабатываются как прямоугольники. Даже если ваше изображение круглое, библиотека все равно видит его как прямоугольный блок. Иногда загруженное изображение оказывается слишком большим или маленьким для игрового поля. В таких случаях его можно масштабировать с помощью функции pygame.transform.scale(). Например, если вы создали поле размером 800x600 пикселей, а изображение еды занимает 200x200, его нужно уменьшить. Чтобы игра работала быстрее, изображения стоит преобразовать в подходящий формат для Pygame. Это можно сделать с помощью метода .convert() — для простых изображений или .convert_alpha() — если у изображения есть прозрачность. После того как загрузите изображение, его нужно привязать к прямоугольнику, что особенно важно для сложной графики. Воспользуйтесь "rect = image.get_rect()." Rect и изображения: работа в связке Прямоугольник как «контур» изображения: даже если вы добавляете в игру красивую текстуру или картинку, Pygame использует прямоугольник для управления этим изображением. Фактически, прямоугольник — это невидимая коробка вокруг вашего изображения. Рисование на экране: после загрузки изображения и его Rect вы «привязываете» прямоугольник к дисплею. Это позволяет размещать изображение в нужном месте. Как это работает в «Змейке»? Змейка состоит из нескольких прямоугольников (сегментов). Их размеры и местоположение определяются через Rect. При движении координаты этих прямоугольников обновляются, создавая иллюзию движения. Еда представляет собой либо простой прямоугольник, закрашенный цветом, либо изображение. Rect определяет ее положение, а метод colliderect() помогает определить, когда змейка съест еду. Границы игрового поля тоже можно задать через Rect, чтобы проверить, не столкнулась ли змейка с краем экрана. Важные моменты Размеры и пропорции: убедитесь, что размеры изображения и прямоугольника соответствуют масштабу игрового поля. Оптимизация: работайте с преобразованными изображениями (convert()), чтобы избежать замедлений. Проверка столкновений: используйте встроенные методы Rect, к примеру, colliderect(), чтобы упростить логику игры. Разработка правил игры «Змейка» Рассмотрим основные правила, которые делает игру одновременно простой и увлекательной: Змейка движется по игровому полю. Игрок управляет змейкой. Направление ее движения можно задать стрелками или другими клавишами. Важно: змейка не должна останавливаться, и игрок должен реагировать быстро. Задача игрока. Цель игры — управлять змейкой так, чтобы она собирала еду на игровом поле. С каждым съеденным объектом змейка становится длиннее, а игрок зарабатывает очки. Ограничение поля. Змейка должна оставаться в пределах поля. Если она пересекает границу экрана, игра завершается. Столкновения. Если голова змейки сталкивается с телом или границей поля, игра завершена. Еда. Она появляется случайным образом в пределах поля. После того как змейка съедает еду, сразу появляется новая. Сложность игры увеличивается с каждым новым объектом: змейка становится длиннее, а поле — теснее. Счет (Score) увеличивается после каждой съеденной еды. Чем больше очков, тем выше достижения игрока. Для интереса можно предусмотреть рейтинг с рекордами, чтобы игроки стремились побить свои или чужие результаты. Дополнительные элементы для улучшения игры Хотя классическая версия «Змейки» имеет простые правила, их можно разнообразить: Бонусы и усиления. Например, можно добавлять редкие объекты, которые дают больше очков или временно ускоряют змейку. Уровни сложности. Можно предусмотреть разные режимы, где игрок выбирает размер поля, скорость змейки или частоту появления еды. Препятствия. Можно добавить, например, стены, чтобы игроку пришлось продумывать маршрут движения. Ограничение времени. Добавление таймера для сбора еды делает игру более динамичной и напряженной. Пошаговое создание «Змейки» с нуля Выше подробно рассмотрели основные этапы создания игры, теперь переходим к руководству, где пошагово отразим перечисленные алгоритмы действий с примерами кода. Шаг 0. Запуск Python Прежде чем приступить к созданию игры, убедитесь, что у вас все настроено: 1. Установлен Python (рекомендуемая версия от 3.13.0 или выше). 2. Установлена библиотека Pygame (команда: pip install pygame). 3. Есть среда разработки (IDE), например, PyCharm, VS Code или просто текстовый редактор с терминалом. Запустите среду и напишите базовый код, чтобы проверить, что все работает. Если код выполняется без ошибок, можно приступать к следующему шагу. Шаг 1. Отрисовка игрового поля Для создания игрового поля нам понадобится функция pygame.display.set_mode(). Сделаем его размером 800×600 пикселей: Важно: «основной цикл игры», прописанный в коде, обязательно нужно использовать при создании «Змейки» на Python, иначе она не запустится. После выполнения кода появится окно с черным фоном — основа для отрисовки остальных элементов. Шаг 2. Создание змейки Главный персонаж игры будет состоять из списка сегментов, где каждый из них — это прямоугольник. Так на экране отобразится змейка, состоящая из трех зеленых прямоугольников. Шаг 3. Описание движений змейки Чтобы она двигалась, нам нужно обновлять координаты головы и сдвигать остальные сегменты. Для управления будем использовать стрелки: Так змейка будет двигаться, следуя заданному направлению. Шаг 4. Установка границ игрового поля Чтобы игра заканчивалась, если змейка сталкивается с краем поля, добавим проверку: Эта проверка завершает игру, если голова персонажа выходит за границы окна. Шаг 5. Добавление еды для змейки Еда для основного персонажа должна появляться на поле в случайном порядке. Для генерации ее координат нужен модуль random: import random После выполнения кода на экране можно будет увидеть красный квадрат — еду для змейки. Шаг 6. Увеличение длины змейки После того как персонаж съедает еду, его размер увеличивается на один сегмент: Теперь игрок может следить за своими достижениями. Итоговый код и завершение проекта Итак, мы подошли к самой важной части: объединению всех элементов, о которых говорили ранее, в единую структуру игры. Конечный код «Змейки» на Python будет охватывать все ключевые этапы: от настройки поля и создания змейки до управления движением, подсчета очков и проверки столкновений. Перед запуском убедитесь, что Python и Pygame установлены на вашем компьютере. Как только все будет готово, выполните код, чтобы оживить вашу змейку. Полный код игры «Змейка» import pygame import sys import random Как запустить игру? Убедитесь, что Python и Pygame установлены. Скопируйте код в файл с расширением .py, например, snake_game.py. Откройте терминал или командную строку, перейдите в папку с файлом и выполните команду: python snake_game.py или python3 snake_game.py в зависимости от операционной системы и способа установки Python. Игра запустится, и вы сможете управлять змейкой с помощью стрелок на клавиатуре. Поздравляем! Вы создали свою первую игру «Змейка» на Python с помощью библиотеки Pygame. Этот проект объединяет основы работы с библиотеками, управление графикой, событиями и игровой логикой. В продемонстрированной реализации игры «Змейка» еда с небольшой вероятностью, но может отображаться поверх змейки, попробуйте это исправить с помощью дополнительной проверки. Если захотите улучшить игру, добавьте: уровни сложности (увеличивающуюся скорость); таблицу рекордов; препятствия или бонусные элементы. Игры, подобные «Змейке», — это не только развлечение, но и отличный способ начать развивать навыки программирования. А чтобы глубоко погрузиться в разработку и прокачать текущий бэкграунд, пройдите курс по Python-разработке от ProductStar. С ним вы сможете освоить расширенные возможности языка Python, научитесь работать с Git, SQL, Django и другими инструментами разработчика. А после курса вы станете профессиональным программистом — сможете не только писать игры на Python, но и развиваться в других направлениях разработки. Статья написана при участии эксперта — Никиты Четверикова, разработчика РБК Pro