Создание игры на Python

Игра на Pygame с нуля / Урок #1 – Разработка игр на Python для начинающих
Python – многофункциональный язык, что позволяет создавать сайты, программы и даже игры. Вы научитесь разрабатывать игры на Pygame с нуля на базе языка Питон. Ваша игра будет обладать всем необходимым: интерфейс, меню, анимации, физика, картинки и прочее.
Видеоурок
Полезные ссылки:
- Видео на тему работы компьютера ;
- Курс по языку Python ;
- Официальный сайт Python ;
- Программа PyCharm ;
- Установка PyGame .
Информация про Pygame
Сама библиотека впервые опубликована в 2000 году. Задумка библиотеки состояла в том, чтобы дать возможность любому разработчику построить свою игру при использовании языка программирования Python.
По прошествию времени можно сказать что библиотека оправдала ожидания и сейчас на ее основе вы действительно можете построить игру, при чем сделать это относительно быстро и качество.
Приложения написанные на PyGame могут спокойно работать на Андроид и на ПК. Поддержки iOS здесь нет по причине закрытости самой платформы iOS для сторонних разработчиков. Вы можете прописать код один раз, создать игру и позже запускать ее как на компьютере, так и на Android устройствах.
Как делают игры?
Поскольку в курсе мы будем разрабатывать игры, то логично сперва понять как вообще работают игры на ПК, телефонах или других устройствах.
Ранее мы уже делали видео с детальным разбором того как работает компьютер и каким образом он позволяет отобразить изображение на экран, а впоследствии видео и саму игру. Если вас интересует более детальный разбор, то можете посмотреть данное видео:
Для того чтобы понять что такое игра — нужно понять из чего она состоит. Классическая 2Д игра состоит из множества изображений. Например: основной игрок, задний фон, враги и тому прочее. Если вы начнете динамично менять эти картинки, то получите анимацию, если же вы начнете их двигать в разные координаты, то получите передвижение. То есть в базовом понимании игра состоит из картинок, которые либо сменяются, либо передвигаются.
Также к картинкам добавляются обработчики событий. Тем самым вы можете нажать на картинку, навести на нее мышкой или сделать какое-то другое действие. Отследив действие вы можете выполнить любой функционал при взаимодействии пользователя с объектом в игре.
Это и есть базовое описании процесса отображения игр компьютером.
На что способен Pygame?
Pygame позволяет строить игры разного жанра с разным набором функций. Главное что делает библиотека – позволяет вам отобразить изображение на экране вашего ПК. Отобразив какое-либо изображение вы можете начать двигать его по координатам и вот вы уже получите эффект движения в игре. Или же вы можете начать динамично менять изображения друг за другом и вы получите эффект анимации.
Поэтому основная функция – она позволяет удобно и быстро показать изображение на экране, а далее позволяет выполнять действия с этим изображением.
Это, конечно, лишь часть того что умеет Pygame. Помимо этого вы можете добавлять звуки, создавать твердые объекты, добавлять физику к объектам, отслеживать соприкосновения, выводить текстовую информацию и можете проделывать множество других операций что нужны для построения игры.
Примеры игр
Начать изучать какую-то библиотеку без понимая того что вы сможете на ее основе создать – дело не мотивирующее. Поэтому сперва предлагаем посмотреть на примеры тех игр, что были разработаны на основе языка Питон и библиотеки Pygame.
Такие проекты не могут похвастаться графикой и функциями как в играх класса ААА, но несмотря на это они могут быть интересны с точки зрения своего функционала и действий в игре. Одной из таковых игр является Historical Wargame Simulator. Это игра в жанре стратегии, где у вас набор из множества функций и действий. Смотря на эту игру даже сложно осознать что она создана только за счет языка Python.
Таковых проектов очень много. Все они в основе своей представляют из себя простые игры.
Приведем пример нескольких:
- игра TRUNKMAN с реально крутой графикой и интересной задумкой;
- игра Necrostation выполненная в духе классических олд скульных игр с кучей анимацией;
- игра Gleamshroom, где вам предстоит играть за гриб. В игре нужно преодолевать разные препятствия и в конце добраться до конечной точки;
- игра Planyt – классический платформер со множеством анимаций, красивым дизайном и интересной задумкой;
- игра Explon’t, которая смахивает на жанр платформера. В ней также много графики, красивый дизайн, интересный функционал и насыщенная картинка.
И вот подобных проектов созданных на Pygame очень и очень много. Многие из них представлены на официальном сайте самой библиотеки Pygame, так что можете заценить все эти игры там.
План курса
За курс мы с вами с нуля приступим к изучению библиотеки Pygame. Мы изучим весь процесс построения игр: от пустого экрана и до создания игры с графикой, анимациями, дизайном, звуками и механикой.
По итогу вы разработаете небольшую мобильную игру, где у вас будет основной игрок, враги и множество игровых действий.
Прежде чем перейти к изучению самого курса вам стоит изучить язык Питон . Без базовых знаний этого языка вам будет сложно понять код. Вам не требуется досконально знать язык. Наоборот, вы можете его знать совсем поверхностно и этих знаний вам хватит для прохождения курса по Pygame.
Дополнительные курсы
На нашем сайте вы найдете дополнительные курсы по теме языка Python. Если вас интересует полное изучения языка и его фреймворков, то рекомендуем вашему вниманию программу обучения: « Python разработчик ».
В ходе программы вы изучите сам язык Питон, научитесь работать с базами данных, создавать приложения с графическим интерфейсом, работать с данными, создавать телеграмм ботов и строить полноценные веб сайты на базе фреймворка Джанго.
Задание к уроку
Библиотека PyGame
На что способна библиотека PyGame? Какие функции она предоставляет и что вы можете получить при её использовании?
Посмотреть ответ
Библиотека PyGame дает возможность вам создавать игры как под ПК, так и под Андроид.
Вы можете прописать весь интерфейс программы, всю анимацию, а также весь функционал самой игры используя лишь одну эту библиотеку.
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Pygame
Pygame — это библиотека для создания игр на языке программирования Python. В библиотеке собран набор программных средств, помогающих разрабатывать двумерные игры.
Еще Pygame называют фреймворком. С точки зрения программирования игр на Python это немного разные понятия, но Pygame имеет черты и того, и другого. Кроме того, его можно считать игровым движком: так называют комплексы программного обеспечения для разработки игр. Правда, как движок Pygame намного проще, чем более комплексные решения вроде Unity или Unreal Engine.
Pygame основан на бесплатной библиотеке SDL, которая предназначена для создания мультимедийных приложений. Кроме официальной версии, существует ответвление Pygame Community Edition, которое развивают и улучшают энтузиасты. Хотя Pygame в целом развивается сообществом еще с 2005 года.
С помощью фреймворка можно писать игры для ПК, а также под Android — во втором случае понадобится специальный набор инструментов под названием pgs4a.

Освойте профессию «Разработчик игр на Unity»
Разработчик игр на Unity
Все главные навыки разработчика игр на одном курсе. Вы освоите все этапы геймдизайна, научитесь программировать на С# и создадите 7 игр во время курса.

Профессия / 18 месяцев
Разработчик игр на Unity
Создавайте виртуальные миры

Для чего нужен 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-игры, — платформер.

Разработчик игр на Unity – одна
из самых творческих профессий в IT. Создайте виртуальные миры уже через полгода обучения
Особенности создания игр на 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 не установлен, сначала его понадобится скачать.
Чтобы узнать больше о разработке игр, запишитесь на курсы — практикуйтесь с первых дней и получайте опыт в геймдеве.
Статьи по теме:
Стрелялка с Pygame №4: графика
Четвертая часть проект «Стрелялка с Pygame». Если пропустили, обязательно вернитесь и начините с первой части. В этот раз речь пойдет об использовании заготовленной графики.
В этой серии уроков будет создана полноценная игра на языке Python с помощью библиотеки Pygame. Она будет особенно интересна начинающим программистам, которые уже знакомы с основами языка и хотят углубить знания, а также узнать, что лежит в основе создания игр.
Выбор графики
В уроке, посвященном спрайтами, затрагивалась тема Opengameart.org — источника бесплатного арта для игр; и популярного местного автора, Kenney. Kenney создал набор арта, который прекрасно подойдет для этой стрелялки. Он называется «Space Shooter Pack». Найти его можно здесь:
Он включает массу качественных изображений с космическими кораблями, лазерами, астероидами и так далее.

Архив содержит несколько папок. Для этого проекта нужно папка PNG со всеми изображениями по отдельности. Для спрайтов пока что нужно только три, а также изображение звездного неба для фона.
Изображения необходимо скопировать туда, где игра сможет их найти. Лучше всего создать новую папку в том же месте, где хранится код игры. Назовем ее «img».
Загрузка изображений
Чтобы быть уверенными в том, что код будет работать в любой операционной системе, нужно использовать функцию os.path , которая определяет правильный путь к файлам вне зависимости от ОС.
В верхней части программы необходимо определить местоположение папки img :
from os import path img_dir = path.join(path.dirname(__file__), 'img')
Прорисовка фона
Теперь можно приступать к загрузке фонового изображения. Загрузку ассетов необходимо производить до игрового цикла и кода запуска:
# Загрузка всей игровой графики background = pygame.image.load(path.join(img_dir, 'starfield.png')).convert() background_rect = background.get_rect()
Теперь можно прорисовать фон в разделе Draw игрового цикла до прорисовки любого из спрайтов:
# Рендеринг screen.fill(BLACK) screen.blit(background, background_rect) all_sprites.draw(screen)
blit — это олдскульный термин из компьютерной графики, который обозначает прорисовку пикселей одного изображения на другом. В этом случае — прорисовку фона на экране. Теперь фон выглядит намного лучше:
Изображения спрайтов:
Теперь можно загрузить изображения спрайтов:
# Загрузка всей игровой графики background = pygame.image.load(path.join(img_dir, 'starfield.png')).convert() background_rect = background.get_rect() player_img = pygame.image.load(path.join(img_dir, "playerShip1_orange.png")).convert() meteor_img = pygame.image.load(path.join(img_dir, "meteorBrown_med1.png")).convert() bullet_img = pygame.image.load(path.join(img_dir, "laserRed16.png")).convert()
Начнем с игрока — необходимо заменить зеленый прямоугольник, то есть self.image и не забыть убрать параметр image.fill(GREEN) , который больше не нужен:
class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = player_img self.rect = self.image.get_rect()
Тем не менее имеется пара проблем. Во-первых, картинка чуть больше, чем требуется. Есть два варианта: 1) открыть ее в графическом редакторе (Photoshop, GIMP) и отредактировать; 2) поменять размер прямо в коде. Выбираем второй вариант. Для этого понадобится функция Pygame под названием transform.scale() . Уменьшим изображение вдвое — до размера 50х30 пикселей.
Вторая проблема — черный прямоугольник вокруг корабля. Чтобы это исправить, нужно назначить прозрачный цвет с помощью set_colorkey :
self.image = pygame.transform.scale(player_img, (50, 38)) self.image.set_colorkey(BLACK)
Если повторить то же самое для классов Bullet и Mob (хотя их размер менять не нужно), игра будет выглядеть намного лучше:
Итого
Теперь в игре есть графика, и это помогает заметить новую проблему: астероиды уничтожают корабль, даже когда не касаются его. В следующем уроке поработаем над тем, чтобы столкновения работали корректно.
Как создать игру на Python с использованием Pygame
Узнайте, как создать свою первую игру на Python с использованием библиотеки Pygame, отрисовки графики, обработки ввода до добавления звуков!
Алексей Кодов
Автор статьи
10 июля 2023 в 17:48
Python — один из самых популярных языков программирования, и его использование в разработке игр становится все более популярным. В этой статье мы рассмотрим, как создать простую игру на Python с использованием библиотеки Pygame.
Что такое Pygame?
Pygame — это кросс-платформенная библиотека для разработки видеоигр на языке программирования Python. Она включает в себя множество функций, которые облегчают разработку игр, таких как отрисовка графики, обработка ввода и управление звуком .
Установка Pygame
Для начала работы с Pygame, вам нужно установить его на ваш компьютер. Вы можете сделать это с помощью следующей команды:
pip install pygame
Создание окна игры
Первым делом, создадим окно игры. Вот пример кода для создания окна размером 800×600 пикселей:
import pygame pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Моя игра") running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.display.flip() pygame.quit()
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Работа с графикой
Теперь добавим нашему окну игры фон и спрайт (игровой объект). Сначала загрузим изображения:
background = pygame.image.load("background.png") sprite = pygame.image.load("sprite.png")
Затем отрисуем их на экране:
screen.blit(background, (0, 0)) screen.blit(sprite, (100, 100))
Обработка ввода
Чтобы сделать игру интерактивной, добавим обработку ввода с клавиатуры. Вот пример кода для перемещения спрайта влево или вправо при нажатии на стрелки:
keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: sprite_rect.x -= 5 if keys[pygame.K_RIGHT]: sprite_rect.x += 5
Добавление звуков
Наконец, давайте добавим звуки в нашу игру. Загрузим звуковые файлы и проиграем их при определенных событиях:
jump_sound = pygame.mixer.Sound("jump.wav") hit_sound = pygame.mixer.Sound("hit.wav") if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: jump_sound.play() if sprite_collides_with_enemy: hit_sound.play()
Теперь вы знаете основы создания игры на Python с использованием Pygame! Эти примеры — лишь отправная точка, и вы можете использовать их для создания своих собственных игровых проектов. Удачи в разработке!