Книга «Изучаем Python»



Pdf көрінісі
бет161/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   157   158   159   160   161   162   163   164   ...   266
Байланысты:
Изучаем 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
.


Построение флота


Достарыңызбен бөлісу:
1   ...   157   158   159   160   161   162   163   164   ...   266




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

    Басты бет