Установка и первое окно

Установим 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. У тебя есть рабочая площадка для всех следующих экспериментов.

Проверьте себя
1. Какой командой устанавливается современная community-версия библиотеки?
Apip install pygame
Bpip install pygame-ce
Cpip install pygame2
Dapt install pygame
2. Что возвращает pygame.event.get()?
AСписок событий с прошлого кадра
BТекущий FPS
CРазмер окна
DЦвет фона