## 击落敌舰
子弹击中敌舰,我们可以使用 `pygame.sprite.groupcollide`方法来检测。我们向Main.py文件的按键控制区下增加代码:
```
# 子弹击毁敌舰
bullet_collide_dic = pygame.sprite.groupcollide(bullet_sprites, enemy_sprites, True, True)
for bullet in bullet_collide_dic:
print(bullet, bullet_collide_dic[bullet])
```
## 敌舰撞机
在游戏开始的时候,我们需要让plane位于screen的底部:
```
# 飞机位于舞台底部
self.rect.x = self.bg_size[0] / 2
self.rect.y = self.bg_size[1] - self.rect.height
```
敌舰装机和子弹击毁敌舰类似,我们在Main.py里增加代码
```
if pygame.sprite.spritecollideany(plane, enemy_sprites) is not None:
print('killed')
running = False
```
当飞机被击落后,游戏就结束了。因此,我们把 running 设置为False。此时游戏效果如下:
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181022073214.png)
## 批量化出现敌舰
到目前为止,敌舰被撞击后就都没了。我们需要让敌舰减少一定数量后就再增加一些敌舰。
首先,我们把初始化敌舰的代码改为一个函数:
```
def init_enemy(size):
for i in range(size):
enemy = Enemy((random.randrange(0, WIDTH), random.randrange(0, 50)))
enemy_sprites.add(enemy)
all_sprites.add(enemy)
# 初始化敌舰
init_enemy(ENEMY_SIZE)
```
在子弹击毁敌舰后,我们判断敌舰数量是否小于min_size,如果小于这个数字,就再初始化一次敌舰:
```
# 增加敌舰
if len(enemy_sprites) <= ENEMY_MIN_SIZE:
init_enemy(ENEMY_SIZE - len(enemy_sprites))
```
此时,游戏效果如下:
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181022073309.png)
## 碰撞检测总结
在sprite里,有三个碰撞检测方法:`pygame.sprite.groupcollide(bullet_sprites, enemy_sprites, True, True)` 两个group是否发生碰撞;`pygame.sprite.spritecollideany(plane, enemy_sprites)` 一个sprite是否碰到一个group里的任何一个sprite;`pygame.sprite.spritecollide(plane,enemy_sprites,True)`获取一个plane碰到group里的所有sprite。
可以发现,经过pygame的封装。碰撞检测变得非常简单。在我们的游戏开发里,非经常用到各种各样的角色碰撞。这是游戏的核心。
下节课,我们来记录一下游戏的得分,并给我们的飞机和敌舰增加些生命值,让游戏更好玩。
- 课程介绍
- 搭建环境
- 什么是计算机
- 程序是怎么运行的
- 安装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射击游戏(五)