Разработка платформера на 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. Проект можно расширять:

добавить врагов, улучшить графику, реализовать сбор предметов, переход между уровнями

и многое другое. Главное — понимание структуры игры и работы с событиями, обновлением и

отрисовкой. Используйте этот пример как фундамент для создания собственных проектов.

+1
0
+1
6
+1
0
+1
1
+1
1

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *