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()
下面是运行界面:
这个游戏的玩法就是击落尽量多的敌方飞机,同时自己不被敌人撞到。
这个小节将介绍得分的显示。
一、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()
下面是运行界面:
相关文章推荐
- Python游戏系列之二_显示飞机
- 2D游戏引擎Allegro 系列教程(四) 文字渲染及显示汉字的方法
- 炸弹人游戏开发系列(3):显示地图
- 树莓派学习系列5——使用python编写简单的游戏程序
- Python游戏系列之一_pygame
- python 学习系列(3) 读取并显示图片的两种方法
- 网络游戏地图移动显示原理学习系列一
- Python游戏系列之五_创建敌机
- python中pygame针对游戏窗口的显示方法实例分析(附源码)
- 2015/11/3用Python写游戏,pygame入门(3):字体模块、事件显示和错误处理
- Python游戏系列之三_控制飞机移动
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克的显示
- WEBGL 2D游戏引擎研发系列 第五章 <操作显示对象>
- WEBGL 2D游戏引擎研发系列 第二章 <显示图片>
- python中pygame针对游戏窗口的显示方法实例分析(附源码)
- Python游戏引擎开发(三):显示图片
- pygame系列_游戏窗口显示策略
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示
- 【python系列】dict、list的中文显示
- 【Python系列6】Navigate for mysql显示Python导入的中文