python制作飞机大战-附源码

想要用python制作飞机大战,首先需要使用第三方库pygame,用pip即可完成安装

pip install pygame
首先需要导入用到的模块
import pygame
from pygame.locals import *
import random
import time
import sys
创建一个玩家飞机的类
class HeroPlane(pygame.sprite.Sprite):
    #存放玩家飞机所有子弹的组
    bullets = pygame.sprite.Group()
    
    def __init__(self,screen):
        #这个精灵的初始化方法 必须调用
        pygame.sprite.Sprite.__init__(self)
        
        #载入玩家飞机图片
        self.player = pygame.image.load("hero1.png")

        #根据图片imgae获取矩形对象
        self.rect = self.player.get_rect()
        self.rect.topleft = [Manager.bg_size[0] / 2 - 46 / 2, 600]

        #飞机速度
        self.speed = 8

        #记录当前的窗口对象
        self.screen = screen

        #装子弹的组
        self.bullets = pygame.sprite.Group()

    def key_control(self):
        key_pressed = pygame.key.get_pressed()

        if key_pressed[K_w]:
            self.rect.top -= self.speed
        if key_pressed[K_s]:
            self.rect.bottom += self.speed
        if key_pressed[K_a]:
            self.rect.left -= self.speed
        if key_pressed[K_d]:
            self.rect.right += self.speed
        if key_pressed[K_SPACE]:
            #按下空格发射子弹
            bullet = Bullet(self.screen,self.rect.left,self.rect.top)
            #把子弹装进组
            self.bullets.add(bullet)
            #存放所有飞机子弹的组
            HeroPlane.bullets.add(bullet)

    def display(self):
        #将玩家飞机显示到窗口中
        self.screen.blit(self.player,self.rect)
        
        #更新子弹坐标
        self.bullets.update()

        #把所有子弹全部添加到屏幕
        self.bullets.draw(self.screen)

    def update(self):
        self.key_control()
        self.display()

    @classmethod
    def clear_bullets(cls):
        #清空子弹
        cls.bullets.empty()
创建敌方飞机的类
class EnemyPlane(pygame.sprite.Sprite):
    #敌方所有子弹
    enemy_bullets = pygame.sprite.Group()
    def __init__(self,screen):
        #这个精灵的初始化方法 必须调用
        pygame.sprite.Sprite.__init__(self)

        #载入敌方飞机图片
        self.player = pygame.image.load("enemy0.png")

        #根据图片imgae获取矩形对象
        self.rect = self.player.get_rect()

        x = random.randrange(1,Manager.bg_size[0],50)
        self.rect.topleft = [x,0]

        #飞机速度
        self.speed = 2

        #记录当前的窗口对象
        self.screen = screen

        #装子弹的列表
        self.bullets = pygame.sprite.Group()

        #敌机移动方向
        self.direction = "right"

    def display(self):
        #将玩家飞机显示到窗口中
        self.screen.blit(self.player,self.rect)
        
        #更新子弹坐标
        self.bullets.update()

        #把所有子弹全部添加到屏幕
        self.bullets.draw(self.screen)

    def auto_move(self):
        if self.direction == "right":
            self.rect.right += self.speed
        elif self.direction == "left":
            self.rect.right -= self.speed

        if self.rect.right >= Manager.bg_size[0]:
            self.direction = "left"
        elif self.rect.left < 0:
            self.direction = "right"

        self.rect.bottom += self.speed

    def auto_fire(self):
        """自动开火 创建子弹对象 添加进列表"""
        random_num = random.randint(1,10)
        if random_num == 3:
            bullet = EnemyBullet(self.screen,self.rect.left,self.rect.top)
            self.bullets.add(bullet)
            #把子弹添加到类属性的子弹组里
            EnemyPlane.enemy_bullets.add(bullet)

    def update(self):
        self.auto_move()
        self.auto_fire()
        self.display()

    @classmethod
    def clear_bullets(cls):
        #清空子弹
        cls.enemy_bullets.empty()
创建子弹类
class Bullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        #精灵类初始化
        pygame.sprite.Sprite.__init__(self)

        #创建图片
        self.image = pygame.image.load("bullet.png")

        #获取矩形对象
        self.rect = self.image.get_rect()
        self.rect.topleft = [x + 46 / 2 - 4 / 2, y]
        
        #窗口
        self.screen = screen
        
        #速度
        self.speed = 15

    def update(self):
        #修改子弹坐标
        self.rect.top -= self.speed
        #如果子弹移出屏幕上方 则销毁子弹对象
        if self.rect.top < -11:
           self.kill()
创建敌方子弹类
class EnemyBullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        #精灵类初始化
        pygame.sprite.Sprite.__init__(self)

        #创建图片
        self.image = pygame.image.load("bullet1.png")

        #获取矩形对象
        self.rect = self.image.get_rect()
        self.rect.topleft = [x + 58 / 2 - 4 / 2, y + 30]
    
        #窗口
        self.screen = screen
        #速度
        self.speed = 15

    def update(self):
        #修改子弹坐标
        self.rect.top += self.speed
        #如果子弹移出屏幕上方 则销毁子弹对象
        if self.rect.top > Manager.bg_size[1]:
            self.kill()
创建游戏音乐类
class GameSound(object):
    def __init__(self):
        pygame.mixer.init() #音乐模块初始化
        pygame.mixer.music.load("音乐文件路径")
        pygame.mixer.music.set_volume(0.5) #声音大小

        #self.__bomb = pygame.mixer.Sound("音乐文件路径")

    def playBackgroundMusic(self):
        pygame.mixer.music.play(-1) #开始播放音乐

    def playBombSound(self):
        pygame.mixer.Sound.play(self.__bomb)

因为没有音乐素材,所以该类没有被调用

可以自行添加素材

创建爆炸类
class Bomb(object):
    #初始化碰撞
    def __init__(self,screen,type):
        self.screen = screen
        if type == "enemy":
            #加载爆炸资源
            self.mImage = [pygame.image.load
                           ("enemy0_down" + str(v) + ".png") for v in range(1,5)]
        else:
            self.mImage = [pygame.image.load
                           ("hero" + str(v) + ".png") for v in range(2,6)]

        #设置当前爆炸索引
        self.mIndex = 0
        #爆炸设置
        self.mPos = [0,0]
        #是否可见
        self.mVisible = False

    def action(self,rect):
        #触发爆炸方法draw
        #爆炸的坐标
        self.mPos[0] = rect.left
        self.mPos[1] = rect.top
        #打开爆炸的开关
        self.mVisible = True

    def draw(self):
        if not self.mVisible:
            return
        self.screen.blit(self.mImage[self.mIndex],(self.mPos[0],self.mPos[1]))
        self.mIndex += 1
        if self.mIndex >= len(self.mImage):
            #如果下标已经到最后了 代表爆炸结束
            #下标位置重置 mVisible重置
            self.mIndex = 0
            self.mVisible = False
创建游戏背景图的类

该类主要用于地图的移动

class GameBackground(object):
    #初始化地图
    def __init__(self,screen):
        self.mImage1 = pygame.image.load("background.png")
        self.mImage2 = pygame.image.load("background.png")
        
        #窗口
        self.screen = screen
        
        #辅助移动地图
        self.y1 = 0
        self.y2 = -Manager.bg_size[1]

    #绘制地图
    def draw(self):
        self.screen.blit(self.mImage1,(0,self.y1))
        self.screen.blit(self.mImage2,(0,self.y2))

    #移动地图
    def move(self):
        movespeed=5
        self.y1 += movespeed
        self.y2 += movespeed
        if self.y1 >= Manager.bg_size[1]:
            self.y1 = 0
        if self.y2 >= 0:
            self.y2 = -Manager.bg_size[1]
创建管理类
class Manager(object):
    bg_size = (480,700)
    #创建敌机定时器id
    create_enemy_id = 10
    #游戏结束 倒计时的id
    game_over_id = 11
    #游戏是否结束
    is_game_over = False
    #倒计时时间
    over_time = 3
    
    def __init__(self):
        pygame.init() #字体初始化
        #创建窗口
        self.screen=pygame.display.set_mode(Manager.bg_size,0,32)

        #创建背景图片
        #self.background = pygame.image.load("background.png")
        self.map = GameBackground(self.screen)

        #初始化一个装玩家精灵的group
        self.players = pygame.sprite.Group()
        
        #初始化一个装敌机精灵的group
        self.enemys = pygame.sprite.Group()
        
        #初始化一个玩家爆炸的对象
        self.player_bomb = Bomb(self.screen,"player")
        
        #初始化一个敌机爆炸的对象
        self.enemy_bomb = Bomb(self.screen,"enemy")
        
        #初始化一个声音播放的对象
        #self.sound = GameSound()

    def exit(self):
        pygame.quit()
        #exit()

    def show_over_text(self):
        #游戏结束 倒计时后重新开始
        self.drawText("游戏结束 %d" %Manager.over_time, 100, Manager.bg_size[1] / 2,
                      textHeight = 50, fontColor = [255, 0 ,0])

    def game_over_timer(self):
        self.show_over_text()
        #倒计时-1
        Manager.over_time -= 1
        if Manager.over_time == 0:
            #参数2改为0 定时间静止
            pygame.time.set_timer(Manager.game_over_id,0)
            #倒计时后重新开始
            Manager.over_time = 3
            Manager.is_game_over = False
            self.start_game()

    def start_game(self):
        #重新开始游戏 有些类属性要清空
        EnemyPlane.clear_bullets()
        HeroPlane.clear_bullets()
        manager = Manager()
        manager.main()

    def new_player(self):
        #创建飞机对象 添加到玩家的组
        player = HeroPlane(self.screen)
        self.players.add(player)

    def new_enemy(self):
        #创建敌机的对象 添加到敌机的组
        enemy = EnemyPlane(self.screen)
        self.enemys.add(enemy)

    #绘制文字
    def drawText(self, text, x, y, textHeight=20, fontColor=(255,0,0), backgroundColor=None):
        #通过字体文件获取字体对象
        font_obj = pygame.font.Font("微软雅黑.ttf",textHeight)
        #配置要显示的文字
        text_obj = font_obj.render(text,True,fontColor,backgroundColor)
        #获取要显示的对象的rect
        text_rect = text_obj.get_rect()
        #设置显示对象的坐标
        text_rect.topleft = (x, y)
        #绘制字到指定区域
        self.screen.blit(text_obj, text_rect)

    def main(self):
        #播放背景音乐
        #self.sound.playBackgroundMusic()
        
        #创建一个玩家
        self.new_player()
        
        #开启创建敌机的定时器
        pygame.time.set_timer(Manager.create_enemy_id, 1000)
        
        while True:
            #把背景图片贴到窗口
            #self.screen.blit(self.background,(0,0))

            #移动地图
            self.map.move()

            #把地图贴到窗口上
            self.map.draw()

            #绘制文字
            self.drawText("血量:10000",0,0)

            if Manager.is_game_over:
                #判断游戏结束才显示结束文字
                self.show_over_text()

            for event in pygame.event.get():
                if event.type == QUIT:
                    self.exit()

                elif event.type == Manager.create_enemy_id:
                    #创建一个敌机
                    self.new_enemy()

                elif event.type == Manager.game_over_id:
                    #定时器出发的事件
                    self.game_over_timer()

            #调用爆炸的对象
            self.player_bomb.draw()
            self.enemy_bomb.draw()

            #玩家飞机和敌机子弹的判断
            if self.players.sprites():
                isover = pygame.sprite.spritecollide(self.players.sprites()[0],EnemyPlane.enemy_bullets,True)
                if isover:
                    Manager.is_game_over = True #标示游戏结束
                    pygame.time.set_timer(Manager.game_over_id, 1000) #开始游戏倒计时
                    self.player_bomb.action(self.players.sprites()[0].rect)
                    #把玩家飞机从精灵组移除
                    self.players.remove(self.players.sprites()[0])
                    #爆炸的声音
                    #self.sound.playBombSound()

            #判断飞机之间的碰撞 只能判断两个精灵组之间的碰撞
            iscollide = pygame.sprite.groupcollide(self.players,self.enemys,True,True)

            if iscollide:
                Manager.is_game_over = True #标志着游戏结束
                pygame.time.set_timer(Manager.game_over_id, 1000) #开启游戏倒计时
                
                items = list(iscollide.items())[0]
                x = items[0]
                y = items[1][0]
                
                #玩家爆炸图片
                self.player_bomb.action(x.rect)
                
                #敌机爆炸图片
                self.enemy_bomb.action(y.rect)
                
                #爆炸的声音
                #self.sound.playBombSound()

            #玩家子弹和所有敌机的碰撞判断
            is_enemy = pygame.sprite.groupcollide(HeroPlane.bullets,self.enemys,True,True)
            if is_enemy:
                items = list(is_enemy.items())[0]
                y = items[1][0]
                #敌机爆炸图片
                self.enemy_bomb.action(y.rect)
                #爆炸的声音
                #self.sound.playBombSound()
    
            #玩家飞机和子弹的显示
            self.players.update()
            
            #敌机和子弹的显示
            self.enemys.update()
            
            #刷新窗口内容
            pygame.display.update()
            time.sleep(0.01)
最后进行类的实例化
if __name__=="__main__":
    manager = Manager()
    manager.main()

完整代码如下

import pygame
from pygame.locals import *
import random
import time
import sys

class HeroPlane(pygame.sprite.Sprite):
    #存放玩家飞机所有子弹的组
    bullets = pygame.sprite.Group()
    
    def __init__(self,screen):
        #这个精灵的初始化方法 必须调用
        pygame.sprite.Sprite.__init__(self)
        
        #载入玩家飞机图片
        self.player = pygame.image.load("hero1.png")

        #根据图片imgae获取矩形对象
        self.rect = self.player.get_rect()
        self.rect.topleft = [Manager.bg_size[0] / 2 - 46 / 2, 600]

        #飞机速度
        self.speed = 8

        #记录当前的窗口对象
        self.screen = screen

        #装子弹的组
        self.bullets = pygame.sprite.Group()

    def key_control(self):
        key_pressed = pygame.key.get_pressed()

        if key_pressed[K_w]:
            self.rect.top -= self.speed
        if key_pressed[K_s]:
            self.rect.bottom += self.speed
        if key_pressed[K_a]:
            self.rect.left -= self.speed
        if key_pressed[K_d]:
            self.rect.right += self.speed
        if key_pressed[K_SPACE]:
            #按下空格发射子弹
            bullet = Bullet(self.screen,self.rect.left,self.rect.top)
            #把子弹装进组
            self.bullets.add(bullet)
            #存放所有飞机子弹的组
            HeroPlane.bullets.add(bullet)

    def display(self):
        #将玩家飞机显示到窗口中
        self.screen.blit(self.player,self.rect)
        
        #更新子弹坐标
        self.bullets.update()

        #把所有子弹全部添加到屏幕
        self.bullets.draw(self.screen)

    def update(self):
        self.key_control()
        self.display()

    @classmethod
    def clear_bullets(cls):
        #清空子弹
        cls.bullets.empty()

class EnemyPlane(pygame.sprite.Sprite):
    #敌方所有子弹
    enemy_bullets = pygame.sprite.Group()
    def __init__(self,screen):
        #这个精灵的初始化方法 必须调用
        pygame.sprite.Sprite.__init__(self)

        #载入敌方飞机图片
        self.player = pygame.image.load("enemy0.png")

        #根据图片imgae获取矩形对象
        self.rect = self.player.get_rect()

        x = random.randrange(1,Manager.bg_size[0],50)
        self.rect.topleft = [x,0]

        #飞机速度
        self.speed = 2

        #记录当前的窗口对象
        self.screen = screen

        #装子弹的列表
        self.bullets = pygame.sprite.Group()

        #敌机移动方向
        self.direction = "right"

    def display(self):
        #将玩家飞机显示到窗口中
        self.screen.blit(self.player,self.rect)
        
        #更新子弹坐标
        self.bullets.update()

        #把所有子弹全部添加到屏幕
        self.bullets.draw(self.screen)

    def auto_move(self):
        if self.direction == "right":
            self.rect.right += self.speed
        elif self.direction == "left":
            self.rect.right -= self.speed

        if self.rect.right >= Manager.bg_size[0]:
            self.direction = "left"
        elif self.rect.left < 0:
            self.direction = "right"

        self.rect.bottom += self.speed

    def auto_fire(self):
        """自动开火 创建子弹对象 添加进列表"""
        random_num = random.randint(1,10)
        if random_num == 3:
            bullet = EnemyBullet(self.screen,self.rect.left,self.rect.top)
            self.bullets.add(bullet)
            #把子弹添加到类属性的子弹组里
            EnemyPlane.enemy_bullets.add(bullet)

    def update(self):
        self.auto_move()
        self.auto_fire()
        self.display()

    @classmethod
    def clear_bullets(cls):
        #清空子弹
        cls.enemy_bullets.empty()

class Bullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        #精灵类初始化
        pygame.sprite.Sprite.__init__(self)

        #创建图片
        self.image = pygame.image.load("bullet.png")

        #获取矩形对象
        self.rect = self.image.get_rect()
        self.rect.topleft = [x + 46 / 2 - 4 / 2, y]
        
        #窗口
        self.screen = screen
        
        #速度
        self.speed = 15

    def update(self):
        #修改子弹坐标
        self.rect.top -= self.speed
        #如果子弹移出屏幕上方 则销毁子弹对象
        if self.rect.top < -11:
           self.kill()
           

class EnemyBullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        #精灵类初始化
        pygame.sprite.Sprite.__init__(self)

        #创建图片
        self.image = pygame.image.load("bullet1.png")

        #获取矩形对象
        self.rect = self.image.get_rect()
        self.rect.topleft = [x + 58 / 2 - 4 / 2, y + 30]
    
        #窗口
        self.screen = screen
        #速度
        self.speed = 15

    def update(self):
        #修改子弹坐标
        self.rect.top += self.speed
        #如果子弹移出屏幕上方 则销毁子弹对象
        if self.rect.top > Manager.bg_size[1]:
            self.kill()

class GameSound(object):
    def __init__(self):
        pygame.mixer.init() #音乐模块初始化
        pygame.mixer.music.load("音乐文件路径")
        pygame.mixer.music.set_volume(0.5) #声音大小

        #self.__bomb = pygame.mixer.Sound("音乐文件路径")

    def playBackgroundMusic(self):
        pygame.mixer.music.play(-1) #开始播放音乐

    def playBombSound(self):
        pygame.mixer.Sound.play(self.__bomb)

class Bomb(object):
    #初始化碰撞
    def __init__(self,screen,type):
        self.screen = screen
        if type == "enemy":
            #加载爆炸资源
            self.mImage = [pygame.image.load
                           ("enemy0_down" + str(v) + ".png") for v in range(1,5)]
        else:
            self.mImage = [pygame.image.load
                           ("hero" + str(v) + ".png") for v in range(2,6)]

        #设置当前爆炸索引
        self.mIndex = 0
        #爆炸设置
        self.mPos = [0,0]
        #是否可见
        self.mVisible = False

    def action(self,rect):
        #触发爆炸方法draw
        #爆炸的坐标
        self.mPos[0] = rect.left
        self.mPos[1] = rect.top
        #打开爆炸的开关
        self.mVisible = True

    def draw(self):
        if not self.mVisible:
            return
        self.screen.blit(self.mImage[self.mIndex],(self.mPos[0],self.mPos[1]))
        self.mIndex += 1
        if self.mIndex >= len(self.mImage):
            #如果下标已经到最后了 代表爆炸结束
            #下标位置重置 mVisible重置
            self.mIndex = 0
            self.mVisible = False

class GameBackground(object):
    #初始化地图
    def __init__(self,screen):
        self.mImage1 = pygame.image.load("background.png")
        self.mImage2 = pygame.image.load("background.png")
        
        #窗口
        self.screen = screen
        
        #辅助移动地图
        self.y1 = 0
        self.y2 = -Manager.bg_size[1]

    #绘制地图
    def draw(self):
        self.screen.blit(self.mImage1,(0,self.y1))
        self.screen.blit(self.mImage2,(0,self.y2))

    #移动地图
    def move(self):
        movespeed=5
        self.y1 += movespeed
        self.y2 += movespeed
        if self.y1 >= Manager.bg_size[1]:
            self.y1 = 0
        if self.y2 >= 0:
            self.y2 = -Manager.bg_size[1]

class Manager(object):
    bg_size = (480,700)
    #创建敌机定时器id
    create_enemy_id = 10
    #游戏结束 倒计时的id
    game_over_id = 11
    #游戏是否结束
    is_game_over = False
    #倒计时时间
    over_time = 3
    
    def __init__(self):
        pygame.init() #字体初始化
        #创建窗口
        self.screen=pygame.display.set_mode(Manager.bg_size,0,32)

        #创建背景图片
        #self.background = pygame.image.load("background.png")
        self.map = GameBackground(self.screen)

        #初始化一个装玩家精灵的group
        self.players = pygame.sprite.Group()
        
        #初始化一个装敌机精灵的group
        self.enemys = pygame.sprite.Group()
        
        #初始化一个玩家爆炸的对象
        self.player_bomb = Bomb(self.screen,"player")
        
        #初始化一个敌机爆炸的对象
        self.enemy_bomb = Bomb(self.screen,"enemy")
        
        #初始化一个声音播放的对象
        #self.sound = GameSound()

    def exit(self):
        pygame.quit()
        #exit()

    def show_over_text(self):
        #游戏结束 倒计时后重新开始
        self.drawText("游戏结束 %d" %Manager.over_time, 100, Manager.bg_size[1] / 2,
                      textHeight = 50, fontColor = [255, 0 ,0])

    def game_over_timer(self):
        self.show_over_text()
        #倒计时-1
        Manager.over_time -= 1
        if Manager.over_time == 0:
            #参数2改为0 定时间静止
            pygame.time.set_timer(Manager.game_over_id,0)
            #倒计时后重新开始
            Manager.over_time = 3
            Manager.is_game_over = False
            self.start_game()

    def start_game(self):
        #重新开始游戏 有些类属性要清空
        EnemyPlane.clear_bullets()
        HeroPlane.clear_bullets()
        manager = Manager()
        manager.main()

    def new_player(self):
        #创建飞机对象 添加到玩家的组
        player = HeroPlane(self.screen)
        self.players.add(player)

    def new_enemy(self):
        #创建敌机的对象 添加到敌机的组
        enemy = EnemyPlane(self.screen)
        self.enemys.add(enemy)

    #绘制文字
    def drawText(self, text, x, y, textHeight=20, fontColor=(255,0,0), backgroundColor=None):
        #通过字体文件获取字体对象
        font_obj = pygame.font.Font("微软雅黑.ttf",textHeight)
        #配置要显示的文字
        text_obj = font_obj.render(text,True,fontColor,backgroundColor)
        #获取要显示的对象的rect
        text_rect = text_obj.get_rect()
        #设置显示对象的坐标
        text_rect.topleft = (x, y)
        #绘制字到指定区域
        self.screen.blit(text_obj, text_rect)

    def main(self):
        #播放背景音乐
        #self.sound.playBackgroundMusic()
        
        #创建一个玩家
        self.new_player()
        
        #开启创建敌机的定时器
        pygame.time.set_timer(Manager.create_enemy_id, 1000)
        
        while True:
            #把背景图片贴到窗口
            #self.screen.blit(self.background,(0,0))

            #移动地图
            self.map.move()

            #把地图贴到窗口上
            self.map.draw()

            #绘制文字
            self.drawText("血量:10000",0,0)

            if Manager.is_game_over:
                #判断游戏结束才显示结束文字
                self.show_over_text()

            for event in pygame.event.get():
                if event.type == QUIT:
                    self.exit()

                elif event.type == Manager.create_enemy_id:
                    #创建一个敌机
                    self.new_enemy()

                elif event.type == Manager.game_over_id:
                    #定时器出发的事件
                    self.game_over_timer()

            #调用爆炸的对象
            self.player_bomb.draw()
            self.enemy_bomb.draw()

            #玩家飞机和敌机子弹的判断
            if self.players.sprites():
                isover = pygame.sprite.spritecollide(self.players.sprites()[0],EnemyPlane.enemy_bullets,True)
                if isover:
                    Manager.is_game_over = True #标示游戏结束
                    pygame.time.set_timer(Manager.game_over_id, 1000) #开始游戏倒计时
                    self.player_bomb.action(self.players.sprites()[0].rect)
                    #把玩家飞机从精灵组移除
                    self.players.remove(self.players.sprites()[0])
                    #爆炸的声音
                    #self.sound.playBombSound()

            #判断飞机之间的碰撞 只能判断两个精灵组之间的碰撞
            iscollide = pygame.sprite.groupcollide(self.players,self.enemys,True,True)

            if iscollide:
                Manager.is_game_over = True #标志着游戏结束
                pygame.time.set_timer(Manager.game_over_id, 1000) #开启游戏倒计时
                
                items = list(iscollide.items())[0]
                x = items[0]
                y = items[1][0]
                
                #玩家爆炸图片
                self.player_bomb.action(x.rect)
                
                #敌机爆炸图片
                self.enemy_bomb.action(y.rect)
                
                #爆炸的声音
                #self.sound.playBombSound()

            #玩家子弹和所有敌机的碰撞判断
            is_enemy = pygame.sprite.groupcollide(HeroPlane.bullets,self.enemys,True,True)
            if is_enemy:
                items = list(is_enemy.items())[0]
                y = items[1][0]
                #敌机爆炸图片
                self.enemy_bomb.action(y.rect)
                #爆炸的声音
                #self.sound.playBombSound()
    
            #玩家飞机和子弹的显示
            self.players.update()
            
            #敌机和子弹的显示
            self.enemys.update()
            
            #刷新窗口内容
            pygame.display.update()
            time.sleep(0.01)

if __name__=="__main__":
    manager = Manager()
    manager.main()

效果:

完整素材及源码:

飞机大战 密码:3333

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值