Глава 14 • Ведение счета
Чтобы игрок видел, сколько попыток у него в начале игры, мы вызываем
prep_
ships()
при запуске новой игры. Это происходит в функции
_check_play_button()
в
AlienInvasion
:
alien_invasion.py def _check_play_button(self, mouse_pos):
...
if button_clicked and not self.stats.game_active:
...
self.sb.prep_score()
self.sb.prep_level()
self.sb.prep_ships()
...
Метод
prep_ships()
также вызывается при столкновении пришельца с кораблем,
чтобы изображение обновлялось при потере корабля:
alien_invasion.py def _ship_hit(self):
"""Обрабатывает столкновение корабля с пришельцем."""
if self.stats.ships_left > 0:
# Уменьшение ships_left и обновление панели счета
self.stats.ships_left -= 1
self.sb.prep_ships()
...
Метод
prep_ships()
вызывается после уменьшения значения
ships_left
, так что
при каждой потере корабля выводится правильное количество изображений.
На рис. 14.6 показана полная игровая информация на экране, с количеством остав-
шихся кораблей в левой верхней части экрана.
УПРАЖНЕНИЯ 14.5. Исторический рекорд: в текущей версии рекорд сбрасывается каждый раз, когда
игрок закрывает и перезапускает Alien Invasion. Чтобы этого не происходило, запишите
рекорд в файл перед вызовом
sys.exit()
и загрузите его при инициализации значения
в GameStats.
14.6. Рефакторинг: найдите функции и методы, которые решают более одной задачи,
и проведите рефакторинг, улучшающий структуру и эффективность кода. Например, пере-
местите часть кода функции
_check_bullet_alien_collisions()
, которая запускает новый
уровень при уничтожении флота, в функцию
start_new_level()
. Также переместите четыре
метода, вызываемых в методе
__init__()
класса Scoreboard, в метод
prep_images()
для со-
кращения длины
__init__()
. Метод
prep_images()
также может оказать помощь
_check_
play_button()
или
start_game()
, если вы уже провели рефакторинг
_check_play_button()
.
ПРИМЕЧАНИЕ Прежде чем браться за рефакторинг проекта, обратитесь к приложе-
нию Г . В нем рассказано, как восстановить рабочее состояние проекта, если в ходе
рефакторинга были допущены ошибки .