ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Pygame: установка, игровой цикл и проверка первого кадра

Автор: · Обновлено

Установка Pygame полезна, когда за ней следует проверяемая задача: открыть окно, обработать события, нарисовать кадр и корректно завершить программу. В этом практикуме вы соберёте маленькую анимацию и сохраните её последний кадр в PNG. Так проверяются и импорт библиотеки, и её взаимодействие с видеоподсистемой.

Установка Pygame в выбранный Python

Создайте отдельную папку и окружение по уроку [Python venv](/lessons/python/python-developer-intermediate/python-intermediate-01). После активации выполните:

python -m pip install pygame
python -m pip show pygame

На Windows можно обойтись без активации: сначала py -3 -m venv .venv, затем .\.venv\Scripts\python.exe -m pip install pygame. Команда скачает совместимый пакет из настроенного индекса; отдельный случайный установщик «pygame для Windows» не нужен. Официальная страница пакета — Pygame на PyPI. Проверка этого урока выполнена с Pygame 2.6.1 и Python 3.13 в Linux; наличие wheel для вашей версии Python и архитектуры нужно проверять отдельно.

Окно, события и кадры

Сохраните pygame_loop.py рядом с окружением:

import os
import sys

headless = "--headless" in sys.argv
if headless:
    os.environ["SDL_VIDEODRIVER"] = "dummy"
os.environ["PYGAME_HIDE_SUPPORT_PROMPT"] = "1"

import pygame

pygame.display.init()
screen = pygame.display.set_mode((320, 180))
clock = pygame.time.Clock()
frames = 0
running = True
try:
    while running and frames < 60:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
        if not running:
            break
        screen.fill((15, 22, 35))
        pygame.draw.circle(screen, (70, 190, 240), (20 + frames * 3, 90), 12)
        pygame.display.flip()
        frames += 1
        if not headless:
            clock.tick(60)
    pygame.image.save(screen, "frame.png")
    print("Кадров:", frames)
    print("Размер:", pygame.image.load("frame.png").get_size())
finally:
    pygame.quit()

Запуск python pygame_loop.py показывает движущийся голубой круг. Программа обрабатывает событие закрытия окна, очищает поверхность перед новой отрисовкой и завершает цикл после 60 кадров. Если окно не закрывать раньше, результат:

Кадров: 60
Размер: (320, 180)

В папке появляется frame.png. Полный цикл ограничен числом кадров, поэтому программа не остаётся работающей навсегда. Работа окна и обновление поверхности описаны в pygame.display, рисование окружности — в pygame.draw.

Что проверяет запуск без окна

Команда python pygame_loop.py --headless использует SDL dummy driver. Она удобна для автоматической проверки создания поверхности и PNG на машине без рабочего стола. Это не проверка настоящего окна, клавиатуры или видеодрайвера Windows. Локально исполнен именно этот вариант; его результат — 60 кадров и изображение размером 320×180.

Уберите screen.fill(...) и сравните рисунок: старые положения круга останутся на поверхности. Этот опыт отделяет изменение координаты от полной перерисовки сцены. В обычном режиме clock.tick(60) ограничивает частоту цикла; конкретная длительность зависит от системы, а не гарантированного таймера. pygame.time.

Разбор ошибок

Практика: движение с границами

Добавьте переменную направления и разворачивайте круг, когда он достигает правой или левой границы с учётом радиуса. Затем удвойте число кадров. Для проверки используйте три начальных положения: у левого края, в середине и у правого. Центр не должен выходить за интервал от 12 до 308.

Объясните, почему простое удвоение скорости не эквивалентно удвоению кадров. Сдайте код, итоговый PNG и описание поведения при раннем закрытии окна. Успешный импорт — только первый этап; готовность этого примера подтверждается обработкой событий, сохранением кадра и штатным завершением.

Источники