3.3 记分
下面来实现一个记分系统,以实时地跟踪玩家的得分,并显示最高得分、当前等级和余下的飞船数。 得分是游戏的一项统计信息,因此我们在GameStats 中添加一个score 属性:
class GameStats():
# 跟踪游戏的统计信息
def __init__(self,ai_settings):
# 初始化统计信息
self.ai_settings = ai_settings
self.reset_stats()
# 游戏刚启动时处于非活动状态
self.game_active = False
def reset_stats(self):
# 初始化在游戏运行期间可能变化的统计信息
self.ships_left = self.ai_settings.ship_limit
self.score = 0
为在每次开始游戏时都重置得分,我们在reset_stats() 而不是init() 中初始化score 。
3.3.1 显示得分
为在屏幕上显示得分,我们首先创建一个新类Scoreboard 。就当前而言,这个类只显示当前得分,但后面我们也将使用它来显示最高得分、等级和余下的飞船数。下面是这个类的前半部分,它被保存为文件scoreboard.py:
import pygame.font
class Scoreboard():
# 显示得分信息的类
def __init__(self,ai_settings,screen,stats):
# 初始化显示得分涉及的属性
self.screen = screen
self.screen.rect = screen.get_rect()
self.ai_settings = ai_settings
self.stats = stats
# 显示得分时用的字体设置
self.text_color = (30,30,30)
self.font = pygame.font.SysFont(None,48)
# 准备初始得分图像
self.prep_score()
为将要显示的文本转换为图像,我们调用了prep_score(),其定义如下:
def prep_score(self):
# 将得分转换为一幅渲染的图像
score_str = str(self.stats.score)
self.score_image = self.font.render(score_str,True,self.text_color,self.ai_settings.bg_color)
# 将得分放在屏幕右上角
self.score_rect = self.score_image.get_rect()
self.score_rect.right = self.screen_rect.right - 20
self.score_rect.top = 20
在prep_score() 中,我们首先将数字值stats.score 转换为字符串,再将这个字符串传递给创建图像的render()。为在屏幕上清晰地显示得分,我们 向render() 传递了屏幕背景色,以及文本颜色。
我们将得分放在屏幕右上角,并在得分增大导致这个数字更宽时让它向左延伸。为确保得分始终锚定在屏幕右边,我们创建了一个名为score_rect 的rect,让其右边缘与屏幕右边缘相距20像素,并让其上边缘与屏幕上边缘也相距20像素。
最后,我们创建方法show_score() ,用于显示渲染好的得分图像:
def show_score(self):
# 在屏幕上提示得分
self.screen.blit(self.score_image,self.score_rect)
这个方法将得分图像显示到屏幕上,并将其放在score_rect 指定的位置。
网友评论