
Игра «Змейка» является отличным проектом для освоения базовых и промежуточных навыков программирования на Python. Она включает работу с управлением клавиатурой, логикой столкновений, генерацией случайных координат для «еды» и динамическим изменением длины змеи. Такой проект помогает закрепить понимание циклов, условных операторов и работы с коллекциями данных, такими как списки.
Для создания игры потребуется стандартная библиотека Python и модуль pygame, который позволяет обрабатывать графику, события клавиатуры и таймеры. Установка библиотеки выполняется командой pip install pygame. Важно заранее определиться с размером игрового окна, сеткой для движения змеи и скоростью обновления экрана, так как эти параметры напрямую влияют на плавность игры.
Основная логика игры строится на цикле обновления состояния: перемещение змеи, проверка столкновений с границами и самой собой, а также генерация еды в случайных координатах. Каждое действие должно быть реализовано в отдельных функциях для удобства чтения и поддержки кода. Использование функций pygame.key.get_pressed() или pygame.event.get() позволит обрабатывать нажатия клавиш для изменения направления движения змеи без задержек.
Перед запуском игры рекомендуется создать подробный план: определить размеры игрового поля, начальную длину змеи, коэффициент прироста при съедании еды и способ завершения игры. Четкая структура упрощает отладку и помогает постепенно добавлять новые элементы, такие как подсчет очков, уровни сложности или ускорение змеи по мере роста.
Как создать игру змейка на Python пошаговое руководство

Начните с установки Python версии не ниже 3.8 и библиотеки pygame, которая позволит обрабатывать графику и события клавиатуры. Установку выполняют командой pip install pygame.
Создайте главный файл проекта, например snake.py. Импортируйте необходимые модули: pygame, random и sys. Инициализируйте pygame.init() и создайте окно игры с фиксированными размерами, например 600 на 400 пикселей.
Определите основные параметры змейки: размер одного сегмента, скорость движения, начальное положение головы и направление. Сегменты змейки можно хранить в списке координат, обновляя его при каждом движении.
Создайте функции для генерации еды. Еда должна появляться случайно на игровом поле с учётом размеров сегментов змейки. При съедании еды увеличивайте длину змейки и обновляйте счёт.
Реализуйте обработку событий клавиатуры. Используйте pygame.KEYDOWN и проверку event.key для изменения направления змейки, исключая разворот на 180°.
Создайте основной игровой цикл. В цикле обновляйте позицию змейки, проверяйте столкновения с границами и собственным телом, проверяйте съедание еды и обновляйте экран через pygame.display.update(). Контролируйте частоту обновления с помощью pygame.time.Clock() для плавного движения.
Создайте таблицу для визуализации или хранения данных о рекордах:
| Имя игрока | Счёт | Дата |
|---|---|---|
| Игрок1 | 15 | 26.08.2025 |
| Игрок2 | 12 | 26.08.2025 |
Сохраняйте проект и запускайте файл python snake.py. Проверяйте работу всех функций: движение змейки, съедание еды, увеличение длины и правильное отображение счета и таблицы рекордов.
Настройка среды Python и установка необходимых библиотек

Для разработки игры «Змейка» потребуется установленная версия Python 3.8 или выше. Проверить установленную версию можно через команду:
python --version
Если Python отсутствует, загрузите установщик с официального сайта python.org/downloads и следуйте инструкциям для вашей операционной системы.
Рекомендуется создать отдельное виртуальное окружение для проекта. Это изолирует зависимости и предотвращает конфликты с другими проектами. Создание виртуального окружения выполняется командой:
python -m venv snake_env
После создания активируйте окружение:
- Windows:
snake_env\Scripts\activate - Linux/macOS:
source snake_env/bin/activate
Для работы с графикой игры потребуется библиотека pygame. Установка выполняется через pip:
pip install pygame
Для проверки корректности установки запустите Python и импортируйте библиотеку:
import pygame
print(pygame.ver)
Если версия отображается без ошибок, среда настроена правильно. Для удобства разработки можно использовать редактор кода, поддерживающий подсветку синтаксиса Python, например VS Code или PyCharm. В VS Code рекомендуется установить расширение Python, которое облегчает запуск скриптов и работу с виртуальными окружениями.
Теперь среда готова к созданию игры «Змейка», и можно переходить к написанию основного кода и реализации игрового цикла.
Создание игрового окна и базовой сетки поля
Для начала необходимо создать игровое окно с помощью библиотеки pygame. Размер окна определяется количеством клеток по горизонтали и вертикали, а также размером каждой клетки в пикселях.
Пример инициализации окна:
import pygame
pygame.init()
cell_size = 20
cols, rows = 30, 20
screen = pygame.display.set_mode((cols * cell_size, rows * cell_size))
pygame.display.set_caption("Змейка")
Создание базовой сетки поля позволяет визуально ориентироваться при движении змейки. Для этого перебираются координаты каждой клетки и рисуются линии, формирующие сетку.
Пример отрисовки сетки:
for x in range(0, cols * cell_size, cell_size):
pygame.draw.line(screen, (200, 200, 200), (x, 0), (x, rows * cell_size))
for y in range(0, rows * cell_size, cell_size):
pygame.draw.line(screen, (200, 200, 200), (0, y), (cols * cell_size, y))
Рекомендуется использовать светлые линии на темном фоне для лучшей читаемости. Цвета и толщину линий можно менять в зависимости от стиля игры.
После отрисовки сетки необходимо обновить экран:
pygame.display.update()
Таким образом, создается статическая основа игрового поля. На этом этапе можно проверить корректность размеров окна и видимость сетки перед добавлением элементов игры, таких как змейка и еда.
Программирование движения змейки и обработки клавиш

Для реализации движения змейки создайте список координат сегментов тела, где первый элемент – голова. Каждое обновление экрана смещает голову в выбранном направлении, а остальные сегменты принимают позиции предыдущих элементов. Для управления используйте переменные dx и dy, определяющие смещение по осям X и Y.
Обработка клавиш выполняется через модуль keyboard или встроенные методы tkinter. Привяжите стрелки клавиатуры к функциям изменения dx и dy. Например, при нажатии стрелки вверх dx = 0, dy = -1. Чтобы предотвратить движение в противоположную сторону, добавьте проверку текущего направления.
Основной игровой цикл включает три шага: обновление позиции головы, смещение тела и перерисовку экрана. Для увеличения скорости змейки с течением времени изменяйте задержку между кадрами. Реализация столкновений с границами или самим собой требует проверки совпадения координат головы с границами поля и сегментами тела.
Для плавности движения используйте таймеры или цикл с постоянной частотой обновления. Каждое нажатие клавиши должно сразу изменять направление движения, без пропусков кадров. Обработка клавиш должна работать асинхронно относительно основного цикла, чтобы исключить задержки в реакции змейки.
Добавление еды и увеличение длины змейки

Для добавления еды создайте переменную, которая хранит координаты еды на игровом поле. Используйте функцию случайного выбора позиции, учитывая размеры сетки и текущие координаты змейки, чтобы еда не появлялась на её теле.
Проверку столкновения змейки с едой реализуйте в основном игровом цикле. Сравнивайте координаты головы змейки с координатами еды. Если совпадение есть, увеличьте длину змейки, добавив новый элемент в её тело, и сгенерируйте новую позицию еды.
Для увеличения длины можно использовать добавление копии последнего сегмента змейки в список, который хранит все сегменты тела. Это гарантирует плавное продолжение движения без пересечений.
Обновление позиции еды должно происход после каждого её съедения. Используйте генерацию случайных чисел с проверкой на пересечение с сегментами змейки, чтобы новая еда появлялась только на свободной клетке.
Если змейка съела еду, увеличьте счётчик очков и обновите визуальное отображение длины змейки в игровом цикле, добавив сегмент в конец списка и оставив текущие координаты головы без изменений на один кадр, чтобы визуально рост был заметен.
Обработка столкновений и завершение игры

Для корректного завершения игры необходимо отслеживать два типа столкновений: с границами игрового поля и с телом змейки. Проверка границ выполняется путем сопоставления координат головы змейки с максимальными и минимальными значениями по осям X и Y.
Столкновение с телом змейки определяется сравнением координат головы с координатами всех сегментов тела. Если совпадение обнаружено, игра должна завершаться.
Пример кода для проверки столкновений головы с границами:
if head_x < 0 or head_x > WIDTH or head_y < 0 or head_y > HEIGHT:
game_over = True
Для проверки столкновений с телом:
for segment in snake[1:]:
if head_x == segment[0] and head_y == segment[1]:
game_over = True
При наступлении события game_over рекомендуется вывести сообщение о завершении игры и счет игрока. Также можно реализовать возможность перезапуска без перезапуска программы.
Важно обновлять состояние игры после каждой итерации цикла, чтобы момент столкновения фиксировался мгновенно, предотвращая движение змейки за пределы допустимых координат или через собственное тело.
Сохранение результатов и отображение счета

Для отслеживания текущего счета создайте переменную, например score, и увеличивайте её каждый раз при поедании еды змейкой. Для отображения счета на экране используйте встроенную функцию print() или модуль tkinter.Label, если игра реализована через Tkinter.
Чтобы сохранить рекорды между запусками игры, примените файл формата .txt или .json. При завершении игры откройте файл на чтение, сравните текущий результат с сохранённым максимальным, и при необходимости обновите его.
Пример записи в текстовый файл:
with open("highscore.txt", "r") as file:
highscore = int(file.read())
if score > highscore:
with open("highscore.txt", "w") as file:
file.write(str(score))
Использование простого текстового формата для хранения рекордов упрощает обмен результатами и обеспечивает совместимость с различными версиями игры, исключая необходимость в сложных базах данных.
Вопрос-ответ:
Как создать игровое окно для змейки на Python?
Для создания окна можно использовать библиотеку pygame. Сначала нужно инициализировать модуль с помощью pygame.init(), затем задать размеры окна через pygame.display.set_mode((ширина, высота)). После этого можно установить заголовок окна с помощью pygame.display.set_caption(«Змейка») и обновлять экран в игровом цикле с pygame.display.update().
Каким образом управлять движением змейки с клавиатуры?
В pygame управление реализуется через обработку событий. Используется цикл for для события pygame.event.get(), где проверяются нажатия клавиш. Например, pygame.K_UP меняет направление движения змейки вверх. Важно запретить движение в противоположную сторону, чтобы змейка не проходила сама через себя.
Как добавить еду для змейки и увеличить её длину?
Еду можно создавать случайным образом на координатах игрового поля с помощью модуля random. Когда координаты головы змейки совпадают с координатами еды, змейка увеличивает длину на один сегмент. При этом новый сегмент добавляется в конец тела, а еда перемещается на новые случайные координаты.
Как обрабатывать столкновения змейки с границами и с собственным телом?
Столкновение с границами определяется проверкой координат головы змейки: если x или y выходит за размеры окна, игра завершается. Столкновение с телом проверяется через цикл, сравнивающий координаты головы с координатами остальных сегментов змейки. При совпадении тоже происходит завершение игры.
Можно ли сохранять результаты игры и отображать текущий счёт?
Да, для отображения счёта можно создать переменную score и увеличивать её при поедании еды. Показать счёт на экране позволяет pygame.font.Font, создавая текст через render. Для сохранения рекордов удобно использовать файл (например, JSON или txt), где при завершении игры записывается новый результат, а при запуске загружается лучший результат.