Если вы когда-нибудь задумывались, создание игр — это «только для игровых студий», позвольте развеять этот миф: это не так. Благодаря Pygame вы можете создавать полностью функциональные игры, имея лишь Python и решимость. Мечтаете ли вы создать следующего инди-фаворита или просто хотите впечатлить друзей на следующей встрече («Погоди, ты это сделал?»), это руководство поможет вам в этом.

Почему Pygame? (Или: Почему ваши мечты о Python не должны оставаться мечтами)

Прежде чем мы погрузимся в код, позвольте объяснить, почему Pygame заслуживает места в вашем наборе инструментов разработчика.

Pygame удобен для начинающих. Он абстрагирует кошмарную сложность программирования низкоуровневой графики, позволяя вам сосредоточиться на том, что действительно важно: сделать вашу игру увлекательной. Вы не боретесь с DirectX или OpenGL — вы пишете на Python, который, вероятно, уже понимаете.

Он кроссплатформенный. Игры, созданные с помощью Pygame, работают на Windows, Mac и Linux без необходимости переписывать ни одной строки кода. Разверните один раз, играйте везде. Это мечта.

Сообщество живо и активно. Pygame существует с начала 2000-х годов, а это значит, что есть тысячи учебников, бесчисленные примеры и форумы, полные разработчиков, готовых помочь, когда вы неизбежно столкнётесь с трудностями. В этом путешествии вы никогда не останетесь одиноки.

Настройка среды разработки

Давайте перейдём к практике. Ни одна игра не существует без должного фундамента, как и ни один разработчик без нужных инструментов.

Шаг 1: Установите Python

Зайдите на python.org и скачайте последнюю версию. Убедитесь, что вы выбираете Python 3.8 или новее — никаких древних версий динозавров. Установите его на свой компьютер. Да, это нужно запустить, прежде чем что-либо другое заработает.

Шаг 2: Установите Pygame

Откройте свой терминал (или командную строку, если вы используете Windows — мы не судим) и запустите:

pip install pygame

Это всё. Серьёзно. Pygame теперь является частью вашего арсенала Python.

Шаг 3: Проверьте, что всё работает

Создайте файл под названием test_pygame.py и вставьте это:

import pygame
print("Версия Pygame:", pygame.version.ver)

Запустите его. Если вы видите номер версии вместо ошибок, поздравляем — теперь вы официально игровой разработчик. Или, по крайней мере, вы на правильном пути.

Понимание игрового цикла: сердцебиение каждой игры

Каждая игра, от Тетриса до «Ведьмака 3», работает на одном фундаментальном принципе: игровом цикле. Думайте об этом как о сердце вашей игры — оно постоянно бьётся, обрабатывая ввод, обновляя состояние игры и перерисовывая экран.

Вот концептуальный поток:

graph TD A[Начать игровой цикл] --> B{Опрос событий} B -->|Ввод пользователя| C[Обновить состояние игры] B -->|Событие выхода| D[Выйти из игры] C --> E[Отрисовать всё] E --> F[Ограничить частоту кадров] F --> A

Этот цикл обычно работает со скоростью 60 раз в секунду (60 FPS), создавая иллюзию плавного непрерывного движения. Каждый кадр происходит одно и то же: прослушивание событий, обновление позиций, перерисовка всего. Тысячи раз. Так происходит волшебство.

Создание вашей первой игры: простой шутер

Довольно теории. Давайте создадим что-то осязаемое.

Основание: создание окна вашей игры

Каждой игре нужна сцена, и в Pygame эта сцена — окно. Вот как его создать:

import pygame
import sys
# Инициализация Pygame
pygame.init()
# Настройка окна игры
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Простая игра-шутер")
# Установка частоты кадров
clock = pygame.time.Clock()
# Основной игровой цикл
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    # Заполнение экрана цветом (чёрным в данном случае)
    screen.fill((0, 0, 0))
    # Обновление дисплея
    pygame.display.flip()
    # Ограничение частоты кадров в 60 кадров в секунду
    clock.tick(60)

Давайте разберём, что здесь происходит:

  1. Импорт библиотек: pygame даёт вам суперсилы для создания игр; sys позволяет корректно выйти.
  2. Инициализация Pygame: pygame.init() настраивает все модули, необходимые Pygame. Всегда вызывайте это первым.
  3. Создание окна: pygame.display.set_mode() создаёт окно вашей игры. Кортеж (800, 600) представляет ширину и высоту в пикселях.
  4. Игровой цикл: этот бесконечный цикл while True — место, где происходит волшебство. На каждой итерации мы проверяем события (например, пользователь закрывает окно), заполняем экран чёрным и обновляем дисплей.
  5. Управление частотой кадров: clock.tick(60) гарантирует, что ваша игра работает ровно с 60 FPS — плавно, предсказуемо и бережно к ресурсам.

Запустите этот код, и вы увидите чёрное окно. Пока не впечатляюще, но вы создали скелет игры. Это немалый подвиг.

Добавление игрока: рисование и движение

Теперь давайте добавим персонажа игрока. Мы представим его в виде простого прямоугольника (для вашей первой игры не требуется модное пиксельное искусство).

import pygame
import sys
# Инициализация Pygame
pygame.init()
# Размеры экрана
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Простая игра-шутер")
# Свойства игрока
player_x = screen_width // 2
player_y = screen_height - 50
player_width = 50
player_height = 50
player_speed = 5
# Часы для частоты кадров
clock = pygame.time.Clock()
# Основной игровой цикл
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    # Обработка движения игрока
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[pygame.K_RIGHT] and player_x < screen_width - player_width:
        player_x += player_speed
    # Заполнение экрана чёрным
    screen.fill((0, 0, 0))
    # Рисование игрока
    pygame.draw.rect(screen, (0, 128, 255), (player_x, player_y, player_width, player_height))
    # Обновление дисплея
    pygame.display.flip()
    # Ограничение частоты кадров в 60 FPS
    clock.tick(60)
pygame.quit()

Что здесь нового?

  • Положение и размер игрока: мы определяем player_x, player_y, player_width и player_height, чтобы описать, где и какого размера наш игрок.
  • Обработка ввода: pygame.key.get_pressed() сообщает нам, какие клавиши в данный момент нажимает игрок. Мы используем стрелки LEFT и RIGHT для движения.
  • Проверка границ: мы гарантируем, что игрок не может выйти за левые или правые края экрана.
  • Рисование: pygame.draw.rect() рисует синий прямоугольник, представляющий нашего игрока.

Запустите это, и вы увидите синий прямоугольник, реагирующий на стрелки. Ваша игра стала интерактивной. Вы в ударе.

Добавление врагов: противостояние

Игра без врагов — просто заставка. Давайте это исправим:

import pygame
import sys
import random
# Инициализация Pygame
pygame.init()
# Размеры экрана
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Простая игра-шутер")
# Свойства игрока
player_x = screen_width // 2
player_y = screen_height - 50
player_width = 50
player_height = 50
player_speed = 5
# Свойства врагов
enemies = []
enemy_width = 40
enemy_height = 40
enemy_speed = 3
# Часы для частоты кадров
clock = pygame.time.Clock()