О чем речь? Считается, что игры на Python не пишутся, так как этот язык программирования не подходит для развлечений. Однако на самом деле существуют известные и даже крупные проекты, например, EVE Online.
На что обратить внимание? Критики выбора Python для создания игр тоже правы. Язык действительно практически не используется для написания движка, но зато регулярно применяется для создания логики, запуска скриптов.
В статье рассказывается:
- Роль Python в разработке игр
- Плюсы и минусы Python для разработки игр
- 10 библиотек Python для игр
- Алгоритм создания игры на Python
- Примеры игр, в которых используется Python
- Часто задаваемые вопросы об играх на Python
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Роль Python в разработке игр
Чтобы разобраться, для чего в их разработке используется этот популярный язык программирования, рассмотрим несколько их категорий:
- высокобюджетные AAA-проекты (triple-A) от крупных студий (например, Assassin’sCreed и Call of Duty);
- инди-игры от независимых разработчиков;
- игры для мобильных устройств.
Все их типы, включая крупные 3D проекты, работают на базовом программном обеспечении, иными словами — на игровом движке, представляющим собой своеобразный набор инструментов, который обеспечивает функционирование различных компонентов игры, включая графику, физические взаимодействия объектов в игре, звуки и так далее.
Поскольку игровой движок требует высокую производительность, Python — не лучший выбор для написания ядра игр. Он работает медленнее, чем другие языки программирования, поэтому чаще всего для движка используются С/С++, С# или другие компилируемые языки. Несмотря на это, есть примеры специальных игровых движков, полностью написанных на Python.
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Unity, Unreal Engine 4, CryEngine, Source и другие движки, написанные на С++, популярны среди известных компаний-разработчиков. Часто на этом языке ими пишутся и собственные движки, например Anvil, Fox, REDengine.
К примеру, в игровом движке Unreal Engine 4 используются С# как основа для Unity, а также С++, Blueprint и аналог JavaScript. В какой-то момент для него пробовали использовать Boo (Python с типизацией), но впоследствии от него отказались. Только один из популярных движков крупных разработчиков (Godot) использует похожий на Python язык как основной. В этом движке используется GDScript.
Игры, полностью написанные на Python, встречаются редко. Как правило, он не применяется в качестве основного языка для масштабных игр, хотя имеет все возможности для работы с различными элементами систем. Однако он часто становится вспомогательным.
Python становится хорошим решением для написания логики игры, скриптов внутри нее, а также элементов, не касающихся визуальной отрисовки: управления элементами сервера, пользовательского интерфейса, модификаций внутри игры и так далее.
Написанные на Python скрипты позволяют разделить логику игры и основные ее элементы, такие как графика, физические процессы, сетевое взаимодействие, ввод и вывод и прочее. Например, скрипты на Python обеспечивают запуск отдельных сцен, диалогов, а также взаимодействие персонажей друг с другом, бег, ходьбу, взаимодействие с NPC (Non-player character, неигровой персонаж). Такие скрипты также используются для отображения статистики противников (скорости, точности, здоровья) и разных процессов в игре.
Поскольку логика игры не требует высокой производительности из-за отсутствия слишком сложных вычислений, Python с его медлительностью с такими задачами легко справляется. А более сложные элементы, которые требуют большей скорости, как правило, выносятся в движок.
Плюсы и минусы Python для разработки игр
В последние годы Python набирает популярность. Он все чаще используется в разработке программ любых типов и сложности благодаря своей мощности и универсальности. Игры на языке Python могут быть разными: как простыми текстовыми, так и масштабными 3D-проектами.
Python относится к интерпретируемым языкам, код пишется и читается построчно, что значительно упрощает исправление ошибок и недочетов в программах. Поскольку это также скриптовый язык, разработчики легко могут сотрудничать и совершенствовать работу приложений.
Еще один важный плюс — большое количество библиотек с наборами функций и объектов для игр. Это позволяет не писать код с нуля, а пользоваться готовыми функциями при их разработке.
Игры на Python создаются как в 2D, так и в 3D-формате. Пользуясь библиотеками подпрограмм, разработчики имеют огромные возможности для творчества: начиная с разработки игр в жанре платформер или шутер до более сложных стратегических, ролевых (RPG) и игр с открытым виртуальным миром.
Библиотеки Python (например, TensorFlow, Scikit-learn) также позволяют работать с искусственным интеллектом, который позволяет делать игры с возможностью обучения и адаптации к действиям пользователя.
Кроме того, этот язык становится хорошим решением для игр с большим количеством различных функций. Его используют для написания основного кода таких движков как Panda3D и Kivy.
Python также является инструментом для упрощения процесса разработки и настройки игр, для чего созданы специальные библиотеки, с помощью которых пишутся игровые редакторы (PyQt, PySide).
Ниже рассмотрим основные преимущества, которые позволяют написать любой код игры на Python:
- Как уже отмечалось выше, среди языков программирования это один из самых мощных и универсальных. Пользуясь им, разработчики имеют доступ к большому количеству библиотек. Он легок в изучении и применении, что позволяет писать на нем коды для игр любой сложности, включая проекты с детализированной графикой.
- Может быть обеспечена максимально высокая частота кадров в играх, и проблем с запуском не возникнет. Кроме того, Python позволяет оптимизировать приложения для мобильных и других платформ.
- Благодаря популярности этого языка любой новичок имеет возможность начать разработку собственных проектов. Поддержку им может оказать большое сообщество профессионалов, которые уже давно работают с Python.
Есть также трудности, с которыми можно столкнуться, используя этот язык для разработки игр:
- Сложности со встроенной поддержкой звука и графики. Разработчики сталкиваются с проблемой нестабильности некоторых библиотек (Pygame, Pyglet) и уделяют слишком много времени попыткам изучить, как эффективно использовать их.
- Проблемы также связаны с тем, что поддержка сети не встроена.
- Скорость Python значительно ниже, чем у других языков. Разработчикам требуется больше усилий для оптимизации кода для выполнения отдельных задач.
Обобщая описанное выше, можно сказать, что скриптовые языки, такие как Python или Lua, позволяют взаимодействовать с методами игрового движка, чтобы создать игровую логику. И, наоборот, сам игровой движок может вызывать определенные функции, предусмотренные в скриптах, которые разработчик заранее определил. Это позволяет разделить аспекты игры на два уровня: игровую логику и функциональность игрового движка. Благодаря этому, вы можете вносить изменения в игровую логику, настройки игры и другие параметры, не требуя изменения всего исходного кода.
10 библиотек Python для игр
Pygame
Pygame — это библиотека для Python с открытым исходным кодом, которая помогает создавать игры. Она основана на библиотеке SDL и доступна для разных языков, таких как C, Python, Native и OpenGL.
С помощью Pygame можно создавать полноценные игры и мультимедийные программы. Эта библиотека очень удобна, так как работает на разных операционных системах и платформах.
Библиотека Pygame для Python обладает следующими особенностями:
- Поддерживает многозадачность, хорошо работает с многоядерными процессорами.
- Для основных функций используются оптимизированные коды C и Assembler, что делает ее быстрой.
- Проста в использовании и легко переносима на разные операционные системы.
- Даже небольшой объем кода может использоваться для создания приложений.
PyKyra
Это один из быстрых фреймворков, позволяющих создание игры на Python. Он базируется на библиотеке SDL (программной и документарной локализации) и движке kyra. Этот фреймворк предоставляет стандартные функции для создания игр, а также поддерживает работу с видео и звуками в форматах MPEG, такими как MP3, WAV, Ogg Vorbis, а также позволяет непосредственно работать с изображениями и имеет много других возможностей:
- Поддержка различных видов переводов: как боковые симметричные (горизонтальные), так и сверху вниз (вертикальные).
- Множество представлений подокон позволяет разделить экран, и каждое подокно может иметь свои собственные преобразования объектов.
- Быстрый движок с оптимизированными алгоритмами обеспечивает эффективный рендеринг обновлений в игре.
- Продвинутые инструменты, такие как редактор спрайтов и кодировщик, облегчают создание игровых ресурсов.
- Движок Kyra позволяет объединять альфа-значения и изменять цвета, что полезно для создания эффектов и анимаций.
- Все объекты в PyKyra встроены в удобную иерархию, что облегчает управление ими.
Pyglet
Еще одна полезная кроссплатформенная оконная и мультимедийная библиотека. Она имеет открытый исходный код. Основная сфера применения — разработка игр, приложений с ярким визуальным контентом и программ в Windows, Linux и Mac OS X.
Эта библиотека для Python имеет поддержку пользовательского интерфейса, который позволяет обрабатывать события, графику OpenGL, джойстики, загрузку и воспроизведение мультимедиа, а также работу с окнами. Она совместима с версиями Python 3.5 и выше, поддерживает работу интерпретаторов, таких как Pypy.
Pyglet используется не только для приложений и программ с открытым исходным кодом, но и для коммерческих разработок. Для последних есть некоторые ограничения.
Эта библиотека имеет следующие отличительные черты:
- предоставляет переносимое собственное управление окнами;
- включает встроенную поддержку работы с изображениями и звуком;
- не зависит от внешних источников и не требовательна для установки.
PyOpenGL
Это самая популярная кроссплатформенная библиотека для Python, которая создана для связи с OpenGL и связанными с ними API. В PyOpenGL используется стандартная библиотека C-типов для обеспечения интероперабельности.
Эта библиотека является стандартизированным инструментом Python, который может взаимодействовать с разнообразными графическими интерфейсами и звуковыми библиотеками, такими как PyGame, Raw XLib, PyQt и многими другими.
Kivy
Эта библиотека разработана с акцентом на новые пользовательские интерфейсы, такие как мультитач-приложения, и предназначена для быстрой разработки программ и приложений.
Она поддерживает множество платформ, включая Windows, Android, Raspberry Pi, Linux, OS X и iOS, и может взаимодействовать с разнообразными входными устройствами и протоколами, такими как трекпады Mac OS X, сенсорные экраны, перо, устройства ввода Linux и другие. Kivy включает в себя ускоренный графический процессор (GPU) и предоставляет более 20 виджетов, которые легко настраивать и расширять.
Читайте также!
Библиотека Kivy доступна для использования по лицензии MIT (начиная с версии 1.7.2) и LGPL 3 (для более ранних версий), что позволяет ее использовать в коммерческих продуктах. Она обладает высокой стабильностью, документированным API и руководством по программированию, что облегчает начало работы для разработчиков.
Panda3D
Это фреймворк, который работает как на языке Python, так и на C++. Представляет собой бесплатный исходный код, позволяющий создавать трехмерные игры в режиме реального времени, моделировать и визуализировать эксперименты и другие приложения. Он предоставляет разработчикам инструменты командной строки для оптимизации и обработки исходного кода и может быть использован в различных проектах.
Python-Ogre
Этот фреймворк (также известный как PyOgre) представляет собой программную платформу для создания игр, основанную на библиотеке Ogre3D. Это кроссплатформенная библиотека, которая написана на языке C++. Предоставляет гибкие и быстрые возможности для разработки увлекательных игр.
Python-Ogre состоит из двух основных библиотек: Ogre3D, которая представляет собой движок 3D-рендеринга, и CEGUi, систему встроенного графического пользовательского интерфейса (GUI). Используется для создания сцен и графики в игре. Фреймворк PyOgre используется для версий, разработанных до версии v1.05. После этого доступно множество других модулей.
Ogre также включает в себя скрипты на Python, которые облегчают импорт в него данных из Blender. Это позволяет пользователям создавать ресурсы в Blender для своих игр и легко импортировать их в Ogre. Кроме того, в этой структуре доступны и другие формы экспортеров для удобства работы с различными типами данных.
Ren’Py
Ren’Py — это кроссплатформенный фреймворк, созданный на Python и Cython, который предоставляет бесплатные инструменты для цифрового повествования. Эта платформа упрощает создание интерактивных историй, позволяя объединять слова, изображения и звуки, а также разрабатывать графические сюжеты и игры для воссоздания различных сценариев.
Благодаря поддержке языка сценариев Python, Ren’Py также позволяет создавать сложные игровые логики. Большим преимуществом этого фреймворка является его способность работать на любой операционной системе компьютера.
Cocos2d
Среда Python, которая применяется для разработки разнообразных интерактивных программ, включая игры, приложения и другое программное обеспечение, использующее кроссплатформенный графический пользовательский интерфейс (GUI). Имея открытый исходный код, этот фреймворк предоставляет разработчикам широкие возможности.
Имеет различные варианты, включая Cocos2D-x, Cocos2D-XNA и Cocos2D-JS. Он написан на языке C++, обладает минимальной платформозависимостью и предоставляет инструменты для разработки разнообразных приложений и игр. Cocos2D-JS — это версия фреймворка, основанная на JavaScript, которая сохраняет полную функциональность Cocos2D-x и предоставляет простой набор API для разработчиков.
Soya3d
Это фреймворк высокого уровня, который позволяет создавать трехмерные игры. Soya3d бесплатна, использует лицензию General Public License (GPL). Совместима с разными платформами и операционными системами, включая Windows, Mac OS X, Linux.
Фреймворк создавался с целью обеспечить простую и быструю разработку программного обеспечения и сложных игр на Python, доступную даже для новичков и любителей.
Алгоритм создания игры на Python
Давайте создадим настоящую игру, чтобы более подробно изучить работу Pygame.
Геймплей игры следующий: на экране будет присутствовать главный персонаж в виде графического объекта, управляемого мышью. С определенными интервалами времени на экране будут появляться монеты. Если персонаж пересекается с монетой или поднимает ее, игрок получает 10 очков. Постепенно монеты будут появляться все быстрее, что делает игру более сложной. Игра завершается, когда на экране находится более десяти монет или если игрок закрывает окно. Эта простая игра на Python будет выглядеть в виде кода следующим образом:
# Импортируем библиотеку и инициализируем
import pygame
# Случайное размещение монет
from random import randint
# Поиск ресурсов
from pathlib import Path
# Аннотация типов
from typing import Tuple
# Установка размеров окна
WIDTH = 800
HEIGHT = 600
# Настройка частоты появления монет (мс)
coin_countdown = 2500
coin_interval = 100
# Максимальное количество монет на экране для завершения игры
COIN_COUNT = 10
# Определяем вид графического объекта для игрока
class Player(pygame.sprite.Sprite):
def __init__(self):
«»»Инициализация вида игрока»»»
super(Player, self).__init__()
# Определение изображения персонажа
player_image = str(
Path.cwd() / «pygame» / «images» / «alien_green_stand.png»
)
# Загрузка изображения, настройка альфа-канал для прозрачности
self.surf = pygame.image.load(player_image).convert_alpha()
# Добавление прямоугольника для перемещения объекта
self.rect = self.surf.get_rect()
def update(self, pos: Tuple):
«»»Обновление позиции персонажа
Аргументы:
pos {Tuple} — (X,Y) позиция для движения персонажа
«»»
self.rect.center = pos
# Определение графического изображения для монет
class Coin(pygame.sprite.Sprite):
def __init__(self):
«»»Инициализация вида монеты»»»
super(Coin, self).__init__()
# Определение изображения монеты
coin_image = str(Path.cwd() / «pygame» / «images» / «coin_gold.png»)
# Загрузка изображения, настройка альфа-канала для прозрачности
self.surf = pygame.image.load(coin_image).convert_alpha()
# Определение позиция для старта, генерация случайной позиции
self.rect = self.surf.get_rect(
center=(
randint(10, WIDTH — 10),
randint(10, HEIGHT — 10),
)
)
# Инициализация движка
pygame.init()
# Настройка окна
screen = pygame.display.set_mode(size=[WIDTH, HEIGHT])
# Скрыть курсор мыши
pygame.mouse.set_visible(False)
# Запуск часов для фиксации времени
clock = pygame.time.Clock()
# Создание события для добавления монеты
ADDCOIN = pygame.USEREVENT + 1
pygame.time.set_timer(ADDCOIN, coin_countdown)
# Настройка списка монет
coin_list = pygame.sprite.Group()
# Инициализация счета
score = 0
# Установка звука для сбора монет
coin_pickup_sound = pygame.mixer.Sound(
str(Path.cwd() / «pygame» / «sounds» / «coin_pickup.wav»)
)
# Создание графического изображения игрока и установка на позицию старта
player = Player()
player.update(pygame.mouse.get_pos())
# Запуск цикла событий
running = True
while running:
# Проверка, нажал ли пользователь кнопку закрытия окна
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Определение условий для добавления монеты
elif event.type == ADDCOIN:
# Добавление новой монеты
new_coin = Coin()
coin_list.add(new_coin)
# Ускорение игры при наличии менее трех монет на экране
if len(coin_list) < 3:
coin_countdown -= coin_interval
# Установка ограничения скорости
if coin_countdown < 100:
coin_countdown = 100
# Остановка таймера
pygame.time.set_timer(ADDCOIN, 0)
# Запуск нового таймера
pygame.time.set_timer(ADDCOIN, coin_countdown)
# Обновление позиции персонажа
player.update(pygame.mouse.get_pos())
# Проверка, собрал ли герой монету и удаление, если да
coins_collected = pygame.sprite.spritecollide(
sprite=player, group=coin_list, dokill=True
)
for coin in coins_collected:
# Установка счета за собранные монеты
score += 10
# Воспроизведение звука для сбора монеты
coin_pickup_sound.play()
# Проверка допустимого количества монет
if len(coin_list) >= COIN_COUNT:
# Если лимит превышен, игра останавливается
running = False
# Установка цвета фона
screen.fill((255, 170, 164))
# Отрисовка монеты
for coin in coin_list:
screen.blit(coin.surf, coin.rect)
# Отрисовка персонажа
screen.blit(player.surf, player.rect)
# Вывод текущего счета
score_font = pygame.font.SysFont(«any_font», 36)
score_block = score_font.render(f»Score: {score}», False, (0, 0, 0))
screen.blit(score_block, (50, HEIGHT — 50))
# Отображение всех элементов на экране
pygame.display.flip()
# Установка скорости обновления
clock.tick(30)
# Вывод итогового результата
print(f»Game over! Final score: {score}»)
# Возврат видимости курсора
pygame.mouse.set_visible(True)
# Выход из игры
pygame.quit()
В Pygame спрайты имеют только базовый функционал, который расширяется в написанном коде с помощью подклассов для персонажей (Player) и монет (Coin). Эти объекты хранятся в self.surf и позиционируются с использованием self.rect.
Чтобы добавлять монеты на экран через равные временные интервалы, используется функция таймера time.set_timer(), который отсчитывает время до миллисекунд (coin_countdown). Событие ADDCOIN вызывает создание нового объекта Coin и добавление его в coin_list. Затем необходимо проверить, сколько монет отображается на экране: меньше трех — уменьшаем значение coin_countdown, при этом происходит остановка таймера и запуск нового.
В игре персонаж двигается и взаимодействует с монетами, собирая их. При этом мы удаляем соответствующие объекты из coin_list, обновляем счёт и воспроизводим звуковые эффекты. Также необходимо учесть очистку экрана, правильное отображение спрайтов и отображение текущего счёта.
Pygame — известная и уважаемая библиотека, но она требует от разработчика создания базовой логики спрайтов, реализацию игровых циклов и обработчиков событий. Современные игровые движки предоставляют более удобные инструменты для достижения аналогичных результатов с меньшим объемом работы.
Примеры игр, в которых используется Python
В 2002 году появилась необычная ролевая игра под названием Freedom Force. Её разработала известная студия Irrational Games (известная по таким проектам как System Shock, BioShock и SWAT 4). Игра представила нам захватывающий рассказ о команде супергероев, которые спасали Америку с юмором, пародией и шутками на самом высоком уровне. Помимо этого, она также выделялась тактической глубиной и возможностью взаимодействовать с окружающей средой. Например, на злодеев можно было нападать с помощью вырванных из асфальта столбов или даже использовать светофоры в битве.
Несмотря на все разговоры о сюжетной линии одиночных игр и лаврах Call of Duty, по интенсивности онлайн-сражений ни одна игра не смогла превзойти бренд Battlefield. В разработке нескольких игр из этой франшизы, таких как Battlefield 2, Battlefield 2142 и Battlefield Heroes, был задействован Python. Эти проекты по достоинству оценили как критики, так и пользователи. Такие игры показали, что соперничество с живыми игроками всегда приносит уникальный и более интересный опыт по сравнению со сражениями с искусственным интеллектом. О ценности сюжетных одиночных игр мы можем поговорить в другой раз.
Более того, игра не предоставляет условно-бесплатную модель, и доступ к миру EVE открывается только за определенную плату. Тем не менее EVE Online остается невероятно популярной, и одной из её самых знаменитых особенностей являются масштабные космические баталии, в которых были уничтожены корабли на сумму, достигающую 300 тысяч долларов США.
В 2008 году команда разработчиков из Турции, работая над своим «спящим хитом» Mount and Blade, воспользовалась Python. Несмотря на ограниченный бюджет, они создали игру, которая стала мечтой для многих игроков. Открытые просторы средневекового мира и высокая степень свободы привлекли огромное сообщество игроков. Mount and Blade с тех пор стала успешной серией, и новая игра под названием Bannerlord собрала в Steam большое количество фанатов. Уникальная система боевых сражений на мечах и копьях, а также возможность управлять многочисленными армиями, были бы невозможны без искусного использования языка Python.
В 2005 году мастер стратегий Сид Мейер перенес свою серию глобальных стратегий в трехмерное измерение при выходе четвертой части под названием Sid Meier’s Civilization IV. На тот момент игра выглядела и звучала потрясающе. Механика игры также была на высшем уровне, и игроки могли буквально утонуть в мире пошаговой стратегии, рассчитывая каждый свой ход. Для создания этого безоговорочного хита Сид Мейер использовал язык Python.
The Sims 4 — игра, разработчики которой продали более миллиона копий и завоевали сердца игроков, также написана на языке Python. Эта симуляция жизни поразила своей детализацией, привлекая даже тех, кто ранее не был заинтересован в видеоиграх. Продукт оставался в лидерах продаж на протяжении двух лет как в Северной Америке, так и в Европе. В Python была реализована поддержка пользовательских модификаций, и фанаты игры создали десятки, а то и сотни различных модов для The Sims 4. Это наглядно демонстрирует популярность и успех этой игры.
В 2006 году из Финляндии пришла музыкальная игра Frets on Fire, полностью написанная на Python, которая во многом напоминает Guitar Hero. Однако есть одно отличие, которое делает эту финскую игру уникальной — она имеет открытый исходный код. Это позволяет использовать Frets on Fire для изучения программирования и практики без каких-либо ограничений. И ещё один плюс — игра очень проста в освоении и не требует специализированного образования.
Часто задаваемые вопросы об играх на Python
Что сделать до начала работы над игрой?
Перед тем как приступить к работе над игрой, важно определить её жанр и цели. Учтите, будет ли это платформер, шутер от первого лица, игра с акцентом на диалоги или интеллектуальная головоломка. Понимание целей и концепции игры поможет вам начать разработку правильно.
Можно ли написать на Python ААА-игру?
На этом языке можно создать игры разной сложности, но для крупных высокобюджетных проектов он может столкнуться с ограничениями производительности. Некоторые AAA-проекты разрабатывают собственные менеджеры памяти и оптимизации для эффективной работы с ресурсами.
Читайте также!
Как написать игру на Python для смартфона?
Для создания игры на этом языке для платформы Android можно использовать инструмент Python-for-android (p4a). Этот набор инструментов позволяет разрабатывать Python-приложения и собирать их в файлы APK для публикации в Google Play Store.
на обучение «Python-разработчик» до 24 ноября
В итоге, Python вполне применим для создания игр, особенно для проектов средней и небольшой сложности. Он имеет свои ограничения, но в некоторых случаях может быть идеальным выбором. Отметим также, что Python широко используется в других областях разработки, помимо игр.