Разработка платформера на Python: подробный проект с кодом

Введение
В этой статье мы разберём, как создать простой, но функциональный платформер на Python
с использованием библиотеки Pygame. Платформер — это жанр игр, где игрок управляет персонажем,
перемещающимся по уровням с препятствиями и платформами. Мы последовательно рассмотрим, как
подготовить окружение, спроектировать игру, реализовать движок, персонажа, платформы и
обработку столкновений.
Настройка окружения
Перед началом убедитесь, что Python установлен. Мы будем использовать библиотеку
Pygame, которая упрощает работу с 2D‑графикой и вводом. Установить её можно командой:
pip install pygame
Структура проекта
Наш проект будет иметь простую структуру: один файл `game.py`, который содержит
все классы и логику. Можно разделять код на модули по желанию, но для учебного
проекта одного файла достаточно.
Основной цикл игры
Игры построены вокруг бесконечного цикла, который отвечает за обработку событий,
обновление состояния объектов и отрисовку. Создадим каркас Pygame и основной цикл:
import pygame
# Инициализация Pygame
pygame.init()
# Константы
WIDTH, HEIGHT = 800, 600
FPS = 60
# Создание экрана
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Простой платформер")
# Создание часов для управления частотой кадров
clock = pygame.time.Clock()
running = True
while running:
# Частота кадров
clock.tick(FPS)
# Обработка событий
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Обновление игры (пока нет логики)
# Отрисовка фона
screen.fill((30, 30, 40))
# Обновление экрана
pygame.display.flip()
pygame.quit()
Класс игрока
Создадим класс `Player`, который наследует `pygame.sprite.Sprite`. Это упрощает управление
спрайтами и их столкновениями. Внутри класса определим начальное положение, скорость,
гравитацию, методы движения и обновления.
class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.Surface((40, 60))
self.image.fill((50, 200, 50))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.vel_x = 0
self.vel_y = 0
self.on_ground = False
def update(self, platforms):
# Применяем гравитацию
if not self.on_ground:
self.vel_y += 0.5 # сила гравитации
else:
self.vel_y = 0
# Горизонтальное движение
self.rect.x += self.vel_x
# Проверка столкновений по горизонтали
for platform in platforms:
if self.rect.colliderect(platform.rect):
if self.vel_x > 0: # движется вправо
self.rect.right = platform.rect.left
elif self.vel_x < 0: # движется влево
self.rect.left = platform.rect.right
# Вертикальное движение
self.rect.y += int(self.vel_y)
self.on_ground = False
for platform in platforms:
if self.rect.colliderect(platform.rect):
if self.vel_y > 0: # падает вниз
self.rect.bottom = platform.rect.top
self.on_ground = True
elif self.vel_y < 0: # прыгает вверх
self.rect.top = platform.rect.bottom
self.vel_y = 0
Класс платформы
Платформы — это статические объекты, по которым ходит игрок. Создадим простой класс:
class Platform(pygame.sprite.Sprite):
def __init__(self, x, y, width, height):
super().__init__()
self.image = pygame.Surface((width, height))
self.image.fill((200, 50, 50))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
Создание уровня
Создадим несколько платформ и игрока, а затем разместим их в игре. Для управления игроком
используем клавиши стрелок: влево, вправо и пробел для прыжка.
def main():
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Платформер")
clock = pygame.time.Clock()
player = Player(100, HEIGHT - 100)
platforms = pygame.sprite.Group()
# Создаём несколько платформ
platforms.add(Platform(0, HEIGHT - 20, WIDTH, 20)) # земля
platforms.add(Platform(200, 450, 100, 20))
platforms.add(Platform(400, 350, 150, 20))
platforms.add(Platform(650, 250, 120, 20))
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
all_sprites.add(*platforms)
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE and player.on_ground:
player.vel_y = -10
keys = pygame.key.get_pressed()
player.vel_x = 0
if keys[pygame.K_LEFT]:
player.vel_x = -5
if keys[pygame.K_RIGHT]:
player.vel_x = 5
player.update(platforms)
screen.fill((30, 30, 40))
for entity in all_sprites:
screen.blit(entity.image, entity.rect)
pygame.display.flip()
pygame.quit()
if __name__ == '__main__':
main()
Заключение
Мы создали базовый платформер на Python с использованием Pygame. Проект можно расширять:
добавить врагов, улучшить графику, реализовать сбор предметов, переход между уровнями
и многое другое. Главное — понимание структуры игры и работы с событиями, обновлением и
отрисовкой. Используйте этот пример как фундамент для создания собственных проектов.



