Обнаружение коллизий с кораблем

We use cookies. Read the Privacy and Cookie Policy

Начнем с проверки коллизий между пришельцами и кораблем, чтобы мы могли правильно обработать столкновения с пришельцами. Коллизии «пришелец-корабль» проверяются немедленно после обновления позиции каждого пришельца:

game_functions.py

def update_aliens(ai_settings, ship, aliens):

"""

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

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

"""

check_fleet_edges(ai_settings, aliens)

aliens.update()

. .

. .# Проверка коллизий "пришелец-корабль".

(1) . .if pygame.sprite.spritecollideany(ship, aliens):

(2) . . . .print("Ship hit!!!")

Метод spritecollideany() получает два аргумента: спрайт и группу. Метод пытается найти любой элемент группы, вступивший в коллизию со спрайтом, и останавливает цикл по группе сразу же после обнаружения столкнувшегося элемента. В данном случае он перебирает группу aliens и возвращает первого пришельца, столкнувшегося с кораблем.

Если ни одна коллизия не обнаружена, spritecollideany() возвращает None, и блок if в точке (1) не выполняется. Если же будет обнаружен пришелец, столкнувшийся с кораблем, метод возвращает этого пришельца, и выполняется блок if: выводится сообщение Ship hit!!! (2). (При столкновении пришельца с кораблем необходимо выполнить ряд операций: удалить всех оставшихся пришельцев и пули, вернуть корабль в центр и создать новый флот. Прежде чем писать код всех этих операций, необходимо убедиться в том, что решение с обнаружением коллизий с кораблем работает правильно. Команда print всего лишь позволяет легко проверить правильность обнаружения коллизий.)

Далее необходимо передать ship функции update_aliens():

alien_invasion.py

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

while True:

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

ship.update()

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

. . gf.update_aliens(ai_settings, ship, aliens)

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

Если вы запустите Alien Invasion, при столкновении пришельца с кораблем в терминальном окне появляется сообщение Ship hit!!!. В ходе тестирования этого аспекта присвойте alien_drop_speed более высокое значение (например, 50 или 100), чтобы пришельцы быстрее добирались до вашего корабля.