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



Pdf көрінісі
бет198/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   194   195   196   197   198   199   200   201   ...   334
Байланысты:
Изучаем Python


Глава 13 • Осторожно, пришельцы!
его в ряду 

. Каждый пришелец сдвигается вправо на одну ширину от левого поля. 
Затем ширина пришельца умножается на 2, чтобы учесть полное пространство, вы-
деленное для одного пришельца, включая пустой интервал справа, а полученная 
величина умножается на позицию пришельца в ряду. Атрибут 
x
пришельца исполь-
зуется для назначения позиции его прямоугольника. После этого новый пришелец 
добавляется в группу 
aliens
.
Запустив программу Alien Invasion, вы увидите, что на экране появился первый 
ряд пришельцев (рис. 13.3).
Рис. 13.3.
Первый ряд пришельцев
Первый ряд сдвинут влево, и это полезно для игрового процесса, потому что флот 
пришельцев должен двигаться вправо, пока не дойдет до края экрана, затем немно-
го опуст

иться вниз, затем двигаться влево и т. д. Как и в классической игре Space 
Invaders, такое перемещение интереснее, чем постепенное снижение по прямой. 
Движение будет продолжаться до тех пор, пока все пришельцы не будут сбиты или 
пока пришелец не столкнется с кораблем либо нижним краем экрана.
ПРИМЕЧАНИЕ
В зависимости от выбранной ширины экрана расположение первого 
ряда пришельцев в вашей системе может выглядеть немного иначе .
Рефакторинг _create_fleet()
Если бы создание флота на этом было завершено, то функцию 
_create_fleet()

пожалуй, можно было бы оставить в таком виде, но работа еще не закончена, по-


Построение флота
275
этому мы немного подчистим код функции. Добавим новый вспомогательный 
метод 
_create_alien()
и вызовем его из 
_create_fleet()
:
alien_invasion.py
def _create_fleet(self):
...
# Создание первого ряда пришельцев.
for alien_number in range(number_aliens_x):
self._create_alien(alien_number)
def _create_alien(self, alien_number):
"""Создание пришельца и размещение его в ряду."""
alien = Alien(self)
alien_width = alien.rect.width
alien.x = alien_width + 2 * alien_width * alien_number
alien.rect.x = alien.x
self.aliens.add(alien)
Метод 
_create_alien()
должен получать еще один параметр, кроме 
self
: номер 
пришельца, создаваемого в настоящий момент. Мы используем тот же код, соз-
данный для 
_create_fleet()
, не считая того, что ширина пришельца определяется 
внутри метода, а не передается в аргументе. Рефакторинг упрощает добавление 
новых строк и создание всего флота.
Добавление рядов
Чтобы завершить построение флота, определите количество рядов на экране 
и повторите цикл (создания пришельцев одного ряда) полученное количество 
раз. Чтобы определить количество рядов, мы вычисляем доступное вертикальное 
пространство, вычитая высоту пришельца (сверху), высоту корабля (снизу) и уд-
военную высоту пришельца (снизу):
available_space_y = settings.screen_height — (3 * alien_height) — ship_height
В результате вокруг корабля образуется пустое пространство, чтобы у игрока было 
время начать стрельбу по пришельцам в начале каждого уровня.
Под каждым рядом должно быть пустое место, равное высоте пришельца. Чтобы 
вычислить количество строк, мы делим свободное пространство на удвоенную 
высоту пришельца. Мы снова используем целочисленное деление, потому что 
количество создаваемых рядов должно быть целым. (Как и прежде, если формула 
содержит ошибку, мы это немедленно увидим и внесем изменения, пока не полу-
чим нужные интервалы):
number_rows = available_height_y // (2 * alien_height)
Зная количество рядов во флоте, мы можем повторить код создания ряда:


Достарыңызбен бөлісу:
1   ...   194   195   196   197   198   199   200   201   ...   334




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

    Басты бет