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


Глава 12 • Инопланетное вторжение ПРИМЕЧАНИЕ



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

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

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




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

    Басты бет