飞机大战内容讲解

本文介绍了飞机大战游戏的开发要点,包括碰撞检测、音效播放等核心功能,并引用了小甲鱼的代码示例,强调了未安装pygame库的情况。通过逐行解释代码中的import语句,特别是random模块的作用,帮助读者理解游戏逻辑。文章还提到了代码异常处理的注意事项。
摘要由CSDN通过智能技术生成

大概内容

首先,我们说了,飞机大战和植物大战僵尸差不多,有碰撞检测啊、音效播放啊、等等一些东西

好,废话不多说,开始

首先我们知道游戏代码较多,我在这里用小甲鱼的吧,打开

首先,我们是没有下载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

    
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值