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



Pdf көрінісі
бет178/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   174   175   176   177   178   179   180   181   ...   334
Байланысты:
Изучаем Python


Глава 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
, содержащие координаты левого 
верхнего угла. Эти атрибуты избавляют вас от вычислений, которые раньше раз-
работчикам игр приходилось выполнять вручную, притом достаточно часто.




Достарыңызбен бөлісу:
1   ...   174   175   176   177   178   179   180   181   ...   334




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

    Басты бет