Фреймворки для создания игр python
В игровом мире доступно множество популярных игр, которые были разработаны с использованием фреймворков Python и его библиотек, например, Battlefield 2, Pirates of the Caribbean и многие другие. Большинство разработчиков используют язык Python вместо других языков программирования из-за его функциональных возможностей и надстроек. С развитием индустрии разработки игр программирование на Python стало исключительным выбором разработчиков для быстрого прототипирования видеоигр.
В этой статье мы обсудим 10 лучших фреймворков Python, которые используются для разработки игр:
1. Pygame
Pygame позволяет пользователю создавать полнофункциональные игры и мультимедийные программы. Библиотека очень портативна и может работать в любой операционной системе и на любой платформе.
Особенности библиотеки pygame для python:
- В библиотеку легко входят многоядерные процессоры.
- Используются оптимизированные коды C и Assemble для основных функций.
- Pygame очень проста и портативна.
- Может работать очень мало строк кода.
2. PyKyra
- Фреймворк Pykyra разработан для поддержки боковых симметричных переводов и переводов сверху вниз.
- В Pykyra пользователь может разделить экран на представления подокна, и каждое представление подокна имеет собственное преобразование объекта.
- Движок Kyra быстр и обладает специальными кодированными алгоритмами, используемыми для рендеринга обновлений.
- Этот фреймворк включает хорошо продвинутые инструменты, такие как редактор спрайтов и кодировщик.
- Движок kyra также поддерживает объединение альфа-значений и преобразование цвета.
- Все объекты в этой структуре встроены в регулируемую иерархию.
- Pykyra также имеет функцию, с помощью которой сложные объекты можно указывать вверх и вниз всякий раз, когда они нарисованы или сопоставлены в предварительно кэшированной форме.
3. Pyglet
Pyglet позволяет использовать его как для проектов с открытым исходным кодом, так и для коммерческих проектов и разработок с небольшими ограничениями.
Особенности библиотеки Pyglet:
- Имеет портативное собственное оконное управление.
- Эта библиотека также имеет встроенную поддержку изображений и аудио.
- Библиотека Pyglet не требует никаких требований к установке, а также не имеет внешних зависимостей.
4. PyOpenGL
Это стандартизированная структура Python, которая является интероперабельной и имеет огромное количество внешних графических пользовательских интерфейсов, звуковых библиотек Python, таких как PyGame, Raw XLib, PyQt и многих других.
5. Kivy
Библиотека Kivy разработана с использованием новых пользовательских интерфейсов, например, приложений с поддержкой мультитач. Библиотека Kivy используется для быстрой разработки приложений и программного обеспечения.
Библиотека Kivy бесплатна для использования по лицензии MIT, начиная с версии 1.7.2, и LGPL 3 для предыдущих версий. Инструментарий этой библиотеки официально разработан, и пользователи могут использовать его в рыночном продукте.
Эта структура очень стабильна в использовании и имеет полностью документированный API, а также руководство по программированию, которое поможет пользователям начать ее использовать.
6. Panda3D
7. Python-Ogre
Orge применяется для разработки сцен и создания всей графики, которую пользователь хочет импортировать в игру. Фреймворк PyOrge используется для версий, разработанных до версии Orge v1.05. После этого доступно множество других модулей.
Программное обеспечение Orge также содержит скрипты Python для импорта данных из Blender в Orge. Эта структура упрощает для пользователя создание ресурсов в Blender для своей игры и может импортировать данные в Orge. В этой структуре также доступны другие формы экспортеров.
9. Cocos2d
10. Soya3d
Заключение
В наши дни игры стали активной частью повседневной жизни, и достижения в игровом мире побудили разработчиков создавать высококачественные впечатляющие игры. В этой статье мы обсудили 10 основных фреймворков Python, которые можно использовать для разработки игр, и их конкретные функции, которые полезны для разработки определенных функций и используются в видеоиграх.
Многие разработчики приходят в разработку ПО, потому что хотят создавать игры. Не все могут стать профессиональными разработчиками игр, но любой может создавать собственные игры из интереса (а может быть, и с выгодой). В этом туториале, состоящем из пяти частей, я расскажу вам, как создавать двухмерные однопользовательские игры с помощью Python 3 и замечательного фреймворка PyGame.
Мы создадим версию классической игры Breakout. Освоив этот туториал, вы будете чётко понимать, что необходимо для создания игры, познакомитесь с возможностями Pygame и напишете собственный пример игры.
Мы реализуем следующие функции и возможности:
- простые стандартные GameObject и TextObject
- простой стандартный Game object
- простая стандартная кнопка
- файл конфигурации
- обработка событий клавиатуры и мыши
- кирпичи, ракетка и мяч
- управление движением ракетки
- обработка коллизий мяча с объектами игры
- фоновое изображение
- звуковые эффекты
- расширяемая система спецэффектов
Краткое введение в программирование игр
Главное в играх — перемещение пикселей на экране и издаваемый шум. Почти во всех видеоиграх есть эти элементы. В этой статье мы не будем рассматривать клиент-серверные и многопользовательские игры, для которых требуется много сетевого программирования.
Основной цикл
Основной цикл (main loop) игры выполняется и обновляет экран через фиксированные интервалы времени. Они называются частотой кадров и определяют плавность перемещения. Обычно игры обновляют экран 30-60 раз в секунду. Если частота будет меньше, то покажется, что объекты на экране дёргаются.
Внутри основного цикла есть три основных операции: обработка событий, обновление состояния игры и отрисовка текущего состояния на экране.
Обработка событий
События в игре состоят из всего, что происходит за пределами управления кода игры, но относится к выполнению игры. Например, если в Breakout игрок нажимает клавишу «стрелка влево», то игре нужно переместить ракетку влево. Стандартными событиями являются нажатия (и отжатия) клавиш, движение мыши, нажатия кнопок мыши (особенно в меню) и события таймера (например, действие спецэффекта может длиться 10 секунд).
Обновление состояния
Сердце любой игры — это её состояние: всё то, что она отслеживает и отрисовывает на экране. В случае Breakout к состоянию относятся положение всех кирпичей, позиция и скорость мяча, положение ракетки, а также жизни и очки.
Существует также вспомогательное состояние, позволяющее управлять игрой:
- Отображается ли сейчас меню?
- Закончена ли игра?
- Победил ли игрок?
Отрисовка
Игре нужно отображать своё состояние на экране, в том числе отрисовывать геометрические фигуры, изображения и текст.
Игровая физика
В большинстве игр симулируется физическое окружение. В Breakout мяч отскакивает от объектов и имеет очень приблизительную систему физики твёрдого тела (если это можно так назвать).
В более сложных играх могут использоваться более изощрённые и реалистичные физические системы (особенно в 3D-играх). Стоит также отметить, что в некоторых играх, например, в карточных, физики почти нет, и это совершенно нормально.
ИИ (искусственный интеллект)
Во многих играх мы сражаемся с компьютерными противниками, или в них есть враги, пытающиеся нас убить. Часто они ведут себя в игровом мире так, как будто обладают разумом.
Например, враги преследуют игрока и знают о его местоположении. В Breakout нет никакого ИИ. Игрок сражается с холодными и твёрдыми кирпичами. Однако ИИ в играх часто очень прост и всего лишь следует простым (или сложным) правилам, обеспечивающим псевдоразумные результаты.
Воспроизведение звука
Воспроизведение звука — ещё один важный аспект игр. В общем случае существует два типа звука: фоновая музыка и звуковые эффекты. В Breakout я реализую только звуковые эффекты, которые воспроизводятся при различных событиях.
Фоновая музыка — это просто музыка, постоянно играющая на фоне. В некоторых играх она не используется, а в некоторых меняется на каждом уровне.
Жизни, очки и уровни
В большинстве игр игрок имеет определённое количество жизней, и когда они заканчиваются, игра завершается. Также в играх часто присутствуют очки, позволяющие понять, насколько хорошо мы играем, и дающие мотивацию к самосовершенствованию или просто хвастаться друзьям своими рекордами. Во многих играх есть уровни, которые или совершенно отличаются, или постепенно увеличивают сложность.
Знакомство с Pygame
Прежде чем приступить к реализации игры, давайте немного узнаем о Pygame, который возьмёт на себя большую часть работы.
Что такое Pygame?
Pygame — это фреймворк языка Python для программирования игр. Он создан поверх SDL и обладает всем необходимым:
- зрелостью
- хорошим сообществом
- открытым исходным кодом
- кроссплатформенностью
- качественной документацией
- множеством примеров игр
- простотой изучения
Установка Pygame
Введите pip install pygame , чтобы установить фреймворк. Если вам нужно что-то ещё, то следуйте инструкциям из раздела Getting Started в Wiki проекта. Если у вас, как и у меня, macOS Sierra, то могут возникнуть проблемы. Мне удалось установить Pygame без сложностей, и код работает отлично, но окно игры никогда не появляется.
Это станет серьёзным препятствием при запуске игры. В конце концов мне пришлось запускать её в Windows внутри VirtualBox VM. Надеюсь, ко времени прочтения этой статьи проблема будет решена.
Архитектура игры
Играм нужно управлять кучей информации и выполнять почти одинаковые операции со множеством объектов. Breakout — это небольшая игра, однако попытка управлять всем в одном файле может оказаться слишком утомительной. Поэтому я решил создать файловую структуру и архитектуру, которая подойдёт и для гораздо более крупных игр.
Структура папок и файлов
Pipfile и Pipfile.lock — это современный способ управления зависимостями в Python. Папка images содержит изображения, используемые игрой (в нашей версии будет только фоновое изображение), а в папке sound_effects directory лежат короткие звуковые клипы, используемые (как можно догадаться) в качестве звуковых эффектов.
Файлы ball.py, paddle.py и brick.py содержат код, относящийся к каждому из этих объектов Breakout. Подробнее я рассмотрю их в следующих частях туториала. Файл text_object.py содержит код отображения текста на экране, а в файле background.py содержится игровая логика Breakout.
Однако существует несколько модулей, создающих произвольный «скелет» общего назначения. Определённые в них классы можно будет использовать в других играх на основе Pygame.
Класс GameObject
GameObject представляет собой визуальный объект, знающий о том, как себя рендерить, сохранять свои границы и перемещаться. В Pygame есть и класс Sprite, исполняющий похожую роль, но в этом туториале я хочу показать вам, как всё работает на низком уровне, а не полагаться слишком активно на готовую магию. Вот как выглядит класс GameObject:
GameObject предназначен для того, чтобы быть базовым классом для других объектов. Он непосредственно раскрывает множество свойств его прямоугольника self.bounds, а в своём методе update() он перемещает объект в соответствии с его текущей скоростью. Он ничего не делает в своём методе draw() , который должен быть переопределён подклассами.
Класс Game
Класс Game — это ядро игры. Он выполняется в основном цикле. В нём есть множество полезных возможностей. Давайте разберём его метод за методом.
Метод __init__() инициализирует сам Pygame, систему шрифтов и звуковой микшер. Три разных вызова нужны, так как не во всякой игре на Pygame используются все компоненты, поэтому можно контролировать подсистемы, которые мы используем, и инициализировать только нужные с соответствующими параметрами. Метод создаёт фоновое изображение, основную поверхность (на которой всё отрисовывается) и игровой таймер с правильной частотой кадров.
Элемент self.objects хранит все игровые объекты, которые должны рендериться и обновляться. Различные обработчики управляют списками функций-обработчиков, которые должны выполняться при определённых событиях.
Методы update() и draw() очень просты. Они обходят все управляемые игровые объекты и вызывают соответствующие им методы. Если два объекта накладываются друг на друга на экране, то порядок списка объектов определяет, какой из них будет рендериться первым, а остальные будут частично или полностью его перекрывать.
Метод handle_events() слушает события, генерируемые Pygame, такие как события клавиш и мыши. Для каждого события он вызывает все функции-обработчики, которые должны обрабатывать события соответствующих типов.
Наконец, метод run() выполняет основной цикл. Он выполняется до тех пор, пока элемент game_over не принимает значение True. В каждой итерации он рендерит фоновое изображение и вызывает по порядку методы handle_events() , update() и draw() .
Затем он обновляет экран, то есть записывает на физический дисплей всё содержимое, которое было отрендерено на текущей итерации. И последнее, но не менее важное — он вызывает метод clock.tick() для управления тем, когда будет вызвана следующая итерация.
Заключение
В этой части мы изучили основы программирования игр и все компоненты, участвующие в создании игр. Также мы рассмотрели сам Pygame и узнали, как его установить. Наконец, мы погрузились в архитектуру игры и изучили структуру папок, классы GameObject и Game.
Во второй части мы рассмотрим класс TextObject , используемый для рендеринга текста на экране. Мы создадим основное окно, в том числе и фоновое изображение, а затем узнаем, как отрисовывать объекты (мяч и ракетку).
В этой статье мы рассмотрим полезные фреймворки Python для создания игр и приложений для мобильных устройств. Некоторые из этих фреймворков также поддерживают десктопные приложения или работают как автономные инструменты для сборки как для десктопных, так и для мобильных устройств. Благодаря этому вы можете использовать одну кодовую базу (с небольшими изменениями) для развертывания приложений на различных устройствах.
Kivy — это бесплатный фреймворк для создания приложений и игр. Имеет открытый исходный код. Kivy позволяет разрабатывать приложения и 2D-игры, совместимые с десктопными и мобильными устройствами. Лицензия фреймворка позволяет создавать приложения для коммерческих целей.
Основные особенности Kivy:
- поддержка мультитач-ввода,
- аппаратное ускорение графического интерфейса
- множество предопределенных GUI-виджетов
- пользовательские виджеты
- собственный уникальный язык дизайна «kv», подходящий для быстрого прототипирования
- возможность создавать пакеты для десктопных операционных систем и мобильных устройств, таких как Android и iOS.
Подробную документацию по Kivy можно почитать здесь. Kivy был разработан для многих дистрибутивов Linux. Его пакеты можно найти в дефолтных репозиториях с помощью диспетчера пакетов. Также вы можете получить последнюю версию Kivy, следуя инструкциям, доступным здесь.
BeeWare
BeeWare – еще один отличный бесплатный фреймворк с открытым исходным кодом, предназначенный для разработки приложений. По сути, он работает согласно концепции «написать один раз – развернуть везде». Вы можете использовать одну и ту же кодовую базу для создания и десктопных, и мобильных приложений.
Кроме того, приложения, разработанные с использованием BeeWare, хорошо интегрируются с разными платформами, сохраняя нативный внешний вид, характерный для платформы.
BeeWare также имеет довольно простые условия лицензирования, поэтому вы можете использовать его для коммерческих проектов.
Основные функции BeeWare включают:
- API для доступа к нативным виджетам графического интерфейса,
- API для доступа к библиотекам, специфическим для конкретных платформ
- возможность развертывания приложений на нескольких платформах.
Вы можете получить доступ к документации BeeWare здесь. Подробные инструкции по установке доступны здесь.
Pyqtdeploy
Pyqtdeploy, в отличии от Kivy и BeeWare, не является фреймворком для разработки приложений. Он предоставляет набор инструментов, позволяющих упаковать приложение PyQt для различных платформ, включая мобильные устройства.
Pyqtdeploy также может упаковывать приложения с графическим интерфейсом, CLI-приложения, а также библиотеки. Его также можно использовать для создания пакетов для Python-приложений , которые не используют библиотеки PyQt. Pyqtdeploy находится под лицензией BSD, что позволяет нам использовать его в коммерческих проектах.
Чтобы узнать больше о методах упаковки Pyqtdeploy и процессе развертывания, просмотрите онлайн-документацию, которая доступна здесь. Подробные инструкции по установке можно найти здесь.
Python-for-android
Python-for-android или p4a – это набор инструментов, которые можно использовать для создания Python-приложений для платформы Android.
Этот фреймворк имеет надежный набор инструментов для сборки, позволяющий создавать файлы «apk», которые вы можете опубликовать в Play Store.
Python-for-android в основном разрабатывался как упаковочная утилита для приложений Kivy. Однако теперь он значительно вырос и позволяет упаковывать и другие приложения на основе Python.
Основные функции Python-for-android включают поддержку создания пакетов для нескольких архитектур, рецепты сборки, поддержку упаковки приложений, разработанных с использованием библиотек SDL2, и многое другое.
Вы можете узнать больше о методах упаковки здесь. Инструкции по установке доступны здесь.
Ren’Py
Ren’Py – это ещё один бесплатный инструмент с открытым исходным кодом, который можно использовать для разработки визуальных романов как для компьютеров, так и для мобильных устройств (Android и iOS).
Основанный на Python, Ren’Py имеет графический инструмент управления проектами. Также в нем можно найти утилиты командной строки для разработки собственных игр. Более того, вы можете использовать данный инструмент для создания различных симуляторов и ролевых игр при помощи встроенной системы сценариев.
Официальная документация по Ren’Py доступна здесь. Вы можете установить его на свой компьютер, следуя инструкциям, которые можно найти здесь.
Заключение
Python – чрезвычайно универсальный язык программирования с огромной библиотекой встроенных модулей. Его можно использовать для разработки приложений практически под любой тип требований, для любой области. К сожалению, в сфере мобильной разработки Python не очень популярен. Здесь он не достигает тех высот, которые доступны другим языкам. Фреймворков Python для создания игр и мобильных приложений очень мало. Но все же они есть. И именно о них мы рассказали в сегодняшней статье.
Фреймворки значительно упрощают жизнь разработчиков, предлагая четкую структуру для процесса разработки приложений. Они помогают избавиться от мелких задач и проблем, сокращая время разработки и позволяя больше сосредоточиться на логике приложений.
Команда Web Academy собрала для вас ТОП 9 лучших фреймворков для программирования на Python. И не важно, насколько вы опытный разработчик – все они просты в изучении, главное помнить, что выбор лучшего фреймворка зависит от конкретных задач проекта. Таким образом, один фреймворк лучше подойдет для одних задач, другой – для других.
Итак, перейдем к девятке лучших Рython- фреймворков, которые, вам определенно стоит освоить в этом году.
Этот веб-фреймворк, является одним из самых популярных веб-фреймворков на Python. Он позволяет сделать разработку простой, код чистым, а освоение-быстрым. Django поддерживает работу с основными базами данных — MySQL, SQLite, PostgreSQL и Oracle, но сторонние драйверы также позволяют использовать и другие. Он предоставляет уровень абстракции, который избавляет от необходимости писать SQL-запросы для получения/сохранения данных в базу данных. Особенности Django - это его аутентификация, маршрутизация URL-адресов, механизм шаблонов, объектно-реляционный картограф (ORM) и миграция схем базы данных (Django v.3.0 +) .
Если вы выберите Django, вам не придется волноваться о нехватке возможностей. Вы получите все, что только можно ожидать от этого фреймворка: от движка шаблонов до объектно-реляционного отображения. И самое главное, что он бесплатный и имеет открытый исходный код.
Pyramid – это полностью «open-source» каркас для создания Python-приложений. Его основная цель - сделать как можно больше с минимальной сложностью. Самой яркой особенностью Pyramid является его способность хорошо работать как с небольшими, так и с большими приложениями. Он отлично подходит для однофайловых приложений, а еще он хорош в URL-адресах, расширении конфигурации, тестировании и документации по данным. Он прост и минималистичен.
Лучше всего он подходит для тех, кто занимается разработкой API, а также прототипированием и разработкой крупных веб-приложений, таких как CMS. А еще он имеет открытый исходный код и совершенно бесплатный.
Лучше всего подходит для веб-разработчиков, которые хотят использовать самые лучшие практики, добиться быстрого прототипирования и создавать автономные приложения.
Bottle — очень легкий фреймворк и помещается всего в один файл. Несмотря на свою минималистичность, Bottle предоставляет довольно широкие возможности, которых на все 100% хватит для мелких и средних проектов.
Это идеальное решение для прототипирования, изучения организации веб-фреймворков и создания простых приложений.
Twisted – событийно-управляемый сетевой движок, написанный на Python и выпускаемый совершенно свободно под лицензией MIT. Twisted очень быстрый, но он не подходит для разработки традиционных веб-приложений. Если решили сделать что-то, связанное с низкоуровневым программированием, то смело выбрирайте Twisted. Работает на базе Python 2, а постоянно развивающийся подкомплект инструментов – на Python 3.
Этот фреймворк построен на базе deferred (механизм, с помощью которого работает асинхронная архитектура) А еще он бесплатный и имеет открытый исходный код.
Если вы хотите создать приложение на фреймворке типа Django или Flask, но вам нужна повышенная производительность, выберите Tornado. При правильном создании архитектуры приложений он уверенно справится с десятками тысяч задач.
Kivy — это библиотека Python, имеющая открытый код, предназначенная для разработки кроссплатформенных GUI приложений. Она позволяет писать вам приложения с графическим интерфейсом на чистом Python, которые работают на основных платформах (Windows, Linux, MacOS, Android, IOS).
Если вы можете работать с не нативным набором инструментов пользовательского интерфейса в своих приложениях, Kivy — отличный выбор. Этот фреймворк позволяет вам писать мобильные приложения, используя свои навыки программирования на Python, без необходимости изучать другой язык для определённой платформы, например, Swift от Apple.
Python – это очень популярное и быстрое решение, которое во многих случаях обходит аналогичные скриптовые языки. Он очень доступен, т.к. в сети полно сайтов, форумов, документов и обучающих статей, электронных книг, в том числе посвященных непосредственно разработке игр.
Для основы стоит рассмотреть такие библиотеки как: PyOgre, PySFML, PySDL и Allegro.
Для разработки 2D-проектов я бы рекомендовал ознакомиться с такими достаточно популярными движками и наборами инструментов: PyGame, Pyglet, Python Arcade Library, Ren’Py, Cocos2D, FIFE, Ignifuga Game Engine.
Например, Ren’Py часто называют конструктором игр, ведь на нём даже начинающие игроделы с лёгкостью делают собственные игрушки в жанре визуальная новелла. Сказывается то, что он заточен под жанр, а для создания такой игры не требует обширных знаний в программировании на Python, ведь игра в основном состоит из набора диалогов, сцен с фоном и персонажами, переход между которыми происходит от выбранного игроком диалога. Питон ещё используется, например, в Metagam – это конструктор браузерных MMORPG старого типа. Для 3D MMO разрабатывался движок World Forge, но он, судя по всему, уже заглох несколько лет как.
Для разработки 3D-игр я бы рекомендовал следующие популярные решения: Panda3D SDK, Ursina Engine (поддерживает Python 3.6), Blender Game Engine, UPBGE и Delta3D Engine.
Также хотелось бы отметить, что сейчас набирающий популярность игровой 2D/3D-движок Godot использует для программирования сценариев собственный скриптовый ЯП GDScript - это несложный и достаточно лаконичный синтаксис, основанный на Python.
Порекомендую ещё проект KidsCanCode – его задача заключается в том, чтобы научить детей программировать как можно раньше, и в процессе создания игр. Ранее они делали в основном учебники по Python и PyGame, но в последние годы перешли на Godot. Они также осуществляют на своем сайте «Рецепты Godot» - набор уроков о том, как выполнять определенные задачи в Godot и GDScript.
Для игр с нетребовательной трёхмерной графикой, если вы не гонитесь за современными визуальными эффектами, я бы посоветовал ещё WorldSim3D – отечественный движок, базируемый на исходниках открытого движка Irrlicht. Ранее в WorldSim3D использовал только FreeBASIC, но с версии 1.12 появилась поддержка других языков: C/C++, D, Pascal и Python, конечно же.
Читайте также: