alien_invasion.py
def _create_fleet(self):
...
276
Глава 13 • Осторожно, пришельцы!
alien = Alien(self)
❶
alien_width, alien_height = alien.rect.size
available_space_x = self.settings.screen_width - (2 * alien_width)
number_aliens_x = available_space_x // (2 * alien_width)
"""Определяет количество рядов, помещающихся на экране."""
ship_height = self.ship.rect.height
❷
available_space_y = (self.settings.screen_height -
(3 * alien_height) - ship_height)
number_rows = available_space_y // (2 * alien_height)
# Создание флота вторжения.
❸
for row_number in range(number_rows):
for alien_number in range(number_aliens_x):
self._create_alien(alien_number, row_number)
def _create_alien(self, alien_number, row_number):
"""Создание пришельца и размещение его в ряду."""
alien = Alien(self)
alien_width, alien_height = alien.rect.size
alien.x = alien_width + 2 * alien_width * alien_number
alien.rect.x = alien.x
❹
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
self.aliens.add(alien)
Для дальнейших вычислений понадобятся значения ширины и высоты пришельца,
поэтому в точке
используется атрибут
size
, который содержит кортеж с шири-
ной и высотой объекта
rect
. Чтобы вычислить количество рядов, помещающихся
на экране, мы включаем вычисление
available_space_y
сразу же после вычис-
ления
available_space_x
. Вычисления заключаются в круглые скобки, чтобы
их можно было разбить на две строки длиной 79 символов и менее, как указано
в рекомендациях.
Чтобы создать несколько рядов, мы используем два вложенных цикла: внешний
и внутренний
. Внутренний цикл создает один ряд пришельцев. Внешний цикл
считает от 0 до количества рядов; Python использует код создания одного ряда
и повторяет его
number_rows
раз.
Чтобы создать вложенный цикл, напишите новый цикл
for
и снабдите повторя-
емый код отступом. (В большинстве текстовых редакторов операции создания
и удаления блоков кода выполняются просто, но если вам понадобится помощь,
обращайтесь к приложению Б.) Затем при вызове
_create_alien()
передается ар-
гумент с номером ряда, чтобы каждый ряд находился на экране ниже предыдущих.
Определению
_create_alien()
необходим параметр с номером ряда. В
_create_
alien()
мы изменяем координату y пришельца, если он не находится в первом
ряду
. Сначала прибавляется одна высота пришельца, чтобы создать пустое место
у верхнего края экрана. Каждый новый ряд начинается на две высоты пришельца
ниже последнего ряда, поэтому мы умножаем высоту пришельца на 2, а затем на но-
мер ряда. Номер первого ряда равен 0, так что вертикальное расположение первого
ряда остается неизменным. Все последующие ряды размещаются ниже на экране.
Перемещение флота
Достарыңызбен бөлісу: |