承接上两步:
1.python-pygame实现飞机大战-添加背景以及飞机运动
2.python-pygame实现飞机大战-2-添加敌机以及碰撞爆炸
在完成玩家飞机运动,生成敌机飞机以及两者碰撞爆炸后,这一步只要就是增加一下敌机发射子弹、子弹击中敌机的功能:先上图
先准备资源,网络上也可以下载到,我这里直接用的教程的资源,为什么呢(确实好看,自己找的惨不忍睹),整个项目的包我已经放上去了,包括源码以及资源,注释能加的基本上都加了,可自行下载查看:https://download.csdn.net/download/weixin_38778769/19126067。或者直接下载下方的图片(这一步要用到的)
这次有一说一,这个发射子弹的逻辑给我整的不轻,具体的实现逻辑就是四颗子弹不断循环,从而达到一种不断发射子弹的效果,但实际上只有四颗子弹来回运动
先放main.py,在上一步代码上添加了发射子弹、渲染子弹、子弹碰撞处理的模块
子弹逻辑如下图,最后四颗子弹不断循环
```python
import pygame
import sys
import traceback
from pygame.locals import *
from random import *
import myplane
import enemy
import bullet
# 初始化
pygame.init()
# 设置窗口大小
bg_size = width, height = 400, 700 # 实际上是元组
screen = pygame.display.set_mode(bg_size) # 设置窗口
pygame.display.set_caption("飞机大战") # 窗口标题
# 加载背景图片,对于普通图像的显示效果有没有convert都是一样的,但是 使用 convert 可以转换格式,提高 blit 的速度
background = pygame.image.load("images/background.png").convert()
# 设置黑、绿、红、百几种颜色对应值,后面会用到
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
WHITE = (255, 255, 255)
# 生成敌方小型飞机
def add_small_enemy(small_enemies, enemiesGroup, num):
for i in range(num):
smallenemy = enemy.SmallEnemy(bg_size)
# 精灵组来实现多个图像,很适合处理精灵列表,有添加,移除,绘制,更新等方法
# Group.sprites 精灵组
# Group.copy 复制
# Group.add 添加
# Group.remove 移除
# Group.has 判断精灵组成员
# Group.update 更新
# Group.draw 位块显示
# Group.clear - 绘制背景
# Group.empty 清空
# 将这一组敌机都添加上小型飞机属性,相当于统一处理,统一赋值
small_enemies.add(smallenemy)
enemiesGroup.add(smallenemy)
def main():
# 创建时钟对象(可以控制游戏循环频率)
clock = pygame.time.Clock()
# 生成玩家飞机
me = myplane.MyPlane(bg_size)
# 存放所有