L8-15 飞机大战部分代码

import pygame,random,time
pygame.init()
bg_width=400
bg_height=700
running=True
bg=pygame.image.load("C:\\mxcmaterials\\l8-飞机大战-bg-6495b162-e6cc-4921-86b2-347c7886383c.png")
pygame.mixer.music.load("C:\\mxcmaterials\\l8-飞机大战-bgm-3fb8a304-cf74-4343-8a80-04f369f2e374.wav")
pygame.mixer.music.set_volume(0.5)
sc=pygame.display.set_mode((bg_width,bg_height))
pygame.mixer.music.play(-1)
#英雄机类
class HeroPlane():
    def __init__(self):
        self.image=pygame.image.load("C:\\mxcmaterials\\l8-飞机大战-hero_2-5ecbfeaa-57c1-4474-9cd8-6dd692e6f6e5.png")
        self.image2=pygame.image.load("C:\\mxcmaterials\\l8-飞机大战-hero_1-6f8059af-7855-4db9-a8bf-895e61ef4adb.png")
        self.down_image=pygame.image.load("C:\\mxcmaterials\\l8-飞机大战-hero_D-872c6d71-4075-4385-91a8-7b022d98f0a9.png")
        self.rect=self.image.get_rect()
        self.rect.left=150 
        self.rect.top=500
        self.speed=3 
        self.active=True
        self.switch_image=False
    def moveUp(self):
        if self.rect.top>0:
            self.rect.top-=self.speed
        else:
            self.rect.top=0
    def moveDown(self):
        if self.rect.top<600:
            self.rect.top+=self.speed
        else:
            self.rect.top=600
    def moveLeft(self):
        if self.rect.left>0:
            self.rect.left-=self.speed
        else:
            self.rect.left=0
    def moveRight(self):
        if self.rect.left<300:
            self.rect.left+=self.speed
        else:
            self.rect.left=300
#敌机类
class Enemy():
    def __init__(self):
        self.image=pygame.image.load("C:\\mxcmaterials\\l8-飞机大战-enemy-45722412-8891-4d4b-8f1c-4395735489c4.png")
        self.down_image=pygame.image.load("C:\\mxcmaterials\\l8-飞机大战-enemy_D-1081edba-70ec-4d8a-959c-6737cd333b50.png")
        self.rect=self.image.get_rect()
        self.rect.left=random.randint(0,bg_width-57)
        self.rect.top=random.randint(-5*bg_height,-43)
        self.speed=1
    def move(self):
        if self.rect.top<bg_height:
            self.rect.top+=self.speed
        else:
            self.reset()
    def reset(self):
        self.active=True
        self.rect.left=random.randint(0,bg_width-57)
        self.rect.top=random.randint(-5*bg_height,-43)
#子弹类
class Bullet():
    def __init__(self,left,top):
        self.image=pygame.image.load("C:\\mxcmaterials\\l8-飞机大战-bullet-2dbf0897-0d23-46cd-9622-1b9f342a4c16.png")
        self.rect=self.image.get_rect()
        self.rect.left=left
        self.rect.top =top 
        self.speed=5 
        self.active=True
    def move(self):
        self.rect.top -=self.speed
        if self.rect.top<0:
            self.active=False
    def reset(self,left,top):
        self.active=True
        self.rect.left=left
        self.rect.top=top
hero=HeroPlane()
#子弹的对象
bullet_list=[]
 
for b_index in range(8):
    bullet=Bullet(hero.rect.midtop[0],hero.rect.midtop[1])
    bullet_list.append(bullet)
    
enemies=[]
for i in range(15):
    enemy=Enemy()
    enemies.append(enemy)
pygame.key.set_repeat(1,1)
SHOOT_TIME=pygame.USEREVENT+1 
pygame.time.set_timer(SHOOT_TIME,200)

#加载音乐
bullet_sound=pygame.mixer.Sound("C:\\mxcmaterials\\l8-飞机大战-bullet-a3696130-2db3-4038-87ef-e5e1b1de9821.wav")
bullet_sound.set_volume(0.3)
enemy_down=pygame.mixer.Sound("C:\\mxcmaterials\\l8-飞机大战-enemy_D-fbf76277-1523-4d18-84ac-f09acad3f89f.wav")
hero_down=pygame.mixer.Sound("C:\\mxcmaterials\\l8-飞机大战-hero_D-38080960-a048-49b8-80d3-21bc477dfd3f.wav")
big_enemy_flying=pygame.mixer.Sound("C:\\mxcmaterials\\飞机大战-bigE_f-1b67ee77-a427-4932-a5f6-b2785ffb9e03.wav")
big_enemy_flying.set_volume(0.6)

score = 0 
font=pygame.font.SysFont("font\\amadeus.ttf",28,True)

#大敌机类
class BigEnemy:
    energy=10
    def __init__(self):
        self.energy =BigEnemy.energy
        self.image = pygame.image.load("C:\\mxcmaterials\\飞机大战-bigE-dc03e9bf-e813-47a6-8329-211741a2ac6d.png")
        self.down_image=pygame.image.load("C:\\mxcmaterials\\飞机大战-bigE_D-f16260ad-d3bc-4dbe-8fe3-1fb1a22daf4f.png")
        self.rect=self.image.get_rect()
        self.rect.left=random.randint(0,bg_width-200)
        self.rect.top=random.randint(-5*bg_height,-43)
        self.speed=1 
        self.active=False
    def move(self):
        if self.rect.top < bg_height:
            self.rect.top +=self.speed
        else:
            self.reset() 
    #重置
    def reset(self):
        self.active=False 
        self.rect.left=random.randint(0,bg_width-85)
        self.rect.top = random.randint((-5)*bg_height,-258)

#大敌机的事件 
BIG_ENEMY_TIME=pygame.USEREVENT+2 
pygame.time.set_timer(BIG_ENEMY_TIME,1000)
big_enemy =BigEnemy()

energy_color =(0,255,0)
while running:
    sc.blit(bg,(0,0))
    pygame.draw.line(sc,(0,0,0),(big_enemy.rect.left,big_enemy.rect.top-5),(big_enemy.rect.right,big_enemy.rect.top-5),5)
    energy_remain=big_enemy.energy/BigEnemy.energy
    #大敌机上方血量
    if energy_remain>0.2:
        energy_color=(0,255,0)
    else:
        energy_color=(255,0,0)
    pygame.draw.line(sc,energy_color,(big_enemy.rect.left,big_enemy.rect.top-5),\
    (big_enemy.rect.left+big_enemy.rect.width*energy_remain,big_enemy.rect.top-5),5)
    #分数
    score_text=font.render("sorce:%s"%score,True,(255,255,255))
    sc.blit(score_text,(10,10))
    hero_hit=pygame.sprite.spritecollide(hero,enemies,False,pygame.sprite.collide_mask)
    if hero_hit:
        hero_down.play()
        sc.blit(hero.down_image,(hero.rect.left,hero.rect.top))
        running=False
    shoot=False
    for each in enemies:
        each.move()
        sc.blit(each.image,(each.rect.left,each.rect.top))
    sc.blit(hero.image,(hero.rect.left,hero.rect.top))
    for event in pygame.event.get():
        if event.type==pygame.KEYDOWN:
            if  event.key==pygame.K_UP:
                hero.moveUp()
            if  event.key==pygame.K_DOWN:
                hero.moveDown()
            if  event.key==pygame.K_LEFT:
                hero.moveLeft()
            if  event.key==pygame.K_RIGHT:
                hero.moveRight()
        if event.type==SHOOT_TIME:
            shoot=True
            hero.switch_image= not hero.switch_image
        #大敌机检测
        if event.type==BIG_ENEMY_TIME:
            big_enemy.active = True
   
    if shoot==True:
        bullet_list[b_index].reset(hero.rect.midtop[0],hero.rect.midtop[1])
        b_index=(b_index+1)%8 
    
    if big_enemy.active == True:
        big_enemy.move() 
        sc.blit(big_enemy.image,big_enemy.rect)
    
    #音效
    if big_enemy.active == True:
        if -400<big_enemy.rect.top < bg_height:
            big_enemy_flying.play(-1)
        else:
            big_enemy_flying.stop() 
    else:
        big_enemy_flying.stop() 
    for b in bullet_list:
        if b.active==True:
            bullet_sound.play()
            b.move()
            sc.blit(b.image,(b.rect.left,b.rect.top))
        enemy_hit=pygame.sprite.spritecollide(b,enemies,False)
        for e in enemy_hit:
            enemy_down.play()
            score+=100
            sc.blit(e.down_image,(e.rect.left,e.rect.top))
            e.reset()
        pygame.display.update()    
        
    #喷气效果
    if hero.switch_image==True:
        sc.blit(hero.image,(hero.rect.left,hero.rect.top))
    else:
        sc.blit(hero.image2,(hero.rect.left,hero.rect.top))
    pygame.display.update()  
    



#扩展练习
sc.blit(bg,(0,0))
font=pygame.font.SysFont("font\\amadeus.ttf",40,True)
over1=font.render("Game OVER!",True,(255,255,255))
over2=font.render("SCORE:%s"%score,True,(255,255,255))
sc.blit(over1,(100,150))
sc.blit(over2,(100,250))
pygame.display.update() 
time.sleep(3)


            

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值