## 游戏得分
为了记录游戏得分,我们在代码主循环外面定义`score = 0`变量,当子弹击中敌舰后,我们将得分加一。
```
bullet_collide_dic = pygame.sprite.groupcollide(bullet_sprites, enemy_sprites, True, True)
for bullet in bullet_collide_dic:
score += 1
print(bullet, bullet_collide_dic[bullet], score)
```
为了将得分显示在屏幕上,我们新增了一个渲染文字的方法:
```
pygame.font.init()
def show_text(word, color, position, font_size):
sys_font = pygame.font.SysFont('Comic Sans MS', font_size)
score_surface = sys_font.render(word, False, color)
screen.blit(score_surface, position)
```
在游戏窗口渲染完成后,我们将得分渲染到屏幕的右上角:
```
# 7. 渲染游戏背景
screen.fill(BLACK)
show_text('score:' + str(score), WHITE, (WIDTH - 100, 0), 30)
```
此时游戏效果如下:
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181023075400.png)
## 飞机生命数
一般的飞机大战我方的飞机都有一个生命值,当生命值等于0时才结束游戏。我们来完成这个效果。
首先,我们在plane里定义个life变量`self.life = 3`。
我们把敌舰撞击飞机的方法移动到plane中:
```
# 撞击
def strike(self, enemy_group):
collide_planes = pygame.sprite.spritecollide(self, enemy_group, True)
if len(collide_planes) > 0:
self.life -= 1
print('life', self.life)
# 是否存活
def is_survive(self):
return self.life > 0
```
在main.py中修改撞击方法
```
# 敌舰撞击飞机
plane.strike(enemy_sprites)
if not plane.is_survive():
running = False
```
此时,游戏效果如下:
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181023075445.png)
## 敌舰生命值
敌舰的生命值要比plane的麻烦一些,因为敌舰的生命值要画的敌舰的身上。首先,我们在init方法中增加font属性:`self.sys_font = pygame.font.SysFont(‘Comic Sans MS’, 20)`。 此外,我们需要改动敌舰的init 和update方法。看代码:
```
def update(self):
self.rect.y += self.speed
score_surface = self.sys_font.render('life:' + str(self.life), False, RED)
self.image.blit(score_surface, (10, 0))
```
同理,我们修改Main.py的增加得分逻辑:
```
# 子弹击毁敌舰
for enemy in enemy_sprites:
enemy.strike(bullet_sprites)
if not enemy.is_survive():
score += 1
print(enemy, score)
```
此时,游戏效果如下:
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181023075456.png)
- 课程介绍
- 搭建环境
- 什么是计算机
- 程序是怎么运行的
- 安装python
- 项目实例-安装IDE
- 变量和简单数据类型
- 数据&变量
- 数字
- 字符串
- 布尔类型
- 项目实例
- 容器-列表
- 容器
- 列表
- 项目实例
- 容器-字典
- 定义字典
- 项目实例
- 数据类型总结
- 条件语句
- python条件语句
- 项目实例
- 循环语句
- for循环
- while循环
- 项目实例
- 函数
- 5.0函数定义
- 5.2函数实战
- 6.文件系统
- 6.1 文件系统介绍&python查找文件
- 6.2 用python读写文件
- 7. python操作时间
- 8.面向对象
- 8.1 类和对象
- 8.2 继承和重写
- 8.3 面向对象项目实战
- 9 GUI编程
- 9.1 GUI基础
- 9.2 备忘清单GUI版
- 10.网络
- 10.1 网络的发展
- 10.2 python http
- 11.web开发
- 11.1 web基础&HTML
- 11.2 CSS&JavaScript
- 11.3 网页计算器
- 11.3 网站开发实战-播客搭建
- 11.3 python-web
- 12. 项目实战-数据处理
- 13. 项目实战-AI入门
- 13.1 环境搭建
- 心得
- 13.2 Tensorflow的瓜怎么吃
- 14 pygame
- 14.1 pygame Helloworld
- 14.4 pygame 动画基础 Animation
- 从0开始学python第14.5节 pygame 加载图片和声音
- 从0开始学python第14.6节 pygame.sprite(上)
- 14.7 pygame.sprite模块(下)
- 14.8 pygame射击游戏(一)
- pygame射击游戏(二)
- 14.8 pygame射击游戏(三)
- 14.8 pygame射击游戏(四)
- 14.8 pygame射击游戏(五)