alien_invasion.py def _update_aliens(self):
...
if pygame.sprite.spritecollideany(self.ship, self.aliens):
self._ship_hit()
Новый метод
center_ship()
добавляется в конец файла
ship .py
:
def center_ship(self):
"""Размещает корабль в центре нижней стороны."""
self.rect.midbottom = self.screen_rect.midbottom
self.x = float(self.rect.x)
Выравнивание корабля по центру выполняется так же, как и в
__init__()
. После
выравнивания сбрасывается атрибут
self.x
, чтобы в программе отслеживалась
точная позиция корабля.
ПРИМЕЧАНИЕ Обратите внимание: программа никогда не создает более одного ко-
рабля . Один экземпляр
ship
используется на протяжении всей игры, а при столкно-
вении с пришельцем он просто возвращается к центру экрана . О том, что у игрока не
осталось ни одного корабля, программа узнает из атрибута
ships_left
.
Запустите игру, подбейте нескольких пришельцев, а затем позвольте пришельцу
столкнуться с кораблем. Происходит небольшая пауза, на экране появляется новый
флот вторжения, а корабль возвращается в центр нижней части экрана.
Достижение нижнего края экрана
Если пришелец добирается до нижнего края экрана, программа будет реагировать
так же, как при столкновении с кораблем. Добавьте для проверки этого условия
новый метод в
alien_invasion .py
:
alien_invasion.py def _check_aliens_bottom(self):
"""Проверяет, добрались ли пришельцы до нижнего края экрана."""
screen_rect = self.screen.get_rect()
for alien in self.aliens.sprites():
❶
if alien.rect.bottom >= screen_rect.bottom:
# Происходит то же, что при столкновении с кораблем.
self._ship_hit()
break