您的位置:首页 > 编程语言 > Python开发

Python游戏系列之七_显示得分

2017-03-31 09:09 162 查看
  Python游戏系列之七_显示得分

  这个游戏的玩法就是击落尽量多的敌方飞机,同时自己不被敌人撞到。

  这个小节将介绍得分的显示。

  一、pygame字体原理

  pygame.font库中有字体相关的类。

  pygame编程时可以调用系统中已经安装的字体,也可以使用自己的ttf字体文件,这样做的好处是可以将字体文件与游戏一起打包分发,避免玩家电脑没有这个字体的问题。

  1. 使用系统字体

font1 = pygame.font.SysFont('宋体', 16, True)  这句代码使用系统字体创建一个Font对象,3个参数分别是字体名、字体大小、是否粗体,还可以有第4个参数,是否斜体。一般只要前两个参数即可。
font_list = pygame.font.get_fonts()  get_fonts()函数可以得到系统中已安装的字体的列表。

  2. 使用ttf字体文件

my_font = pygame.font.Font('my_font.ttf', 16)  这句代码使用自己的ttf字体文件创建一个Font对象。

  3. 在屏幕上打印文字

  通过字体对象,可以生成一个surface,然后再调用blit()将surface显示出来。

  这里主要用到字体对象的render()方法,方法原型如下:

render(text, antialias, color, background=None) -> Surface  参数说明:
  参数1:要打印的文字。

  参数2:抗锯齿(True/False)。

  参数3:文字的颜色。颜色使用一个列表,提供rgb三个值。

  参数4:背景颜色。如果使用透明背景,这个参数可以不写。

  示例:

surface1 = font1.render(u'当前得分', True, [255, 0, 0])  注意,要打印汉字,需要加一个u,表示unicode编码。

  最后,将这个surface显示在屏幕上即可:

screen.blit(surface1, [20, 20])  将刚才的文字显示在x、y坐标分别为20、20的位置上。

  二、计算得分

  上一讲我们分析过,可以使用pygame.sprite库中的groupcollide()函数来进行碰撞检测,代码如下:

pygame.sprite.groupcollide(enemy_group, hero.bullets, True, True)  这个函数返回一个字典,字典的键是第1个精灵组中发生碰撞的精灵。
  既然这样,只要知道这个字典中的元素个数,就可以知道击落了几架飞机。而len()函数可以获知字典的元素个数。

  1. 添加变量

  在程序的变量定义部分,增加一个变量定义:

# 被击中的敌方飞机字典
enemy_hit_dict = dict()

  再增加一个变量定义,用于保存得分:
score = 0 # 得分

  增加一个常量,表示每击落一架飞机的得分:

# 击落敌方飞机得分
ENEMY_SCORE = 100

  还要增加一个字体的变量:
game_font = pygame.font.SysFont('宋体', 16, True) # 字体

  2. 碰撞检测部分

  将原有的碰撞检测部分的代码修改为:
# 检测我方子弹是否击中敌方飞机
enemy_hit_dict = pygame.sprite.groupcollide(enemy_group, hero.bullets, True, True)
score += len(enemy_hit_dict) * ENEMY_SCORE; # 计算得分
enemy_hit_group.add(enemy_hit_dict)

  3. 界面显示部分
  在更新屏幕之前,显示得分:

# 绘制游戏得分
screen.blit(game_font.render(u'当前得分:%d' % score, True, [255, 0, 0]), [20, 20])
# 更新屏幕
pygame.display.update()

  下面是运行界面:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pycharm python pygame