承接上两步:
1.python-pygame实现飞机大战-添加背景以及飞机运动
2.python-pygame实现飞机大战-2-添加敌机以及碰撞爆炸
3.python-pygame实现飞机大战-3-发射子弹以及击中敌机
这一步的作用在于:
1.增加了超级炸弹、加强子弹的补给功能:如下
2.用户获取超级炸弹、加强子弹的补给后,首先子弹会进行强化,同时按空格键释放大招,清空屏幕内的飞机
先准备资源,网络上也可以下载到,我这里直接用的教程的资源,为什么呢(确实好看,自己找的惨不忍睹),整个项目的包我已经放上去了,包括源码以及资源,注释能加的基本上都加了,可自行下载查看:https://download.csdn.net/download/weixin_38778769/19126067。或者直接下载下方的图片(这一步要用到的)
其实通过前几步,整个游戏基本的框架差不多了,就是在原来的框架上添加一下新的功能
这里加了一个supply.py:主要是补给的控制,包括补给的移动以及重置,其实写法都差不多
import pygame
from random import *
# 子弹补给
class Bullet_Supply(pygame.sprite.Sprite):
def __init__(self, bg_size):
pygame.sprite.Sprite.__init__(self)
# 子弹补给的图片
self.image = pygame.image.load('images/bullet_supply.png').convert_alpha()
# 定义屏幕宽高
self.width = bg_size[0]
self.height = bg_size[1]
# get_rect()是一个处理矩形图像的方法,返回值包含矩形的各属性,这里返回飞机图片1的位置,可以获取图片的宽高等属性
self.rect = self.image.get_rect()
# 随机子弹补给的位置,randint(a,b)即生成a<=n<=b,即在屏幕宽度,以及2倍的高度下随机生成
self.rect.left = randint(0, self.width - self.rect.width)
self.rect.top = randint(-2 * self.height, 0)
# 补给的存活状态,即是否显示以及能否触碰
self.active = False
# 补给下降状态
self.speed = 5
# 子弹补给运动
def move(self):
# 还未下降到最底部
if self.rect.top < self.height:
# 则继续向下运动
self.rect.top += self.speed
else:
# 下降到最底部后,状态变为未激活状态
self.active = False
# 子弹补给重置
def reset(self):
# 状态重置
self.active = True
# 随机子弹补给的位置,randint(a,b)即生成a<=n<=b,即在屏幕宽度,以及2倍的高度下随机生成
self.rect.left = randint(0, self.width - self.rect.width)
self.rect.top = randint(-2 * self.height, 0)
# 超级炸弹补给
class Bomb_Supply(pygame.sprite.Sprite):
def __init__(self, bg_size):
pygame.sprite.Sprite.__init__(self)
# 超级炸弹图片
self.image = pygame.image.load('images/bomb_supply.png').convert_alpha()
# 定义屏幕宽高
self.width = bg_size[0]
self.height = bg_size[1]
# get_rect()是一个处理矩形图像的方法,返回值包含矩形的各属性,这里返回飞机图片1的位置,可以获取图片的宽高等属性
self.rect = self.image.get_rect()
# 超级炸弹补给的位置,randint(a,b)即生成a<=n<=b,即在屏幕宽度,以及2倍的高度下随机生成
self.rect.left = randint(0, self.width - self.rect.width)
self.rect.top = randint(-2 * self.height, 0)
# 补给的存活状态,即是否显示以及能否触碰
self.active = False
# 补给下降状态
self.speed = 5
# 超级炸弹移动
def move(self):
# 还未下降到最底部
if self.rect.top < self.height:
# 则继续向下运动
self.rect.top += self.speed
else:
# 下降到最底部后,状态变为未激活状态
self.active = False
# 子弹补给重置
def reset(self):
# 状态重置
self.active = True
# 超级炸弹补给的位置,randint(a,b)即生成a<=n<=b,即在屏幕宽度,以及2倍的高度下随机生成
self.rect.left = randint(0, self.width - self.rect.width)
self.rect.top = randint(<