Установка и первое окно
Установим pygame-ce, запустим первое окно и научимся закрывать его по-человечески. Это твой «Hello, World» в мире геймдева.
Суть: pygame-ce ставится одной командой pip, а первая программа — это окно, которое открывается, держит 60 FPS и корректно закрывается по событию QUIT.
Теория без практики мертва. Пора поставить библиотеку и увидеть собственное окно. Мы используем pygame-ce — community edition. Это та же классическая Pygame, но активно развиваемая сообществом: свежие исправления, новые возможности Vector2, та же привычная команда import pygame. Если ты раньше ставил обычный pygame — сначала удали его, иначе они конфликтуют.
Установка занимает одну строчку в терминале:
pip install pygame-ceЕсли у тебя уже стоял старый pygame:
pip uninstall pygame
pip install pygame-ceПроверить, что всё встало, можно так — должна напечататься версия и «Hello from the pygame community»:
python -m pygame.examples.aliensЭта команда запускает встроенную мини-игру «Aliens». Если по экрану полетели пришельцы — поздравляю, движок работает.
Как работает под капотом
Когда ты пишешь pygame.init(), библиотека включает все свои подсистемы: видео (окно), таймер, звук, шрифты. Это как повернуть ключ зажигания — без него остальные команды не заведутся. В конце программы pygame.quit() аккуратно глушит мотор и освобождает ресурсы.
Вот полная первая программа. Она открывает синее окно и закрывается по крестику:
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Hello, Pygame!")
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT: # нажат крестик
running = False
if event.type == pygame.KEYDOWN: # нажата клавиша
if event.key == pygame.K_ESCAPE: # ESC тоже выход
running = False
screen.fill((40, 90, 160)) # сине-голубой фон (R, G, B)
pygame.display.flip()
clock.tick(60)
pygame.quit()Главная идея — pygame.event.get() возвращает список всего, что произошло с момента прошлого кадра: нажатия клавиш, движения мыши, попытка закрыть окно. Мы пробегаем по этому списку и реагируем на нужные события.
Логику событий легко проверить без графики. Сымитируем «очередь событий» как список строк и обработаем её так же, как Pygame обрабатывает реальные события. Попробуй сам:
# Имитация очереди событий
events = ["KEYDOWN_A", "MOUSEMOVE", "KEYDOWN_ESCAPE", "QUIT"]
running = True
for event in events:
if event == "QUIT":
running = False
print("Закрываем окно")
elif event == "KEYDOWN_ESCAPE":
running = False
print("ESC -> выход")
elif event.startswith("KEYDOWN"):
print("Нажата клавиша:", event)
else:
print("Прочее событие:", event)
print("running =", running)Почему именно pygame-ce, а не оригинал
История тут поучительная. Классический pygame развивался медленно, и часть сообщества создала форк — pygame-ce (community edition), куда быстрее вливаются исправления и новые возможности. Код полностью совместим: те же import pygame, те же функции, поэтому любой учебник по pygame подходит и для ce. Разница только в скорости развития и свежести. Для новых проектов в 2025 году community edition — разумный выбор по умолчанию, и именно его мы используем во всём курсе.
Отдельно стоит сказать про виртуальное окружение. Когда ты ставишь пакеты глобально, разные проекты начинают конфликтовать: одному нужна одна версия, другому другая. Команда python -m venv .venv создаёт изолированную «песочницу» для конкретного проекта, и pygame-ce ставится только туда. Это профессиональная привычка, которая однажды спасёт тебя от мучительной отладки «почему всё сломалось». Заведи venv для своей первой игры сразу — это пять секунд, а пользы на годы.
Частые ошибки
- Поставить и pygame, и pygame-ce — они занимают одно имя
pygameи конфликтуют. Держи только один. - Забыть
pygame.init()— получишь ошибку при создании окна или шрифта. - Цвет как (300, 0, 0) — компоненты цвета только от 0 до 255.
Best practices
- Используй виртуальное окружение (
python -m venv), чтобы не засорять систему. - Добавь выход по ESC — на этапе разработки это экономит нервы.
- Цвета задавай именованными константами:
BG = (40, 90, 160).
Итог: pygame-ce ставится одной командой, первое окно — это цикл с обработкой QUIT и ESC. У тебя есть рабочая площадка для всех следующих экспериментов.