Если вы когда-нибудь задумывались, создание игр — это «только для игровых студий», позвольте развеять этот миф: это не так. Благодаря 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», работает на одном фундаментальном принципе: игровом цикле. Думайте об этом как о сердце вашей игры — оно постоянно бьётся, обрабатывая ввод, обновляя состояние игры и перерисовывая экран.
Вот концептуальный поток:
Этот цикл обычно работает со скоростью 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)
Давайте разберём, что здесь происходит:
- Импорт библиотек:
pygameдаёт вам суперсилы для создания игр;sysпозволяет корректно выйти. - Инициализация Pygame:
pygame.init()настраивает все модули, необходимые Pygame. Всегда вызывайте это первым. - Создание окна:
pygame.display.set_mode()создаёт окно вашей игры. Кортеж(800, 600)представляет ширину и высоту в пикселях. - Игровой цикл: этот бесконечный цикл
while True— место, где происходит волшебство. На каждой итерации мы проверяем события (например, пользователь закрывает окно), заполняем экран чёрным и обновляем дисплей. - Управление частотой кадров:
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()
