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



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

alien_invasion.py
def check_bullet_alien_collisions(self):
...
if collisions:
for aliens in collisions.values():
self.stats.score += self.settings.alien_points * len(aliens)
self.sb.prep_score()
self.check_high_score()
...
Метод 
check_high_score()
должен вызываться только в том случае, если словарь 
collisions
присутствует, причем вызов выполняется после обновления счета для 
всех подбитых пришельцев.
Когда вы впервые играете в Alien Invasion, текущий счет одновременно будет 
наивысшим, поэтому он будет отображаться и как текущий счет, и как рекорд. Но 
в начале второй игры ваш предыдущий рекорд должен отображаться в середине, 
а текущий счет справа, как показано на рис. 14.4.
Рис. 14.4.
Рекордный счет выводится в середине экрана


312
Глава 14 • Ведение счета
Вывод уровня
Чтобы в игре выводился текущий уровень, сначала в класс 
GameStats
следует вклю-
чить атрибут для его представления. Чтобы уровень сбрасывался в начале каждой 
игры, инициализируйте его в 
reset_stats()
:
game_stats.py
def reset_stats(self):
"""Инициализирует статистику, изменяющуюся в ходе игры."""
self.ships_left = self.ai_settings.ship_limit
self.score = 0
self.level = 1
Чтобы класс 
Scoreboard
выводил текущий уровень, мы вызываем новый метод 
prep_level()
из 
__init__()
:
scoreboard.py
def __init__(self, ai_game):
...
self.prep_high_score()
self.prep_level()
Метод 
prep_level()
выглядит так:
scoreboard.py
def prep_level(self):
"""Преобразует уровень в графическое изображение."""
level_str = str(self.stats.level)

self.level_image = self.font.render(level_str, True,
self.text_color, self.settings.bg_color)
# Уровень выводится под текущим счетом.
self.level_rect = self.level_image.get_rect()

self.level_rect.right = self.score_rect.right

self.level_rect.top = self.score_rect.bottom + 10
Метод 
prep_level()
создает изображение на базе значения, хранящегося в 
stats.
level

, и приводит атрибут 
right
изображения в соответствие с атрибутом 
right
счета 

. Затем атрибут 
top
сдвигается на 10 пикселов ниже нижнего края 
изображения текущего счета, чтобы между счетом и уровнем оставался пустой 
интервал 

.
В метод 
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)
self.screen.blit(self.level_image, self.level_rect)


Подсчет очков
313
Добавленная строка выводит на экран изображение, представляющее уровень.
Увеличение 
stats.level
и обновление изображения уровня выполняются в 
_check_
bullet_alien_collisions()
:


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




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

    Басты бет