261 bullet.py import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):
"""Класс для управления снарядами, выпущенными кораблем."""
def __init__(self, ai_game):
"""Создает объект снарядов в текущей позиции корабля."""
super().__init__()
self.screen = ai_game.screen
self.settings = ai_game.settings
self.color = self.settings.bullet_color
# Создание снаряда в позиции (0,0) и назначение правильной позиции.
❶
self.rect = pygame.Rect(0, 0, self.settings.bullet_width,
self.settings.bullet_height)
❷
self.rect.midtop = ai_game.ship.rect.midtop
# Позиция снаряда хранится в вещественном формате.
❸
self.y = float(self.rect.y)
Класс
Bullet
наследует от класса
Sprite
, импортируемого из модуля
pygame.sprite
.
Работая со
спрайтами (sprite), разработчик группирует связанные элементы в сво-
ей игре и выполняет операции со всеми сгруппированными элементами одновре-
менно. Чтобы создать экземпляр снаряда, методу
__init__()
необходим текущий
экземпляр
AlienInvasion
, а вызов
super()
необходим для правильной реализации
наследования от
Sprite
. Также задаются атрибуты для объектов экрана и настроек,
а также цвета снаряда.
В точке
создается атрибут
rect
снаряда. Снаряд не создается на основе готового
изображения, поэтому прямоугольник приходится строить с нуля при помощи
класса
pygame.Rect()
. При создании экземпляра этого класса необходимо задать
координаты левого верхнего угла прямоугольника, его ширину и высоту. Прямо-
угольник инициализируется в точке (0, 0), но в следующих двух строках он переме-
щается в нужное место, так как позиция снаряда зависит от позиции корабля. Ши-
рина и высота снаряда определяются значениями, хранящимися в
self.settings
.
В точке
атрибуту
midtop
снаряда присваивается значение
midtop
корабля. Сна-
ряд должен появляться у верхнего края корабля, поэтому верхний край снаряда
совмещается с верхним краем прямоугольника корабля для имитации выстрела
из корабля
.
А вот как выглядит вторая часть
bullet .py
,
update()
и
draw_bullet()
:
bullet.py def update(self):
"""Перемещает снаряд вверх по экрану."""
# Обновление позиции снаряда в вещественном формате.
❶
self.y -= self.settings.bullet_speed
# Обновление позиции прямоугольника.