Pygame: Создаем снаряды в игре на Python 3

Создадим класс Projectile для представления снарядов. Каждый объект этого класса будет отдельным снарядом, выпускаемым игроком. Класс будет содержать методы для создания и отрисовки снарядов.

Класс снарядов

Класс Projectile:

class Projectile:
    def __init__(self, x, y, radius, color, facing):
        self.x = x
        self.y = y
        self.radius = radius
        self.color = color
        self.facing = facing  # Направление движения (1 - вправо, -1 - влево)
        self.vel = 8 * facing # Скорость снаряда

    def draw(self, win):
        pygame.draw.circle(win, self.color, (self.x, self.y), self.radius)

Конструктор принимает координаты x и y, радиус, цвет и направление движения (facing). Переменная vel — скорость, равная 8, умноженной на facing (определяет направление: влево или вправо). Метод draw отрисовывает снаряд как круг с помощью pygame.draw.circle.

Управление снарядами

Список projectiles хранит объекты-снаряды. В основном цикле игры мы обновляем положение каждого снаряда и удаляем те, что вышли за пределы экрана.

projectiles = []

# ... в основном цикле игры ...

for index, projectile in enumerate(projectiles):
    if 0 < projectile.x < 500: # Проверка на выход за границы экрана
        projectile.x += projectile.vel
    else:
        projectiles.pop(index)

# ... отрисовка снарядов ...
for projectile in projectiles:
    projectile.draw(win)

Цикл перебирает projectiles. Если координата x снаряда в пределах экрана (0-500), его положение обновляется. Иначе снаряд удаляется с помощью projectiles.pop(index).

Создание и выстрел

Добавим логику создания снарядов по нажатию клавиши F, ограничивая их количество до 5.

# ... в основном цикле игры ...

if keys[pygame.K_f] and len(projectiles) < 5:
    if last_move == "right":
        facing = 1
    else:
        facing = -1
    projectiles.append(Projectile(round(playerman.x + playerman.width//2), round(playerman.y + playerman.height//2), 5, (255, 0, 0), facing)) # добавление нового снаряда

# переменная для отслеживания последнего движения игрока
last_move = "right" # инициализация
# ...обновление last_move в зависимости от движения игрока...

Если нажата F и количество снарядов меньше 5, создаётся новый. Координаты x и y — центр игрока, радиус — 5, цвет — красный, направление определяется last_move (последнее движение игрока).

Отрисовка

Отрисовка снарядов выполняется методом draw класса Projectile и вызывается в основном цикле для каждого элемента projectiles.

В этом уроке мы создали, перемещали и отрисовывали снаряды, используя класс Projectile и отслеживая последнее движение игрока для определения направления выстрела. Ограничение на количество снарядов предотвращает перегрузку игры.

Что будем искать? Например,программа