【python3小白上路系列】实现记分系统(一)

2020-09-02  本文已影响0人  Charles_DT

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 指定的位置。

上一篇 下一篇

猜你喜欢

热点阅读