## 擊落敵艦
子彈擊中敵艦,我們可以使用 `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。此時游戲效果如下:

## 批量化出現敵艦
到目前為止,敵艦被撞擊后就都沒了。我們需要讓敵艦減少一定數量后就再增加一些敵艦。
首先,我們把初始化敵艦的代碼改為一個函數:
```
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))
```
此時,游戲效果如下:

## 碰撞檢測總結
在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射擊游戲(五)