大概内容
首先,我们说了,飞机大战和植物大战僵尸差不多,有碰撞检测啊、音效播放啊、等等一些东西
好,废话不多说,开始
首先我们知道游戏代码较多,我在这里用小甲鱼的吧,打开
首先,我们是没有下载pygame的。
我们看到了,这里面有好多的import
我们一个一个的看
import random
表示进口随机的意思
random是随机的意思
里边有好多执行语句,我就不一一讲解了
代码
from pygame.locals import *
from random import *
import traceback
import tkinter as tk
import pygame
import math
import sys
"""\/\/\/\/\/\/\/\/------我的飞机类------\/\/\/\/\/\/\/\/"""
class MyPlane (pygame.sprite.Sprite): #定义我的飞机类,继承动画精灵类(因为之后要进行碰撞检测)
def __init__(self,bg_size,me1_image,me2_image) :
pygame.sprite.Sprite.__init__(self)
self.me1_image = me1_image
self.me2_image = me2_image
self.image1 = pygame.image.load(me1_image).convert_alpha() #第一张飞机图片
self.image2 = pygame.image.load(me2_image).convert_alpha() #第二张飞机图片 两张图片是为了做出飞机喷气的效果
#添加坠机图片
self.destroy_images = []
self.me_destory_1_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\me_destroy_1.png").convert_alpha() #自身飞机炸毁第1张图片
self.me_destory_2_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\me_destroy_2.png").convert_alpha() #自身飞机炸毁第2张图片
self.me_destory_3_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\me_destroy_3.png").convert_alpha() #自身飞机炸毁第3张图片
self.me_destory_4_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\me_destroy_4.png" ).convert_alpha() #自身飞机炸毁第4张图片
self.destroy_images.extend([self.me_destory_1_image,self.me_destory_2_image,self.me_destory_3_image,self.me_destory_4_image])
self.rect = self.image1.get_rect() #获得飞机图片的尺寸
self.width , self.height = bg_size[0] , bg_size[1] #设置飞机允许活动地点
self.rect.left , self.rect.top = [ (self.width - self.rect.width) // 2 , \
(self.height - self.rect.height - 60) ] #设置我方飞机出现的位置
self.mask = pygame.mask.from_surface(self.image1) #给类添加上mask属性,之后可以按照完美碰撞
self.speed = 10 #设置飞机出现的速度
self.active = True#设置飞机是否生存的状态
self.invincible = True #是否处于无敌状态
def moveup(self): #飞机向上飞的函数
if self.rect.top > 0: #如果我方飞机没有飞出 上方边界
self.rect.top -= 10 #那么我方飞机朝上飞10个像素
else : #飞出 上方边界
self.rect.top = 0 #锁定在0的位置,不再发生变化
def movedown(self): #飞机向下飞的函数
if self.rect.bottom < (self.height - 60) : #如果我方飞机没有飞出 上方边界
self.rect.bottom += 10 #那么我方飞机朝下飞10个像素
else : #飞出 下方边界
self.rect.bottom = (self.height - 60) #锁定在底边界上方60的位置,不再发生变化
def moveleft(self): #飞机向左飞的函数
if self.rect.left > 0 : #如果我方飞机没有飞出 左方边界
self.rect.left -= 10 #那么我方飞机朝下左10个像素
else : #飞出 左方边界
self.rect.left = 0 #锁定在左边界的位置,不再发生变化
def moveright(self): #飞机向下飞的函数
if self.rect.right < self.width : #如果我方飞机没有飞出 上方边界
self.rect.right += 10 #那么我方飞机朝下飞10个像素
else : #飞出 下方边界
self.rect.right = self.width #锁定在底边界的位置,不再发生变化
def reset(self):
self.active = True#设置飞机是否生存的状态
self.invincible = True #重新设置飞机处于无敌状态
self.rect.left , self.rect.top = [ (self.width - self.rect.width) // 2 , \
(self.height - self.rect.height - 60) ] #设置我方飞机出现的位置
"""\/\/\/\/\/\/\/\/------敌机类------\/\/\/\/\/\/\/\/"""
"""本来这里其实可以使用类的继承,然后三种敌机分别继承这个敌机类生成新的敌机,但是在这里、
没有这样做的必要,因为三个类的差别并不是很大,所以不用那么繁杂"""
class SmallEnemy(pygame.sprite.Sprite): #定义我的低敌机类,继承自动画精灵
def __init__(self,bg_size,enemy1_image):
pygame.sprite.Sprite.__init__(self)
self.enemy1_image = enemy1_image
self.enemy1 = pygame.image.load(enemy1_image).convert_alpha() #载入低级敌机照片
#添加坠机图片
self.destroy_images = []
self.enemy1_down1_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy1_down1.png").convert_alpha() #低级敌机撞到爆炸第1张图片
self.enemy1_down2_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy1_down2.png").convert_alpha() #低级敌机撞到爆炸第2张图片
self.enemy1_down3_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy1_down3.png").convert_alpha() #低级敌机撞到爆炸第3张图片
self.enemy1_down4_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy1_down4.png").convert_alpha() #低级敌机撞到爆炸第4张图片
self.destroy_images.extend([self.enemy1_down1_image,self.enemy1_down2_image,self.enemy1_down3_image,self.enemy1_down4_image])
self.width ,self.height = bg_size[0] , bg_size[1] #获取生成低级敌机的活动范围
self.rect = self.enemy1.get_rect() #获得低级敌机的尺寸
self.rect.left , self.rect.top = [ randint(0 , self.width - self.rect.width ) ,\
randint(-5*self.height , 0) ] #在窗口的5倍之上的距离中产生飞机
self.mask = pygame.mask.from_surface(self.enemy1) #给类添加上mask属性,之后可以按照完美碰撞
self.speed = 3 #设置小敌机移动的速度
self.active = True #设置飞机是否生存的状态
def move(self) : #小敌机的移动函数
if self.rect.top < self.height : #如果小飞机的底超出窗口的下边框
self.rect.top += self.speed #小飞机向下移动他的速度
else : #如果小飞机已经超出窗口的下边界框
self.reset() #重置小飞机
def reset(self) : #重置小飞机函数
self.active = True#设置飞机是否生存的状态
self.rect.left , self.rect.top = [ randint(0 , self.width - self.rect.width ) ,\
randint(-5*self.height , 0) ] #在窗口的5倍之上的距离中产生飞机
class MiddleEnemy(pygame.sprite.Sprite): #定义我的中敌机类,继承自动画精灵
energy = 8
def __init__(self,bg_size,enemy2_image):
pygame.sprite.Sprite.__init__(self)
self.enemy2_image = enemy2_image
self.enemy2 = pygame.image.load(enemy2_image).convert_alpha() #载入中级敌机照片
#添加坠机图片
self.destroy_images = []
self.enemy2_down1_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy2_down1.png").convert_alpha() #中级敌机撞到爆炸第1张图片
self.enemy2_down2_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy2_down2.png").convert_alpha() #中级敌机撞到爆炸第2张图片
self.enemy2_down3_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy2_down3.png").convert_alpha() #中级敌机撞到爆炸第3张图片
self.enemy2_down4_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy2_down4.png").convert_alpha() #中级敌机撞到爆炸第4张图片
self.enemy2_hit_image = pygame.image.load(r"D:\Code\Python\Pygame\pygame11:飞机大战\images\enemy2_hit.png").convert_alpha() #中级敌机被子弹打到后图片
self.destroy_images.extend([self.enemy2_down1_image,self.enemy2_down2_image,self.enemy2_down3_image,self.enemy2_down4_image])
self.width ,self.height = bg_size[0] , bg_size[1] #获取生成低级敌机的活动范围
self.rect = self.enemy2.get_rect() #获得中级敌机的尺寸
self.rect.left , self.rect.top = [ randint(0 , self.width - self.rect.width ) ,\
randint(-10*self.height , 0) ] #在窗口的5倍之上的距离中产生飞机
self.mask = pygame.mask.from_surface(self.enemy2) #给类添加上mask属性,之后可以按照完美碰撞
self.speed = 2 #设置中敌机移动的速度
self.active = True #设置飞机是否生存的状态
self.energy = MiddleEnemy.energy #设置敌机的生命值
self.hit = False #敌机是否被撞的状态
def move(self) : #中敌机的移动函数
if self.rect.top < self.height : #如果中飞机的底超出窗口的下边框
self.rect.top += self.speed #中飞机向下移动他的速度
else : #如果中飞机已经超出窗口的下边界框
self.reset() #重置中飞机
def reset(self) : #重置中飞机函数
self.active = True#设置飞机是否生存的状态
self.hit = False
self.energy = 8
self.rect.left , self.rect.top = [ randint(0 , self.width - self.rect.width ) ,\
randint(-10*self.height , 0) ] #在窗口的5倍之上的距离中产生飞机
class BigEnemy(pygame.sprite.Sprite): #定义我的大敌机类,继承自动画精灵
energy = 20