Pygame — это библиотека Python для создания 2D-игр и мультимедийных приложений с графикой, звуком и обработкой ввода. Она дает готовые инструменты для окна, рисования, клавиатуры и мыши, поэтому подходит для первых игровых проектов. Ниже разбираю установку, игровой цикл, поверхности и спрайты, события и отрисовку — с рабочим примером и частыми ошибками новичка.
Содержание
Что такое Pygame и когда его брать
Pygame — надстройка над библиотекой SDL. Это не движок с редактором сцен, а набор модулей: окно (display), рисование (draw), картинки (image), звук (mixer), шрифты (font), события (event).
Библиотека вышла в 2000 году (автор Пит Шиннерс) и развивается до сих пор. Актуальная ветка на 2026 год — 2.6.x; есть также форк pygame-ce (Community Edition) с более быстрыми исправлениями. Для новичка версии взаимозаменяемы: код из статьи работает в любой.
Pygame — кроссплатформенный (Windows, macOS, Linux) и с открытым кодом. Он хорош для небольших 2D-проектов: аркад, платформеров, головоломок. Для 3D и крупных коммерческих игр берут Unity или Godot — Pygame для этого не предназначен.
Установка
Ставится через pip. Рекомендую делать это внутри виртуального окружения проекта:
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install pygame
Проверить установку можно так — команда выведет номер версии:
python -m pygame.examples.aliens
Эта команда запускает демо-игру из комплекта. Если открылось окно с игрой — библиотека установлена корректно.
Игровой цикл: минимальный рабочий пример
Игровой цикл (game loop) — это бесконечный цикл, который на каждом кадре делает три вещи: читает события, обновляет состояние игры, перерисовывает экран. Без него окно откроется и сразу зависнет.
Вот полный работающий пример — окно 640×480 с красным кругом в центре:
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Моя первая игра")
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get(): # 1. читаем события
if event.type == pygame.QUIT:
running = False
screen.fill((30, 30, 30)) # 2. заливаем фон темно-серым
pygame.draw.circle(screen, (255, 80, 80), (320, 240), 40) # рисуем круг
pygame.display.flip() # 3. показываем готовый кадр
clock.tick(60) # ограничиваем 60 кадрами в секунду
pygame.quit()
Что происходит по шагам:
pygame.init()— готовит модули к работе, вызывать до создания окна.set_mode((640, 480))— создает окно и возвращает главную поверхность (Surface), на которой мы рисуем.screen.fill(...)очищает экран перед новым кадром,flip()выводит нарисованное на экран.clock.tick(60)— удерживает около 60 кадров в секунду, иначе цикл грузит процессор без ограничений.
Результат: откроется окно «Моя первая игра» с темно-серым фоном и красным кругом посередине; закрывается по клику на крестик.
Поверхности и спрайты
Поверхность (Surface) — это прямоугольная область с пикселями в памяти. Экран из примера выше — тоже Surface. Любую картинку или фигуру сначала рисуют на поверхности, потом переносят на экран методом blit.
player = pygame.Surface((50, 50)) # пустая поверхность 50x50
player.fill((80, 160, 255)) # заливаем голубым
screen.blit(player, (100, 100)) # рисуем ее в точке (100, 100)
Начало координат — в левом верхнем углу окна: X растет вправо, Y — вниз.
Готовое изображение из файла загружают через pygame.image.load. Вызов convert_alpha() ускоряет отрисовку и сохраняет прозрачность PNG (для непрозрачных картинок — convert()):
hero = pygame.image.load("hero.png").convert_alpha()
screen.blit(hero, (100, 100))
Когда объектов много, удобен класс pygame.sprite.Sprite. Спрайт хранит свое изображение (image) и положение (rect), а группы спрайтов рисуются одной командой:
class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill((80, 160, 255))
self.rect = self.image.get_rect(topleft=(x, y))
players = pygame.sprite.Group(Player(100, 100))
players.draw(screen) # рисует все спрайты группы
Обработка событий
События — это действия пользователя и системы: закрытие окна, нажатие клавиш, клики мыши. Pygame складывает их в очередь, а мы читаем ее через pygame.event.get().
| Событие | Когда возникает | Как проверить |
|---|---|---|
pygame.QUIT |
закрытие окна | event.type == pygame.QUIT |
pygame.KEYDOWN |
нажата клавиша | event.key == pygame.K_SPACE |
pygame.KEYUP |
клавиша отпущена | event.key == pygame.K_LEFT |
pygame.MOUSEBUTTONDOWN |
клик мышью | event.button, event.pos |
Разовые действия (выстрел, прыжок, пауза) удобно ловить через KEYDOWN. А для непрерывного движения нужны не события, а опрос зажатых клавиш через pygame.key.get_pressed():
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= 5 # едем влево, пока клавиша зажата
if keys[pygame.K_RIGHT]:
x += 5
Разница важна: KEYDOWN срабатывает один раз на нажатие, а get_pressed() возвращает состояние на текущем кадре — объект будет двигаться, пока клавишу держат.
Отрисовка: фигуры, цвета, текст
Функции рисования лежат в модуле pygame.draw. Основные:
pygame.draw.line(screen, (255, 255, 255), (0, 0), (200, 200), 3) # линия
pygame.draw.rect(screen, (0, 200, 0), (50, 50, 120, 80)) # прямоугольник
pygame.draw.circle(screen, (255, 0, 0), (300, 200), 40) # круг
pygame.draw.polygon(screen, (200, 200, 0), [(400, 100), (450, 200), (350, 200)])
У фигур с контуром последний параметр — толщина линии. Если задать 0 или не указывать, фигура заливается сплошным цветом.
Цвет задается моделью RGB — тройкой чисел от 0 до 255 (красный, зеленый, синий): белый — (255, 255, 255), черный — (0, 0, 0), красный — (255, 0, 0). Четвертое число задает прозрачность (альфа).
Текст рисуют в два шага: создают шрифт, затем «рендерят» строку в поверхность и переносят на экран:
font = pygame.font.SysFont("arial", 32)
text = font.render("Счет: 10", True, (255, 255, 255)) # True = сглаживание
screen.blit(text, (50, 50))
Три частые ошибки новичка
Ошибка 1. Создание окна до инициализации.
import pygame
screen = pygame.display.set_mode((640, 480)) # забыли pygame.init()
Результат:
pygame.error: video system not initialized
Исправление — вызвать pygame.init() перед set_mode().
Ошибка 2. Нет вызова flip() или update() — экран остается черным, хотя рисование в коде есть. Pygame рисует в скрытый буфер, и без pygame.display.flip() кадр не попадает на экран. Исправление — вызывать flip() в конце каждого прохода цикла.
Ошибка 3. Нет цикла обработки событий — окно «зависает» и система считает программу не отвечающей. Исправление — держать внутри игрового цикла for event in pygame.event.get() и обрабатывать хотя бы pygame.QUIT.
Выводы
- Pygame — библиотека Python для 2D-игр, а не движок: окно, рисование, звук и ввод она дает, но сцену и логику вы собираете кодом сами.
- Сердце игры на Pygame — игровой цикл из трех шагов: события, обновление состояния, отрисовка кадра с
flip(). - Все, что видно на экране, — это поверхности (Surface); их рисуют в памяти и переносят на экран методом
blit. - Разовые действия ловят через события
KEYDOWN, непрерывное движение — через опросpygame.key.get_pressed(). clock.tick(fps)держит стабильную скорость и не дает циклу зря нагружать процессор.- Pygame — для учебных и небольших 2D-проектов; для 3D и крупных игр берут Unity или Godot.
Где применяется / связь с практикой
Pygame — типичный первый шаг для тех, кто учится программировать на Python: игровой цикл, координаты и события наглядно показывают, как устроена интерактивная программа. Эти же навыки (циклы, классы, работа с состоянием) нужны и в «серьезной» разработке, не только в играх.
Освойте тему на практике
Если хочется собрать базу Python с нуля и довести первый проект до рабочего вида, посмотрите программу курса Python Basic. Понять, подходит ли вам формат и уровень, помогут бесплатные вебинары — там можно вживую посмотреть, как ведут занятия, и задать вопросы преподавателю.
Смежные темы: Python и создание 2D-игры: что нужно знать разработчику, Как написать игру на Python, Языки для программирования игр.
FAQ
Нужно ли знать Python перед изучением Pygame?
Да, базовый уровень обязателен: переменные, циклы, функции и классы. Pygame — это библиотека поверх Python, а не отдельный язык, поэтому без основ языка примеры будет сложно понять.
Можно ли собрать игру на Pygame в exe-файл для друзей без Python?
Да, готовый проект упаковывают в исполняемый файл сторонними инструментами (например, PyInstaller): пользователю не нужно ставить Python и Pygame отдельно.
Работает ли Pygame на телефоне?
Напрямую на iOS и Android Pygame не запускается — это библиотека для настольных ОС. Для мобильных игр на Python берут отдельные инструменты (например, Kivy) или другие движки.



