Завершение игры
275
Обнаружение коллизий с кораблем
Начнем с проверки коллизий между пришельцами и кораблем, чтобы мы
могли правильно обработать столкновения с пришельцами. Коллизии «при-
шелец-корабль» проверяются немедленно после обновления позиции каждого
пришельца:
game_functions.py
def update_aliens(ai_settings, ship, aliens):
"""
Проверяет,
достиг ли флот края экрана,
после чего обновляет позиции всех пришельцев во флоте.
"""
check_fleet_edges(ai_settings, aliens)
aliens.update()
# Проверка коллизий "пришелец-корабль".
if pygame.sprite.spritecollideany(ship, aliens):
print("Ship hit!!!")
Метод
spritecollideany()
получает два аргумента: спрайт и группу. Метод пыта-
ется найти любой элемент группы, вступивший в коллизию со спрайтом, и оста-
навливает цикл по группе сразу же после обнаружения столкнувшегося элемента.
В данном случае он перебирает группу
aliens
и возвращает первого пришельца,
столкнувшегося с кораблем.
Если ни одна коллизия не обнаружена,
spritecollideany()
возвращает
None
, и блок
if
в точке
не выполняется. Если же будет обнаружен пришелец, столкнувшийся
с кораблем, метод возвращает этого пришельца, и выполняется блок
if
: выводится
сообщение
Ship
hit!!!
. (При столкновении пришельца с кораблем необходимо
выполнить ряд операций: удалить всех оставшихся пришельцев и пули, вернуть
корабль в центр и создать новый флот. Прежде чем писать код всех этих операций,
необходимо убедиться в том, что решение с обнаружением коллизий с кораблем
работает правильно. Команда
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), чтобы пришельцы быстрее добирались до вашего корабля.