Вывод счета

We use cookies. Read the Privacy and Cookie Policy

Чтобы вывести счет на экран, мы сначала создаем новый класс 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.