248
Глава 12 • Инопланетное вторжение
ПРИМЕЧАНИЕ
В Pygame начало координат (0, 0) находится в левом верхнем углу
экрана, а оси направлены сверху вниз и слева направо . На экране размером 1200 × 800
начало координат располагается в левом верхнем углу, а правый нижний угол имеет
координаты (1200, 800) . Эти координаты относятся к игровому окну, а не к физическому
экрану .
Корабль будет расположен в середине нижней стороны экрана. Для этого значение
self.rect.midbottom
выравнивается по атрибуту
midbottom
прямоугольника экра-
на
. Pygame использует эти атрибуты
rect
для позиционирования изображения,
чтобы корабль был выровнен по центру, а его нижний край совпадал с нижним
краем экрана.
В точке
определяется метод
blitme()
, который выводит изображение на экран
в позиции, заданной
self.rect
.
Вывод корабля на экран
Изменим программу
alien_invasion .py
, чтобы в ней создавался корабль и вызывался
метод
blitme()
класса
Ship
:
alien_invasion.py
...
from settings import Settings
from ship import Ship
class AlienInvasion:
"""Класс для управления ресурсами и поведением игры."""
def __init__(self):
...
pygame.display.set_caption("Alien Invasion")
❶
self.ship = Ship(screen)
def run_game(self):
...
# При каждом проходе цикла перерисовывается экран.
self.screen.fill(self.settings.bg_color)
❷
self.ship.blitme()
# Отображение последнего прорисованного экрана.
pygame.display.flip()
...
После создания экрана программа импортирует класс
Ship
и создает его экземп-
ляр
. При вызове
Ship
передается один аргумент — экземпляр
AlienInvasion
.
Аргумент
self
относится к текущему экземпляру
AlienInvasion
. Этот параметр
предоставляет
Ship
доступ к ресурсам игры, например к объекту
screen
. Экземпляр
Ship
присваивается
self.ship
.
Рефакторинг: методы _check_events() и _update_screen()
249
После заполнения фона корабль рисуется на экране вызовом
ship.blitme()
, так
что корабль выводится поверх фона
.
Если запустить
alien_invasion .py
сейчас, вы увидите пустой игровой экран, в центре
нижней стороны которого находится корабль (рис. 12.2).
Рис. 12.2.
Корабль в середине нижней стороны экрана
Рефакторинг: методы _check_events()
и _update_screen()
В больших проектах перед добавлением нового кода часто проводится рефакто-
ринг уже написанного кода. Рефакторинг упрощает структуру существующего
кода и дальнейшее развитие проекта. В этом разделе метод
run_game()
, который
становится слишком длинным, будет разбит на два вспомогательных метода.
Вспо-
могательный метод
работает во внутренней реализации класса, но не должен вы-
зываться через экземпляр. В Python имена вспомогательных методов обозначаются
начальным символом подчеркивания (
_
).
Метод _check_events()
Начнем с перемещения кода управления событиями в отдельный метод _
check_
events()
. Тем самым вы упростите
run_game()
и изолируете цикл управления
событиями от остального кода. Изоляция цикла событий позволит организовать
250
Достарыңызбен бөлісу: |