Вывод счета

Чтобы вывести счет на экран, мы сначала создаем новый класс Scoreboard. Пока этот класс ограничивается выводом текущего счета, но мы используем его для вывода рекордного счета, уровня и количества оставшихся кораблей. Ниже приведена первая часть класса; сохраните ее под именем scoreboard.py:

scoreboard.py

import pygame.font

class Scoreboard():

. ."""Класс для вывода игровой информации."""

(1) . .def __init__(self, ai_settings, screen, stats):

. . . ."""Инициализирует атрибуты подсчета очков."""

. . . .self.screen = screen

. . . .self.screen_rect = screen.get_rect()

. . . .self.ai_settings = ai_settings

. . . .self.stats = stats

. . . .

. . . .# Настройки шрифта для вывода счета.

(2) . . . .self.text_color = (30, 30, 30)

(3) . . . .self.font = pygame.font.SysFont(None, 48)

. . . .# Подготовка исходного изображения.

(4) . . . .self.prep_score()

Так как Scoreboard выводит текст на экран, код начинается с импортирования модуля pygame.font. Затем __init__() передаются параметры ai_settings, screen и stats, чтобы класс мог выводить информацию об отслеживаемых показателях (1) . Далее назначается цвет текста (2) и создается экземпляр объекта шрифта (3).

Чтобы преобразовать выводимый текст в изображение, мы вызываем метод prep_score() (4), который определяется следующим образом:

scoreboard.py

. .def prep_score(self):

. . . ."""Преобразует текущий счет в графическое изображение."""

(1) . . . .score_str = str(self.stats.score)

(2) . . . .self.score_image = self.font.render(score_str, True, self. text_color,

. . . . . .self.ai_settings.bg_color)

. . . .

. . . .# Вывод счета в правой верхней части экрана.

(3) . . . .self.score_rect = self.score_image.get_rect()

(4) . . . .self.score_rect.right = self.screen_rect.right - 20

(5) . . . .self.score_rect.top = 20

В методе prep_score() преобразуем числовое значение stats.score в строку (1) ; эта строка передается методу render(), создающему изображение (2). Чтобы счет был хорошо виден на экране, мы передаем render() цвет фона и цвет текста.

Счет размещается в правой верхней части экрана и расширяется влево с ростом значения и ширины числа. Чтобы счет всегда оставался выровненным по правой стороне, мы создаем прямоугольник rect с именем score_rect (3) и смещаем его правую сторону на 20 пикселов от правого края экрана (4). Затем верхняя сторона прямоугольника смещается на 20 пикселов вниз от верхнего края экрана (5).

Остается создать метод show_score() для вывода построенного графического изображения:

scoreboard.py

def show_score(self):

. ."""Выводит счет на экран."""

. .self.screen.blit(self.score_image, self.score_rect)

Метод выводит счет на экран в позиции, определяемой score_rect.