298 Глава 14 • Ведение
счета
В точке директива форматирования строки приказывает Python вставить
запятые при преобразовании числового значения в строку — например,
чтобы вместо 1000000 выводилась строка 1,000,000. Теперь при запуске игры
всегда будет отображаться аккуратно отформатированный, округленный счет
(рис. 14.3).
Рекорды
Каждый игрок желает превзойти предыдущий рекорд игры, поэтому мы будем от-
слеживать и выводить рекорды, чтобы у игрока была ясная цель. Рекорды будут
храниться в классе
GameStats
:
game_stats.py
def __init__(self, ai_settings):
...
# Рекорд не должен сбрасываться.
self.high_score = 0
Так как рекорд не должен сбрасываться при повторном запуске, значение
high_
score
инициализируется в
__init__()
, а не в
reset_stats()
.
Теперь изменим класс
Scoreboard
для отображения рекорда. Начнем с метода
__init__()
:
scoreboard.py
def __init__(self, ai_settings, screen, stats):
...
# Подготовка изображений счетов.
self.prep_score()
self.prep_high_score()
Рекорд должен отображаться отдельно от текущего счета, поэтому для подготовки
его изображения понадобится новый метод
prep_high_score()
:
scoreboard.py
def prep_high_score(self):
"""Преобразует рекордный счет в графическое изображение."""
high_score = int(round(self.stats.high_score, -1))
high_score_str = "{:,}".format(high_score)
self.high_score_image = self.font.render(high_score_str,
True,
self.text_color, self.ai_settings.bg_color)
# Рекорд выравнивается по центру верхней стороны.
self.high_score_rect = self.high_score_image.get_rect()
self.high_score_rect.centerx = self.screen_rect.centerx
self.high_score_rect.top = self.score_rect.top
Рекорд округляется до десятков и форматируется с запятыми . Затем для
рекорда строится графическое изображение , выполняется горизонтальное вы-
равнивание прямоугольника по центру экрана , а атрибут
top
прямоугольника
приводится в соответствие с верхней стороной изображения счета .
Подсчет очков
299
Теперь метод
show_score()
выводит текущий счет в правом верхнем углу, а ре-
корд — в центре верхней стороны:
scoreboard.py
def show_score(self):
"""Выводит счет на экран."""
self.screen.blit(self.score_image, self.score_rect)
self.screen.blit(self.high_score_image, self.high_score_rect)
Для обновления рекорда в файл
game_functions .py
добавляется новая функция
check_high_score()
:
game_functions.py
def check_high_score(stats, sb):
"""Проверяет, появился ли новый рекорд."""
if stats.score > stats.high_score:
stats.high_score = stats.score
sb.prep_high_score()
Достарыңызбен бөлісу: