Перемещение флота
269
Вызов нового метода
check_edges()
для любого пришельца позволяет проверить,
достиг ли он левого или правого края. У пришельца, находящегося у правого края,
атрибут
right
его атрибута
rect
больше или равен атрибуту
right
атрибута
rect
экрана
. У пришельца, находящегося у левого края, значение
left
меньше либо
равно 0
.
В метод
update()
будут внесены изменения, обеспечивающие перемещение вле-
во и вправо
; для этого скорость пришельца умножается на значение
fleet_
direction
. Если значение
fleet_direction
равно 1, то значение
alien_speed_factor
прибавляется к текущей позиции пришельца; если же значение
fleet_direction
равно –1, то значение вычитается из позиции пришельца (который перемещается
влево).
Снижение
флота и смена направления
Когда пришелец доходит до края, весь флот должен опуститься вниз и изме-
нить направление движения. Это означает, что в
game_functions .py
необходимо
внести серьезные изменения, потому что именно здесь программа проверяет,
достиг ли какой-либо пришелец левого или правого края. Для этого мы напишем
функции
check_fleet_edges()
и
change_fleet_direction()
, а затем изменим
update_aliens()
:
game_functions.py
def check_fleet_edges(ai_settings, aliens):
"""Реагирует на достижение пришельцем края экрана."""
for alien in aliens.sprites():
if alien.check_edges():
change_fleet_direction(ai_settings, aliens)
break
def change_fleet_direction(ai_settings, aliens):
"""Опускает весь флот и меняет направление флота."""
for alien in aliens.sprites():
alien.rect.y += ai_settings.fleet_drop_speed
ai_settings.fleet_direction *= -1
def update_aliens(ai_settings, aliens):
"""
Проверяет,
достиг ли флот края экрана,
после чего обновляет позиции всех пришельцев во флоте.
"""
check_fleet_edges(ai_settings, aliens)
aliens.update()
Функция
check_fleet_edges()
перебирает флот и вызывает
check_edges()
для
каждого пришельца
. Если
check_edges()
возвращает
True
, значит, пришелец
находится у края и весь флот должен сменить направление, поэтому вызывает-
ся функция
change_fleet_direction()
и происходит выход из цикла. Функция
change_fleet_direction()
перебирает пришельцев и уменьшает высоту каждого
из них с использованием настройки
fleet_drop_speed
; затем направление