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:

Python и создание 2D-игры: что нужно знать разработчику

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

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

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

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

Python и создание 2D-игры: что нужно знать разработчику

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

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

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

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

Python и создание 2D-игры: что нужно знать разработчику

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

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

Python и создание 2D-игры: что нужно знать разработчику

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

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

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

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

Python и создание 2D-игры: что нужно знать разработчикуДалее предстоит:

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

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

Python и создание 2D-игры: что нужно знать разработчику

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

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

Python и создание 2D-игры: что нужно знать разработчику

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

Python и создание 2D-игры: что нужно знать разработчику

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

Управление

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

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

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

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

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

Python и создание 2D-игры: что нужно знать разработчику

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

Python и создание 2D-игры: что нужно знать разработчику

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

Python и создание 2D-игры: что нужно знать разработчику

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

Python и создание 2D-игры: что нужно знать разработчику

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

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

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

Python и создание 2D-игры: что нужно знать разработчику

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

Python и создание 2D-игры: что нужно знать разработчику

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

Python и создание 2D-игры: что нужно знать разработчику

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

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

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

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

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

Python и создание 2D-игры: что нужно знать разработчику

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

Python и создание 2D-игры: что нужно знать разработчику

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

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