Байланысты: Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )
Глава 13 • Осторожно, пришельцы!
Создание флота
Теперь можно перейти к созданию флота. Ниже приведена новая функция
create_
fleet(),
которую мы поместим в конец
game_functions .py
. Также необходимо
импортировать класс
Alien
, не забудьте добавить команду
import
в начало файла:
game_functions.py ...
from bullet import Bullet
from alien import Alien
...
def create_fleet(ai_settings, screen, aliens):
"""Создает флот пришельцев."""
# Создание пришельца и вычисление количества пришельцев в ряду.
# Интервал между соседними пришельцами равен одной ширине пришельца.
alien = Alien(ai_settings, screen)
alien_width = alien.rect.width
available_space_x = ai_settings.screen_width - 2 * alien_width
number_aliens_x = int(available_space_x / (2 * alien_width))
# Создание первого ряда пришельцев.
for alien_number in range(number_aliens_x):
# Создание пришельца и размещение его в ряду.
alien = Alien(ai_settings, screen)
alien.x = alien_width + 2 * alien_width * alien_number
alien.rect.x = alien.x
aliens.add(alien)
Б
у
льшая часть этого кода уже была описана ранее. Для размещения пришельцев
необходимо знать ширину и высоту одного пришельца, и мы создаем его в точке
перед выполнением вычислений. Этот пришелец не войдет во флот, поэтому он не
включается в группу
aliens
. В точке
ширина пришельца определяется по его
атрибуту
rect
, а полученное значение сохраняется в
alien_width
, чтобы избежать
лишних обращений к атрибуту
rect
. В точке
вычисляется горизонтальное про-
странство и количество пришельцев, которые в нем поместятся.
По сравнению с исходными формулами всего одно изменение: мы используем
int()
, чтобы вычисленное количество пришельцев
было целым, — во-первых,
неясно, что делать с неполным пришельцем, а во-вторых, функция
range()
должна
получать целое число. Функция
int()
отсекает дробную часть числа, фактически
выполняя округление в меньшую сторону. (И это правильно: лучше оставить лиш-
нее свободное место в каждом ряду, чем забивать ряды до отказа.)
Затем создается цикл от 0 до количества создаваемых пришельцев
. В теле цикла
создается новый пришелец, после чего задается его координата
x для размещения
его в ряду
. Каждый пришелец сдвигается вправо на одну ширину от левого поля.
Затем ширина пришельца умножается на 2, чтобы учесть полное пространство,
выделенное для одного пришельца, включая пустой интервал справа, а получен-
ная величина умножается на позицию пришельца в ряду. Затем новый пришелец
добавляется в группу
aliens
.