что нужно знать разработчику OTUS
2026-03-10 18:41 Diff

Python – распространенный язык программирования, который в основном используется для небольших проектов. Он применяется в них в качестве вспомогательного инструмента. На Python пишутся бизнес-приложения и разнообразные программы. Трудно поверить, но игры с его помощью тоже создаются.

В основном Python ориентирован на программирование 2D-игр элементарного типа. Более сложные и трехмерные проекты на «чистом» Питоне написать не получится – лишь использовать его в качестве дополнительного инструмента разработчика.

Сегодня предстоит познакомиться с разработкой 2D-игры на Python поближе. Предстоит рассмотреть способы реализации поставленной задачи, изучить наиболее популярные движки для нее, а также ознакомиться с библиотеками и фреймворками, помогающими создавать игровой контент. Вниманию также будет представлен первый 2D-проект на Python – игра под названием «Змейка».

Предложенная информация ориентирована на широкий круг лиц. Она подойдет как обычным ПК-пользователям, так и IT-специалистам. Соответствующие данные помогут разобраться с планом действий при разработке 2D-игр, а также познакомит с наиболее распространенными инструментами для реализации поставленной задачи.

План по разработке игры

Разработка программного обеспечения и игр отличаются друг от друга. Каждый игровой контент начинается с составления дальнейшего плана действий. Он поможет не «тормозить» на том или ином этапе создания игры. Готовый проект с грамотной реализацией практически сразу начнет приносить прибыль.

Чтобы создавать 2D (и даже 3D) игры на Python, рекомендуется придерживаться примерно такого алгоритма действий:

  1. Определиться с языком программирования, на котором будет написан игровой проект. В рассматриваемом случае это Python. Для сложных и крупных игр нередко используют Java и C++.
  2. Изучить основы выбранного языка программирования.
  3. Ознакомиться с фреймворками и библиотеками языка, ориентированными на создание игрового контента.
  4. Выбрать способ разработки. Существуют две концепции, от определения которых немного будет меняться скорость программирования игры и ее функциональные возможности.
  5. Придумать сюжетную линию и жанр игры. На соответствующем этапе рекомендуется провести тщательный анализ целевой аудитории. Можно начать именно с этого шага – может быть, Python окажется неподходящим для запланированного проекта.
  6. Заняться разработкой механики, физики и анимации.
  7. Написать исходный код запланированного проекта.
  8. Соединить все игровые компоненты в общий проект.
  9. Организовать тестирование игры. Этот этап поможет выявить и устранить разнообразные ошибки. По мере необходимости нужно провести повторную отладку и тестирование.
  10. Выложить готовый проект в общий доступ для пользователей.

Некоторые разработчики нередко выкладывают «альфа» и «бета» версии игр в общий доступ для скачивания и эксплуатации. Такой подход особо актуален для сложного программного обеспечения. Он поможет не только выявить разнообразные ошибки в работе проекта, но и даст возможность получить обратную связь от потенциальной целевой аудитории. Конечные пользователи нередко предлагают разнообразные идеи по совершенствованию игр, которые повысили бы их интерес. Такая информация – на вес золота.

Изначально может показаться, что создание игр (даже двумерных) – это простая задача. На самом деле – это неверное утверждение. Чтобы создать развлекательное программное обеспечение, предстоит изучить много информации и освоить огромное количество навыков/инструментов. Особенно это касается разработки с нуля. Формирования физики, анимации, дизайна и программирование исходного кода нередко отнимает очень много времени.

Способы разработки

Разрабатывать игровые проекты можно несколькими способами:

  1. Через игровые движки. Этот вариант хорошо подходит новичкам.
  2. С нуля. Отличный вариант для простейших проектов и опытных разработчиков.

В случае разработки через движки необходимо скачать специальное программное обеспечение – игровой движок. В нем обычно есть все, что может пригодиться разработчику для выпуска собственного развлекательного проекта: от графики и анимации до физики и звуковых сигналов. Движок представляет собой готовый пакет решений для программирования игр. Нередко в нем есть специальные «магазины» – там доступны дополнительные инструменты. Некоторые из них распространяются бесплатно, а за какие-то придется заплатить.

Разработка через игровые движки помогает быстро создавать 2D и 3D игры, но их функциональные возможности нередко сильно ограничены. 100 % уникальный проект сделать с их помощью не представится возможным. Зато нередко именно такой подход подразумевает отсутствие у разработчика знаний языков программирования.

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

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

Unreal Engine

Unreal Engine – игровой движок, который можно считать универсальным. Он подходит для создания не только 2D, но и 3D игр. Его ориентированность – трехмерная графика.

Данный продукт поддерживает C++ в качестве основного языка программирования. Python здесь может использоваться в виде дополнительного инструмента. Также в Unreal Engine есть специальный язык – Blueprints. Он ориентирован на новичков и является визуальным языком разработки.

Unreal Engine рекомендуется использовать тогда, когда в планах создание 3D-игры. Он предлагает хорошую производительность и множество полезных инструментов. Для 2D-игр этот движок почти не используется.

Unity

Unity – это кроссплатформенный игровой движок, который появился в 2005 году. Он ориентирован не только на трехмерную графику, но и на двухмерную. Позволяет писать игры для приставок, компьютеров, а также смартфонов и планшетов.

Unity – движок, позволяющий создавать браузерные игры и контент, работающий на операционных системах iOS и Android. Нередко он используется для написания проектов с использованием технологий AR и VR.

Unity имеет следующие особенности:

  • наличие визуальной среды разработки;
  • кроссплатформенность;
  • поддержка нескольких языков программирования;
  • встроенная модульная система компонентов;
  • проблемы при подключении внешних библиотек (что необходимо для 2D-разработки на Python).

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

Разработки через библиотеки Python – лучшие библиотеки

Далее будет сделан акцент на разработке игрового программного обеспечения через библиотеки (они будут в тексте называться движками). Это оптимальное решение как для новичков, так и для опытных разработчиков. Ниже – лучшие библиотеки, которые помогут создавать 2D-игры.

Adventure lib

Adventure lib – библиотека Python, позволяющая писать текстовые игры и интерактивные истории. Данный модуль хорошо подходит для консольного программного обеспечения за счет широкого выбора встроенных инструментов. С его помощью удастся детально проработать все элементы проекта: от персонажа до игровой логики.

Adventure lib предусматривает открытый исходный код. Для него не нужно писать парсеры языка. Все это гарантирует более простое взаимодействие с движком.

Ren’Py

Ren’Py – библиотека, которая подойдет для написания 2D-новелл. Это еще один распространенный жанр 2D-игр. В таком программном обеспечении огромное значение имеет сюжет, а визуальные составляющие и звуки лишь дополняют его.

Ren’Py выделяется:

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

Ren’Py – это не классическая Python-библиотека. Она представляет собой преимущественно готовую среду игровой разработки. Установка данного продукта будет производиться не через pip install. Для ее работы необходимо инициализировать SDK Ren’Py.

Panda 3D

А вот движок, который подойдет для реализации 3D-игр. Речь идет о Panda 3D. Он предусматривает множество полезных инструментов программирования, а также идеально сочетается с различными операционными системами.

Panda 3D – это не просто библиотека, а полноценная платформа для игрового контента и всевозможных приложений. Она поддерживает интеграцию с различными библиотеками, благодаря чему работать с ней очень легко. Правда, для 2D-игр этот вариант подходит не лучшим образом.

PyCharm

PyCharm – полноценная среда разработки на Python. Она поддерживает все необходимое для разработки, отладки и тестирования программного обеспечения. Стандартные возможности PyCharm расширяются за счет плагинов.

PyCharm работает на Windows, macOS и Linux. Она имеет платную и бесплатную версии – остается выбрать подходящий вариант. Для большинства простейших 2D-игр хватит бесплатной.

PyGame

PyGame – основная библиотека, используемая для игровой разработки на Python. Данный движок будет рассмотрен отдельно. Именно на нем предстоит написать первую игру – «Змейку».

Некоторые называют PyGame фреймворком. С точки зрения разработки игрового контента — это не совсем так. PyGame просто имеет характерные черты как библиотеки, так и фреймворка. Он также называется игровым движком – готовым комплексом программного обеспечения для создания 2D- и 3D-игр.

Области использования

PyGame – это фреймворк, ориентированный на создание 2D-игр. В основном – пиксельных и платформеров. Трехмерная графика PyGame поддерживается, но не очень хорошо. Из-за этого сложный AAA-шутер с его помощью запрограммировать не представится возможным.

PyGame подойдет для создания мультимедийных приложений со сложными графическими интерфейсами. Чаще всего фреймворк встречается в игровой разработке:

  • при создании небольших инди-проектов;
  • для прототипирования более масштабных игр.

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

К его преимуществам относят:

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

Недостатками PyGame можно считать:

  • относительно небольшую функциональность – для крупного игрового проекта эта библиотека не подойдет;
  • небольшое сообщество;
  • ресурсоемкость – игры на Python отнимают немало компьютерных ресурсов.

Далее предстоит создать первую игру при помощи PyGame. Речь идет о классической «Змейке». Это всего лишь один пример того, как можно использовать рассматриваемый движок на практике с 2D-проектами.

Разработка «Змейки» – пошаговая инструкция

«Змейка» – проект, который часто используется для изучения основ разработки игрового программного обеспечения. Сегодня предстоит познакомиться с ее классической формой представления на основе PyGame.

Правила

Перед программированием проекта необходимо определить игровые правила. В случае с классической интерпретацией «Змейки» они будут следующими:

  • змейка будет собирать объекты на игровом поле – ей управляет игрок;
  • повороты возможны только на 90 градусов;
  • каждый собранный объект будет увеличивать длину змейки на +1 блок;
  • при каждом запуске змейка появляется в случайной области имеющегося игрового поля;
  • если змейка сталкивается со своим телом или границей поля, игра заканчивается – пользователю засчитывается проигрыш;
  • цель – как можно дольше продержаться в раунде и собрать максимально возможное количество объектов.

Управление будет осуществляться при помощи «стандартных» клавиш – WASD. Это связано с тем, что данные кнопки часто используются в игровых проектах. Пользователям не придется привыкать к ним с нуля.

Создание проекта и импорт библиотеки

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

Начать предстоит с создания нового проекта в редакторе кода. Для этого рекомендуется использовать PyCharm. VS Code тоже подойдет для реализации поставленной задачи.

Сначала программист должен:

  1. Запустить среду разработки.
  2. Выбрать File – New Project.
  3. Указать имя проекта и задать место хранения исходных файлов (директорию). В рассматриваемом случае проект будет называться snake, а хранится он в стандартной папке. Остальные пункты рекомендуется для начала оставить в состоянии «по умолчанию».
  4. Перейти в файл main.py. Если он отсутствует – нужно создать его.
  5. В самом начале соответствующего документа необходимо осуществить импорт библиотек для дальнейшей работы. Предстоит использовать Pygame для доступа к основным модулям Pygame и Randrange – для выбора случайного числа из заданного диапазона.

Вот код, который поможет добиться желаемого результата:

# Импортируем библиотеки

import pygame as pg

from random import randrange

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

Константы и переменные

Теперь можно начать активную работу с PyGame. Необходимо создать переменные. Некоторые из них будут константами – они являются постоянными во всем проекте. Сюда относятся размеры окна в пикселях, а также частота кадров (FPS).

Задавать константы рекомендуется сразу после импорта PyGame и других библиотек. Пишутся они в Python заглавными буквами. Если в названии более одного слова, нужно отделять слова друг от друга символом нижнего подчеркивания.

В «Змейке» будут такие константы:

  • WINDOW – отвечает за размер окна (равен 1000 пикселей);
  • FPS – кадровая частота (60 кадров в секунду).

Вот наглядный пример того, как это будет выглядеть в программном коде на PyGame:

После этого в процессе разработки игрового контента при помощи PyGame необходимо проинициализировать игровые объекты. Для этого сначала создается экранный объект через функции set_mode модуля display.

Set_mode принимает три аргумента:

  • размер окна;
  • глубину цвета;
  • флаги дополнительных параметров.

Последние два параметра могут быть заданы позже. В проекте «Змейка» на PyGame будет задано окно размером 1000 на 1000 пикселей. Константа уже есть. Ее просто необходимо умножить на 2. После этого предстоит сразу инициализировать объект, который поможет задать в проекте на PyGame частоту обновления экрана.

Можно переходить к следующему этапу – формирования игрового окна.

Создание окна проекта

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

Необходимо создать цикл while True, а в нем  установить ограничение частоты кадров, задействовав FPS:

Теперь необходимо получать события и обрабатывать их. Для этого нужно создать for-цикл и с его помощью отслеживать пользовательские действия, а затем реагировать на них. Сразу же предстоит прописать обнаружение закрытия окна. В этом случае, если объект PyGame закрывается, окно игры тоже закрывается.

Далее необходимо воспользоваться функцией fill() для закрашивания ранее созданного экрана PyGame самым светлым цветом палитры. Этот прием даст возможность размещения в программном продукте более темную змейку и элементы, которые она будет собирать. Цвет будет указан в RGB-формате.

В самом конце предстоит добавить в разработку на PyGame функцию обновления экрана – flip().

Создание змейки

Следующий этап программирования на PyGame – это создание змейки. Чтобы она могла передвигаться, необходимо воспользоваться координатами. В коде поддерживается константа WINDOWS – она обозначает размер одной стороны окна. Теперь можно задать контакты FILE_SIZE – для размера стороны одной плитки сетки. После – задать сразу всю сетку.

Далее – через кортеж предстоит внести в константу RANGE разметку всего поля. Это позволит задавать змейке координаты для передвижения и спауна «корма».

Далее предстоит:

  1. Создать функцию PyGame, которая будет определять координаты случайной плитки на поле.
  2. Обозначить лямбда-функцию get_random_position(). С ее помощью и через константу RANGE удастся получить координаты X и Y.
  3. Поставить префиксную запись – «звездочку». Она укажет на то, что в функцию randrange() нужно передать все кортежные элементы.

Выглядит это так:

Остается нарисовать змейку и задать ей параметры. Сначала создается переменная snake. В ней определяется голова змеи – через экземпляр класса Rect(). Он в PyGame отвечает за обозначение прямоугольной области. В виде параметров в классовый конструктор будут переданы координаты X и Y, высота и ширина. Сразу после этого задается случайная позиция головы змеи в проекте на PyGame на сетке игрового поля. Для этого используется функция get_random_position().

Далее нужно создать переменные для хранения длины змеи и ее сегментов – length со значением 1 и список segments (в нем размещается первый сегмент).

А вот код, с помощью которого можно отобразить змейку на экране. Пусть она будет зеленой, но более темной.

При каждом запуске программного продукта на PyGame теперь будет появляться голова змейки в случайном месте поля.

Управление

В качестве управления в «Змейке» на PyGame будут использоваться клавиши:

  • W – вперед;
  • A – поворот влево;
  • S – назад;
  • D – поворот вправо.

Сначала нужно:

  1. Вернуться к коду, где задавались параметры змейки.
  2. Создать переменную snake_dir для сохранения координат головы.
  3. Задать значение (0, 0).
  4. Задать в коде на PyGame обработку нажатий клавиш. Делается это в разделе цикла обработки событий. Нужно указать значения переменной snake_dir при нажатии.

Выглядит это так:

На каждом шаге змейка перемещается на один сегмент. Из списка сегментов каждый раз убирается лишний:

Вот код, который поможет контролировать скорость движения:

А теперь остается модифицировать часть кода с управлением:

Проект на PyGame почти готов. Осталось несколько простых шагов.

Добавление еды

Еда для змейки по своим размерам идентична голове змеи сразу после запуска раунда. Можно создать переменную food с копией головы змеи. Food будет назначена случайная точка для появления. Для этого используется функция get_random_position():

Еда отобразится на экране более темным цветом зеленого:

Теперь можно научить змейку кушать. Нужно создать условие, в котором проверяется положение головы. Если оно совпадает с едой, задается новое положение для еды, а длина змеи увеличивается на +1.

Выше – пример соответствующего кода на PyGame.

Столкновение

Последний шаг – определение столкновений. Программисту предстоит проверять положение координат головы змеи и размеров окна. Если она соприкасается с границами:

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

Выглядит это так:

Змейка в PyGame может столкнуться со своим телом. Это тоже должно привести к концу игры. Для реализации соответствующей задачи создается переменная snake_collision. Она определяет факт пересечения хоть одного прямоугольника тела змеи с ее головой. Лучше всего воспользоваться для ее реализации готовой функцией collidelist() класса Rect из PyGame. После этого предстоит добавить переменную в условие проверки столкновения с границами.

Вот и все. Классическая «Змейка» на PyGame готова. Ее исходный код включает в себя всего 78 строк. Лучше изучить PyGame, Python и игровую разработку помогут дистанционные компьютерные курсы.

Интересует Python? Добро пожаловать на курс в Otus!