Создание класса Ship

We use cookies. Read the Privacy and Cookie Policy

После того как изображение корабля выбрано, его необходимо вывести на экран. Для работы с кораблем мы напишем модуль ship, содержащий класс Ship. Этот класс реализует бульшую часть поведения корабля.

ship.py

import pygame

class Ship():

. .def __init__(self, screen):

. . . ."""Инициализирует корабль и задает его начальную позицию."""

. . . .self.screen = screen

. . . .# Загрузка изображения корабля и получение прямоугольника.

(1) . . . .self.image = pygame.image.load('images/ship.bmp')

(2) . . . .self.rect = self.image.get_rect()

(3) . . . .self.screen_rect = screen.get_rect()

. . . .# Каждый новый корабль появляется у нижнего края экрана.

(4) . . . .self.rect.centerx = self.screen_rect.centerx

. . . .self.rect.bottom = self.screen_rect.bottom

(5) . .def blitme(self):

. . . ."""Рисует корабль в текущей позиции."""

. . . .self.screen.blit(self.image, self.rect)

Сначала программа импортирует модуль pygame. Метод __init__() класса Ship получает два параметра: ссылку self и объект screen, на котором выводится корабль. Загрузка изображения выполняется вызовом pygame.image.load() (1) . Функция возвращает поверхность, представляющую корабль; полученный объект сохраняется в self.image.

После того как изображение будет загружено, метод get_rect() используется для получения атрибута rect поверхности (2). Один из факторов эффективности Pygame заключается в том, что программист может выполнять операции с игровыми элементами как с прямоугольниками даже в том случае, если они имеют другую форму. Операции с прямоугольниками эффективны, потому что прямоугольник — простая геометрическая фигура. Обычно этот подход работает достаточно хорошо и игроки не замечают, что программа не отслеживает точную геометрическую форму каждого игрового элемента.

При работе с объектом rect для вас доступны координаты x и y верхней, нижней, левой и правой сторон, а также центра. Присваивая любые из этих значений, вы задаете текущую позицию прямоугольника.

Местонахождение центра игрового элемента определяется атрибутами center, centerx или centery прямоугольника. Стороны определяются атрибутами top, bottom, left и right. Для изменения горизонтального или вертикального расположения прямоугольника достаточно задать атрибуты x и y, содержащие координаты левого верхнего угла. Эти атрибуты избавляют вас от вычислений, которые раньше разработчикам игр приходилось выполнять вручную, притом достаточно часто.

примечание

В Pygame начало координат (0, 0) находится в левом верхнем углу экрана, а оси направлены сверху вниз и слева направо. На экране с размерами 1200 на 800 начало координат располагается в левом верхнем углу, а правый нижний угол имеет координаты (1200, 800).

Корабль будет расположен в середине нижней стороны экрана. Для этого мы сначала сохраняем прямоугольник экрана в self.screen_rect (3), а затем присваиваем self.rect.centerx (координата x центра корабля) значение атрибута centerx прямоугольника экрана (4). Атрибуту self.rect.bottom (координата y низа корабля) присваивается значение атрибута bottom прямоугольника экрана. Pygame использует эти атрибуты rect для позиционирования изображения, чтобы корабль был выровнен по центру, а его нижний край совпадал с нижним краем экрана.

В точке (5) определяется метод blitme(), который выводит изображение на экран в позиции, заданной self.rect.