Снижение флота и смена направления

We use cookies. Read the Privacy and Cookie Policy

Когда пришелец доходит до края, весь флот должен опуститься вниз и изменить направление движения. Это означает, что в game_functions.py необходимо внести серьезные изменения, потому что именно здесь программа проверяет, достиг ли какой-либо пришелец левого или правого края. Для этого мы напишем функции check_fleet_edges() и change_fleet_direction(), а затем изменим update_aliens():

game_functions.py

def check_fleet_edges(ai_settings, aliens):

. ."""Реагирует на достижение пришельцем края экрана."""

(1) . .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():

(2) . . . .alien.rect.y += ai_settings.fleet_drop_speed

. .ai_settings.fleet_direction *= -1

. . . . . . . .

def update_aliens(ai_settings, aliens):

. ."""

. .Проверяет, достиг ли флот края экрана,

. . после чего обновляет позиции всех пришельцев во флоте.

. ."""

(3) . .check_fleet_edges(ai_settings, aliens)

aliens.update()

Функция check_fleet_edges() перебирает флот и вызывает check_edges() для каждого пришельца (1) . Если check_edges() возвращает True, значит, пришелец находится у края и весь флот должен сменить направление, поэтому вызывается функция change_fleet_direction() и происходит выход из цикла. Функция change_fleet_direction() перебирает пришельцев и уменьшает высоту каждого из них с использованием настройки fleet_drop_speed (2); затем направление fleet_direction меняется на противоположное, для чего текущее значение умножается на –1.

Мы изменили функцию update_aliens() и включили в нее проверку нахождения пришельцев у края вызовом check_fleet_edges() (3). Функция должна получать параметр ai_settings, поэтому аргумент ai_settings включается в вызов update_aliens():

alien_invasion.py

# Запуск основного цикла игры.

while True:

gf.check_events(ai_settings, screen, ship, bullets)

ship.update()

gf.update_bullets(bullets)

. . gf.update_aliens(ai_settings, aliens)

gf.update_screen(ai_settings, screen, ship, aliens, bullets)

Если запустить игру сейчас, флот будет двигаться влево-вправо между краями экрана и опускаться каждый раз, когда он доберется до края. Теперь можно переходить к реализации уничтожения и отслеживания пришельцев, сталкивающихся с кораблем или достигающих нижнего края экрана.

Упражнения

13-3. Капли: найдите изображение дождевой капли и создайте сетку из капель. Капли должны постепенно опускаться вниз и исчезать у нижнего края экрана.

13-4. Дождь: измените свой код в упражнении 13-3, чтобы при исчезновении ряда капель у нижнего края экрана новый ряд появлялся у верхнего края и начинал падение.