Построение флота
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)
Зная
количество рядов во флоте, мы можем повторить код создания ряда:
Достарыңызбен бөлісу: