ПРИМЕЧАНИЕ У вычислений в программировании есть одна замечательная особен-
ность: не обязательно быть полностью уверенными в правильности формулы, когда вы
ее пишете . Вы можете опробовать формулу на практике и посмотреть, что из этого полу-
чится . В худшем случае получится экран, до отказа забитый пришельцами или, наоборот,
пустой . В этом случае вы пересмотрите формулу на основании полученных результатов .
Создание ряда
Все готово к тому, чтобы сгенерировать полный ряд пришельцев. Так как наш код
создания одного пришельца работает правильно, мы перепишем
_create_fleet()
для создания ряда пришельцев:
alien_invasion.py def _create_fleet(self):
"""Создает флот пришельцев."""
# Создание пришельца и вычисление количества пришельцев в ряду
# Интервал между соседними пришельцами равен ширине пришельца.
❶
alien = Alien(self)
❷
alien_width = alien.rect.width
❸
available_space_x = self.settings.screen_width - (2 * alien_width)
number_aliens_x = available_space_x // (2 * alien_width)
# Создание первого ряда пришельцев.
❹
for alien_number in range(number_aliens_x):
# Создание пришельца и размещение его в ряду.
alien = Alien(self)
❺
alien.x = alien_width + 2 * alien_width * alien_number
alien.rect.x = alien.x
self.aliens.add(alien)
Большая часть этого кода уже была описана ранее. Для размещения пришельцев
необходимо знать ширину и высоту одного пришельца, и мы создаем его в точке
перед выполнением вычислений. Этот пришелец не войдет во флот, поэтому он не
включается в группу
aliens
. В точке
ширина пришельца определяется по его
атрибуту
rect
, а полученное значение сохраняется в
alien_width
, чтобы избежать
лишних обращений к атрибуту
rect
. В точке
вычисляется доступное горизон-
тальное пространство и количество пришельцев, которые в нем поместятся.
Затем создается цикл от 0 до количества создаваемых пришельцев
. В теле цикла
создается новый пришелец, после чего задается его координата
x
для размещения