Python项目实践之四:计分

Python项目实践之四:计分

需求:实现一个记分系统,以实时地跟踪玩家的得分,并显示最高得分、当前等级和余下的飞船数。

一、显示得分

得分是游戏的一项统计信息,因此我们在 GameStats 中的reset_stats()添加一个 score 属性:

    def reset_stats(self):
        """初始化在游戏运行期间可能变化的统计信息"""
        self.ships_left = self.ai_settings.ship_limit
        self.score = 0

为在屏幕上显示得分、最高得分、等级和余下的飞船数,我们首先创建一个新类 Scoreboard 。

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()

解释:
1、导入模块 pygame.font:在屏幕上显示文本信息。
2、self.text_color:设置字体颜色
3、self.font:创建字体对象
4、self.prep_score():将要显示的文本转化为图像

在scoreboard.py 中定义 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

解释:
1、首先,将数字值 stats.score 转换为字符串,然后将这个字符串传递给创建图像的 render(),并将设置好的文本颜色text_color和游戏的背影颜色bg_color传递给render(),构建了一个score_image对象。
2、其次,通过score_image对象的get_rect()方法获取了它的rect,然后将其定位于距离屏幕右边缘和顶部20像素。

创建方法 show_score() ,用于显示渲染好的得分图像(在scoreboard.py 中定义此方法):

    def show_score(self):
        """在屏幕上显示得分"""
        self.screen.blit(self.score_image, self.score_rect)

二、创建记分牌

为显示得分,我们在alien_invasion.py中创建一个 Scoreboard 实例:

......
	#创建分数显示实例
    sb = Scoreboard(ai_settings, screen, stats)
    ......

把创建的 Scoreboard 实例添加到主循环中用于实时更新屏幕的函数中:

......
		#每次循环重绘屏幕
        gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets,
play_button)
......

修改game_functions.py 中的 update_screen(),调用显示得分的方法:

...
	# 显示得分
    sb.show_score()
    ...

三、在外星人被消灭时更新得分

首先,在settings.py的可变设置的方法initialize_dynamic_settings中定义消灭一个外星人的得分:

......
		# 记分
        self.alien_points = 50
        ......

只有在外星人被消灭了才改变得分,所以我们在响应子弹和外星人的碰撞的函数中添加此项功能:

def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship, aliens, bullets):
    
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值