Pygame — это библиотека для создания игр на языке программирования Python. В библиотеке собран набор программных средств, помогающих разрабатывать двумерные игры.
Еще Pygame называют фреймворком. С точки зрения программирования игр на Python это немного разные понятия, но Pygame имеет черты и того, и другого. Кроме того, его можно считать игровым движком: так называют комплексы программного обеспечения для разработки игр. Правда, как движок Pygame намного проще, чем более комплексные решения вроде Unity или Unreal Engine.
Pygame основан на бесплатной библиотеке SDL, которая предназначена для создания мультимедийных приложений. Кроме официальной версии, существует ответвление Pygame Community Edition, которое развивают и улучшают энтузиасты. Хотя Pygame в целом развивается сообществом еще с 2005 года.
С помощью фреймворка можно писать игры для ПК, а также под Android — во втором случае понадобится специальный набор инструментов под названием pgs4a.
Для чего нужен Pygame
Основное назначение фреймворка — разработка двумерных игр. Обычно это довольно простые игры: пиксельные, платформеры и так далее. Трехмерную графику Pygame поддерживает плохо, и создать с его помощью сложный ААА-шутер не получится.
С помощью Pygame можно разрабатывать и другие мультимедийные приложения со сложным графическим интерфейсом — например, с анимациями. Но чаще его все же используют для игр:
- для создания небольших инди-проектов, в том числе пиксельных игр;
- для прототипирования более крупных игр — прототип пишут на Pygame, а для усложненных версий используют другой инструмент.
Это довольно простая в освоении библиотека, поэтому ее часто выбирают начинающие для обучения. Кроме того, с Pygame могут работать и состоявшиеся игровые разработчики, а также геймдизайнеры и другие специалисты, занятые в геймдеве.
Какие игры создают с помощью Pygame
В отличие от ряда других инди-движков, Pygame не может похвастаться примерами громких и известных игр. Но на нем написано довольно много проектов. Вот несколько примеров.
Super Potato Bruh — платформер про картофельного человечка, который преодолевает препятствия и побеждает врагов, чтобы спасти принцессу Латук от Мистера Черпака. Несмотря на забавное описание, игра довольно сложная, с необычной физикой и bullet hell — поджанром, в котором на героя во время игры постоянно летят разные снаряды от противника.
Drawn Down Abyss — еще один платформер, на этот раз карточный. Главный герой постепенно спускается все ниже в Бездну и пытается достигнуть ее дна, а по пути сталкивается с разными врагами. Способности героя представлены как карты, которые можно разыгрывать, чтобы защищаться или атаковать. Эту игру создал тот же разработчик, что и Super Potato Bruh: его никнейм — DaFluffyPotato. Он же разработал еще несколько красивых пиксельных игр на Pygame, в основном платформеров.
Frets on Fire — музыкальная игра, похожая на Guitar Hero. Игрок нажимает на кнопки клавиатуры, чтобы персонаж играл на гитаре. Нужно попадать в ноты и так или иначе исполнять любимые песни.
На сайте itch.io, куда разработчики выкладывают свои инди-игры, есть целая подборка проектов, написанных с использованием Pygame. Можно заметить: большинство этих игр — пиксельные, хотя движок поддерживает и другие виды графики. А самый популярный жанр, на котором пишут Pygame-игры, — платформер.
Особенности создания игр на Pygame
Видеоигра — событийно-ориентированная программа. Это значит, что программа реагирует на события: нажатие кнопки, движение мыши, истечение какого-то времени. Когда событие случается, запускается определенный код: функция или простое действие. Так игры становятся интерактивными.
Событийно-ориентированными считаются любые мультимедийные приложения, реагирующие на кнопки или нажатия мыши. Но в случае с играми возможных событий больше — например, столкновение двух объектов. Поэтому работу игры можно условно поделить на три части:
- отслеживание событий;
- изменение обстановки в игре в соответствии с событиями;
- рендеринг, то есть перерисовка экрана с учетом новой обстановки.
В Pygame есть наборы инструментов и функций для реализации всех трех частей. Например, в нем много встроенных событий, которые не нужно писать с нуля. Еще он сохраняет события, даже если они произошли во время перерисовки кадра, — они остаются в специальном списке, и разработчик может прописать на них какую-то реакцию.
При всем этом Pygame довольно низкоуровневый. В контексте разработки игр это значит, что многие возможности разработчик должен реализовать вручную. Например, готовых функций для физики игры нет — нужно прописывать реализацию самостоятельно, то есть переносить в код формулы из учебника. Как пример, где это может пригодиться, — ускорение персонажа, падение предмета по сложной траектории, баллистика и так далее.
Игровой цикл и его реализация в Pygame
Игра реализована как бесконечный цикл. В этом цикле программа проверяет события, реагирует на них и перерисовывает экран — те самые три компонента, описанные выше. Все это продолжается, пока пользователь не нажмет на «Выход». Вот как реализовать этот цикл в Pygame.
Шаблон. Сначала разработчик делает шаблон игры: описывает длину и ширину окна, указывает нужные FPS — количество кадров в секунду. Чем выше FPS, тем быстрее игровой процесс. Еще в «костяке» игры нужно инициализировать Pygame, то есть заставить его включиться. Здесь же можно создать стартовый экран, вывести на него буквы, подключить возможность добавлять звуки и включить таймер. Таймер — еще одна функция Pygame, которая позволяет считать время. А еще в этой части создается сам цикл.
FPS. Для контроля FPS есть отдельная команда. В самом начале, при создании костяка игры, можно прописать таймер — он отвечает за время, которое должно пройти до смены кадра. Желаемые FPS лучше указывать в отдельной числовой переменной:
timer = pygame.time.Clock() # создаем таймер FPS = 30 # указываем нужный FPS, тут он равен 30 кадрам в секунду
Создать таймер нужно вне бесконечного цикла, а вот отсчитывать время — уже внутри него. Для этого в самом начале цикла нужно прописать команду:
timer.tick(FPS) # объясняем Pygame, как часто обновлять экран
События. Pygame фиксирует все события в специальном списке — для доступа к нему есть команда pygame.event.get()
. Чтобы обработать событие, нужно перебрать этот список, найти там нужное и прописать реакцию на него. Например, первым делом стоит реализовать реакцию на событие pygame.QUIT
, то есть нажатие на кнопку «Выход». Нужно пройти по списку и если тип какого-то события будет равен pygame.QUIT
, отдать команду выйти из бесконечного цикла. Без этого игру нельзя будет закрыть.
Работа с отрисовкой. В Pygame есть команды, которые заливают экран цветом, рисуют на нем персонажей и делают другие вещи. Но отрисовка — медленный процесс: команда для каждого пикселя должна дойти до видеокарты. Поэтому существует двойная буферизация: пока на экране один кадр, «под капотом» из всех произошедших действий формируется другой. А когда проходит нужное количество времени для смены кадра — он меняется и показывает все произошедшие изменения. То есть экран перерисовывается не после каждого действия: за один кадр может произойти несколько изменений. В Pygame двойная буферизация автоматическая, а для смены кадра есть специальная команда pygame.flip()
. Ее нужно помещать в конце бесконечного цикла: все, что будет после нее, не отрисуется.
Какие еще инструменты есть в Pygame
Вот несколько примеров возможностей Pygame, которые можно использовать при создании игр и мультимедийных приложений.
- Модуль pygame.draw позволяет рисовать в окне игры геометрические фигуры. В нем есть набор функций для разных фигур: линий, треугольников, прямоугольников и так далее.
- Модуль pygame.image отвечает за работу с картинками, например за загрузку спрайтов персонажей. Модуль
pygame.transform
может по-разному видоизменять картинки, аpygame.font
позволяет работать со шрифтами. - Модули
pygame.mixer
иpygame.mixer.music
отвечают за звуки: первый нужен для работы со звуковыми эффектами, второй работает с фоновой музыкой. - Класс
pygame.Surface
дает возможность создавать поверхности — «слои» для отрисовки, как в графическом редакторе. Например, на «основной» поверхности фона можно создать «слои» с фигурками персонажей и рисовать их поверх фона.
Это не все: инструментов куда больше, они помогают работать со спрайтами, поверхностями, событиями и многим другим. Можно проверить самостоятельно — скачать Pygame или почитать ее документацию.
Преимущества Pygame
- Простота в освоении — поэтому библиотеку часто используют начинающие геймдевы для тренировочных проектов.
- Быстрый процесс разработки — инди-разработчик DaFluffyPotato писал, что на создание некоторых игр у него ушло меньше 48 часов.
- Удобное прототипирование — можно быстро создать простой прототип игры на Pygame, а потом реализовать более сложную версию с другими технологиями.
Недостатки Pygame
- Малая функциональность — сложную игру создать не получится.
- Относительно небольшое сообщество, меньше, чем у других движков для инди-игр.
- Ресурсоемкость — игры на Python отнимают довольно много ресурсов компьютера.
Как установить библиотеку Pygame
Библиотеки нет в стандартном наборе инструментов Python. Ее понадобится скачивать отдельно: быстрее всего это сделать с помощью менеджера пакетов pip, который предназначен для Python. Понадобится ввести в консоли команду:
python3 -m pip install -U pygame --user (для Linux)
или
py -m pip install -U pygame --user (для Windows)
После этого pip автоматически найдет в публичных репозиториях и подгрузит библиотеку. Она установится, и ей можно будет пользоваться — достаточно написать в начале Python-файла игры команду import pygame
.
Если pip не установлен, сначала его понадобится скачать.
Чтобы узнать больше о разработке игр, запишитесь на курсы — практикуйтесь с первых дней и получайте опыт в геймдеве.
0 комментариев