М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет233/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   229   230   231   232   233   234   235   236   ...   334
Байланысты:
Изучаем Python


Глава 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()
.
ПРИМЕЧАНИЕ
Прежде чем браться за рефакторинг проекта, обратитесь к приложе-
нию Г . В нем рассказано, как восстановить рабочее состояние проекта, если в ходе 
рефакторинга были допущены ошибки .


Итоги


Достарыңызбен бөлісу:
1   ...   229   230   231   232   233   234   235   236   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет