Пушка двигается при нажатии клавиш, а при нажатии пробела стреляет. Отсутствуют враги. В этом уроке создадим армию пришельцев.
Создание спрайта пришельца
Нарисуем пришельца размером 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 для каждого пришельца. В главном файле вызовем эту функцию после обновления пуль. Теперь пришельцы будут двигаться вниз.
Создали армию пришельцев и добавили им движение. В следующем уроке реализуем обработку столкновений.