scoreboard.py
import pygame.font
from pygame.sprite import Group
from ship import Ship
Подсчет очков
315
Так как мы собираемся создать группу кораблей, программа импортирует классы
Group
и
Ship
.
Метод
__init__()
выглядит так:
scoreboard.py
def __init__(self, ai_game):
"""Инициализирует атрибуты подсчета очков."""
self.ai_game = ai_game
self.screen = ai_game.screen
...
self.prep_level()
self.prep_ships()
Экземпляр игры присваивается атрибуту, так как он понадобится нам для создания
кораблей. Метод
prep_ships()
будет вызываться после
prep_level()
. Он выглядит
так:
scoreboard.py
def prep_ships(self):
"""Сообщает количество оставшихся кораблей."""
❶
self.ships = Group()
❷
for ship_number in range(self.stats.ships_left):
ship = Ship(self.ai_game)
❸
ship.rect.x = 10 + ship_number * ship.rect.width
❹
ship.rect.y = 10
❺
self.ships.add(ship)
Метод
prep_ships()
создает пустую группу
self.ships
для хранения экземпляров
кораблей
. В ходе заполнения этой группы цикл выполняется по одному разу
для каждого корабля, оставшегося у игрока
. В цикле создается новый корабль,
а координата
x
этого корабля задается так, чтобы корабли размещались рядом друг
с другом, разделенные интервалами величиной 10 пикселов
. Координата
y
за-
дается так, чтобы корабли были смещены на 10 пикселов от верхнего края экрана
и были выровнены по изображению текущего счета
. Наконец, каждый корабль
добавляется в группу
ships
.
Следующим шагом становится вывод кораблей на экран:
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)
self.screen.blit(self.level_image, self.level_rect)
self.ships.draw(self.screen)
При выводе кораблей на экран мы вызываем метод
draw()
для группы, а Pygame
рисует каждый отдельный корабль.
316
Достарыңызбен бөлісу: |