Глава 12 • Инопланетное вторжение
В игре можно использовать практически любые графические форматы, но проще
всего использовать файлы в формате
.bmp
, потому что этот формат Pygame загру-
жает по умолчанию. И хотя Pygame можно настроить для других типов файлов,
некоторые типы зависят от установки на компьютере определенных графических
библиотек. (Большинство изображений, которые вы найдете, имеют формат
.jpg
,
.png
или
.gif
, но их можно преобразовать в формат
.bmp
при помощи таких про-
грамм, как Photoshop, GIMP или Paint.)
Обратите особое внимание на цвет фона вашего изображения. Попробуйте найти
файл с прозрачным фоном, который можно заменить любым цветом фона в гра-
фическом редакторе. Чтобы ваша игра хорошо смотрелась, цвет фона изображения
должен соответствовать цвету фона игры. Также можно подобрать цвет фона игры
под цвет фона изображения.
В игре Alien Invasion используется файл
ship .bmp
(рис. 12.1), который можно загру-
зить в числе ресурсов книги по адресу
https://www .nostarch .com/pythoncrashcourse2e/
.
Цвет фона файла соответствует настройкам, используемым в проекте. Создайте
в главном каталоге проекта (
alien_invasion
) каталог с именем
images
. Сохраните файл
ship .bmp
в каталоге
images
.
Рис. 12.1.
Корабль для игры Alien Invasion
Создание класса Ship
После того как изображение корабля будет выбрано, его необходимо вывести на
экран. Для работы с кораблем мы напишем модуль
ship
, содержащий класс
Ship
.
Этот класс реализует большую часть поведения корабля.
ship.py
import pygame
class Ship():
"""Класс для управления кораблем."""
Добавление изображения корабля
247
def __init__(self, ai_game):
"""Инициализирует корабль и задает его начальную позицию."""
❶
self.screen = ai_game.screen
❷
self.screen_rect = ai_game.screen.get_rect()
# Загружает изображение корабля и получает прямоугольник.
❸
self.image = pygame.image.load('images/ship.bmp')
self.rect = self.image.get_rect()
# Каждый новый корабль появляется у нижнего края экрана.
❹
self.rect.midbottom = self.screen_rect.midbottom
❺
def blitme(self):
"""Рисует корабль в текущей позиции."""
self.screen.blit(self.image, self.rect)
Один из факторов эффективности Pygame заключается в том, что программист
может выполнять операции с игровыми элементами как с прямоугольниками даже
в том случае, если они имеют другую форму. Операции с прямоугольниками эф-
фективны, потому что прямоугольник — простая геометрическая фигура. Обычно
этот подход работает достаточно хорошо, и игроки не замечают, что программа не
отслеживает точную геометрическую форму каждого игрового элемента. В этом
классе корабль и экран будут рассматриваться как прямоугольные объекты.
Перед определением класса программа импортирует модуль
pygame
. Метод
__init__()
класса
Ship
получает два параметра: ссылку
self
и ссылку на текущий
экземпляр класса
AlienInvasion
, так класс
Ship
получает доступ ко всем игровым
ресурсам, определенным в
AlienInvasion
. В точке
экран присваивается атрибуту
Ship
, чтобы к нему можно было легко обращаться во всех модулях класса. В точ-
ке
программа обращается к атрибуту
rect
объекта экрана при помощи метода
get_rect()
и присваивает его
self.screen_rect
. Это позволяет разместить корабль
в нужной позиции экрана.
Чтобы загрузить изображение, мы вызываем метод
pygame.image.load()
и пере-
даем ему местоположение изображения корабля. Функция возвращает поверх-
ность, представляющую корабль, которая присваивается
self.image
.
Когда изображение будет загружено, программа вызывает
get_rect()
для полу-
чения атрибута
rect
поверхности корабля, чтобы позднее использовать ее для
позиционирования корабля.
При работе с объектом
rect
вам доступны координаты
x
и
y
верхней, нижней, левой
и правой сторон, а также центра. Присваивая любые из этих значений, вы задаете
текущую позицию прямоугольника. Местонахождение центра игрового элемента
определяется атрибутами
center
,
centerx
или
centery
прямоугольника. Стороны
определяются атрибутами
top
,
bottom
,
left
и
right
. Также имеются атрибуты, ко-
торые являются комбинацией этих свойств, например
midbottom
,
midtop
,
midleft
и
midright
. Для изменения горизонтального или вертикального расположения
прямоугольника достаточно задать атрибуты
x
и
y
, содержащие координаты левого
верхнего угла. Эти атрибуты избавляют вас от вычислений, которые раньше раз-
работчикам игр приходилось выполнять вручную, притом достаточно часто.
|