Python Pygame: Создаем армию пришельцев (Урок 4)

Пушка двигается при нажатии клавиш, а при нажатии пробела стреляет. Отсутствуют враги. В этом уроке создадим армию пришельцев.

Создание спрайта пришельца

Нарисуем пришельца размером 50×50 пикселей. Цвет — (139, 195, 74). Пришелец симметричен: нарисуем половину, скопируем и развернём. Добавим антенны, ноги/лапки и глаза. Рисунок создаётся на прозрачном фоне. Сохраним изображение как PNG в папку Image проекта под именем ino.png.

Класс пришельца

Создадим модуль ino.py для описания поведения одного пришельца. В нём будет класс Alien, наследующий от pygame.sprite.Sprite.

import pygame

class Alien(pygame.sprite.Sprite):
    """Класс, описывающий поведение одного пришельца."""
    def __init__(self, screen):
        """Инициализация пришельца."""
        super().__init__()
        self.screen = screen
        self.image = pygame.image.load('Image/ino.png')
        self.rect = self.image.get_rect()
        self.rect.x = 0
        self.rect.y = 0
        self.x = float(self.rect.x)
        self.y = float(self.rect.y)

    def draw(self):
        """Вывод пришельца на экран."""
        self.screen.blit(self.image, self.rect)

    def update(self):
        """Обновление положения пришельца."""
        self.y += 0.1
        self.rect.y = self.y

Импортируем класс в главный файл игры (SpaceGame.py) и создадим объект:

import ino
# ...другой код...
ino = ino.Alien(screen)
# ...другой код...
def update():
    # ...другой код...
    ino.draw()
    # ...другой код...

Запустив игру, увидим одного пришельца на экране.

Создание армии пришельцев

Функция create_army в файле controls.py будет генерировать армию. Рассчитаем количество пришельцев в ряду и количество рядов. Ширина экрана — 700 пикселей, высота — 800 пикселей. Ширина и высота пришельца — 50 пикселей. Высота пушки — 100 пикселей.

import ino
from pygame.sprite import Group

# ... другой код ...

def create_army(screen, aliens):
    """Создает армию пришельцев."""
    alien = ino.Alien(screen)
    alien_width = alien.rect.width
    alien_height = alien.rect.height
    available_space_x = 700 - 2 * alien_width
    number_aliens_x = int(available_space_x / (2 * alien_width))

    available_space_y = 800 - 100 - alien_height
    number_rows = int(available_space_y / (2 * alien_height))

    for row_number in range(number_rows):
        for alien_number in range(number_aliens_x):
            alien = ino.Alien(screen)
            alien.x = alien_width + 2 * alien_width * alien_number
            alien.rect.x = alien.x
            alien.y = alien_height + 2 * alien_height * row_number
            alien.rect.y = alien.y
            aliens.add(alien)
# ... другой код ...

Вызов этой функции в главном файле добавит армию на экран.

Движение пришельцев

Добавим метод update в класс Alien для перемещения пришельцев вниз (код метода уже приведен выше). Добавим функцию update_aliens в controls.py, которая вызовет метод update для каждого пришельца. В главном файле вызовем эту функцию после обновления пуль. Теперь пришельцы будут двигаться вниз.

Создали армию пришельцев и добавили им движение. В следующем уроке реализуем обработку столкновений.

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