258 Глава 13 • Осторожно, пришельцы!
собственное изображение пришельца или использовать изображение на рис. 13.1,
доступное в ресурсах книги по адресу https://www.nostarch.com/pythoncrashcourse/.
Это изображение имеет серый фон, совпадающий с цветом фона экрана. Не за-
будьте сохранить выбранный файл в каталоге
images
.
Создание класса Alien
Теперь можно написать класс
Alien
:
alien.py
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
"""Класс, представляющий одного пришельца."""
def __init__(self, ai_settings, screen):
"""Инициализирует пришельца и задает его начальную позицию."""
super(Alien, self).__init__()
self.screen = screen
self.ai_settings = ai_settings
# Загрузка изображения пришельца и назначение атрибута rect.
self.image = pygame.image.load('images/alien.bmp')
self.rect = self.image.get_rect()
# Каждый новый пришелец появляется в левом верхнем углу экрана.
self.rect.x = self.rect.width
self.rect.y = self.rect.height
# Сохранение точной позиции пришельца.
self.x = float(self.rect.x)
def blitme(self):
"""Выводит пришельца в текущем положении."""
self.screen.blit(self.image, self.rect)
В основном этот класс похож на класс
Ship
(если не считать размещения пришель-
ца). Изначально каждый пришелец размещается в левом верхнем углу экрана, при
этом слева от него добавляется интервал, равный ширине пришельца, а над ним —
интервал, равный высоте .
Создание экземпляра Alien
Создадим экземпляр
Alien
в
alien_invasion .py
:
alien_invasion.py
...
from ship import Ship
from alien import Alien
import game_functions as gf
Создание пришельца
259
def run_game():
...
# Создание пришельца.
alien = Alien(ai_settings, screen)
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, ship, bullets)
ship.update()
gf.update_bullets(bullets)
gf.update_screen(ai_settings, screen, ship, alien, bullets)
run_game()
Программа импортирует новый класс
Alien
и создает экземпляр
Alien
непосред-
ственно перед входом в основной цикл
while
. Так как позиция пришельца еще
не успела измениться, ничего нового в цикле не добавляется; изменения вносятся
только в вызов
update_screen()
, которому передается экземпляр
alien
.
Отображение пришельца на экране
Достарыңызбен бөлісу: