Конец игры
Программа Alien Invasion уже на что-то похожа, но игра длится бесконечно. Значение ships_left просто продолжает уходить в отрицательную бесконечность. Добавим в GameStats новый атрибут — флаг game_active, который завершает игру после потери последнего корабля:
game_stats.py
def __init__(self, settings):
....
. .# Игра Alien Invasion запускается в активном состоянии.
. .self.game_active = True
Добавим в ship_hit() код, который сбрасывает флаг game_active в состояние False при потере игроком последнего корабля:
game_functions.py
def ship_hit(ai_settings, stats, screen, ship, aliens, bullets):
"""Обрабатывает столкновение корабля с пришельцем."""
. .if stats.ships_left > 0:
# Уменьшение ships_left.
stats.ships_left -= 1
...
# Пауза.
sleep(0.5)
. .else:
. . . .stats.game_active = False
Бульшая часть кода ship_hit() осталась неизменной. Весь существующий код был перемещен в блок if, который проверяет, что у игрока остался хотя бы один корабль. Если корабли не кончились, программа создает новый флот, делает паузу и продолжает игру. Если же игрок потерял последний корабль, флаг game_active переводится в состояние False.