М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет189/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   185   186   187   188   189   190   191   192   ...   334
Байланысты:
Изучаем Python

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
# Обновление позиции прямоугольника.


262

Достарыңызбен бөлісу:
1   ...   185   186   187   188   189   190   191   192   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет