python_飞机大战_HeroPlan_py_三

建议从python_飞机大战_main_py_一 开始看

 

import pygame
from bullets import *

# 飞机
class HeroPlane(object):
    # 飞机初始化
    def __init__(self,scene,hero_life):
        # 加载飞机资源
        self.image = pygame.image.load("images/plane.png").convert_alpha()
        # 缓存主场景对象
        self.main_scene = scene
        # 飞机矩形
        self.rect = self.image.get_rect()
                        
        # 飞机矩形起始点,  rect[2] 120 是英雄飞机的宽rect[3]是 79 是英雄飞机的高
        self.rect[0] = self.main_scene.size[0] / 2 - self.rect[2] / 2
        self.rect[1] = self.main_scene.size[1] - self.rect[3] * 2
        # 飞机子弹列表
        self.bullets = [Bullet(self.main_scene)for _ in range(1,30)]
        # 飞机速度
        self.speed = 2
        self.visible = True
        #飞机移动:
        self.center = float(self.rect.centerx)
        self.bottom = float(self.rect.bottom)
        self.moving_right = False
        self.moving_left = False
        self.moving_up = False
        self.moving_down = False
        #飞机生命
        self.jiange = 0
        self.herolife = hero_life
        self.life_image = pygame.image.load("images/plane_life.png").convert_alpha()
        self.life_rect = self.life_image.get_rect()
        
    #更新飞机
    def moving(self):
        if self.moving_right and self.rect.right < self.main_scene.size[0]:
            self.center += self.speed
        if self.moving_left and self.rect.left > 0:
            self.center -= self.speed
        if self.moving_up and self.rect.top > 0:
            self.bottom -= self.speed
        if self.moving_down and self.rect.bottom < self.main_scene.size[1]:
            self.bottom += self.speed
        self.rect.centerx = self.center
        self.rect.bottom = self.bottom 
    # 获得飞机  self.mImage = pygame.image.load("./res/bullet_11.png")矩形
    def rect(self):
        return self.rect
 
    # 发子弹
    def shot(self):
        if self.visible:
            posx = self.rect[0]-5 
            # 发射子弹
            wait_for_shot = []
            # 如果子弹的visible为false,说明子弹尚未发射
            for bullet in self.bullets:
                # 如果子弹不可见,说明子弹闲置状态
                if not bullet.visible:
                    wait_for_shot.append(bullet)
                    if len(wait_for_shot) >= 1:
                        break
            
            
            
            # 依次设置选择子弹的初始位置,并将其设置为发射状态、移动速度
            for bullet in wait_for_shot:
                bullet.visible = True
                bullet.set_speed(5)
                #bullet.set_pos(posx + 5, self.rect[1] - self.rect[3] / 2)
                bullet.set_pos(posx,self.rect[1]-self.rect[3]-5)

    
 
    # 飞机绘制
    def draw(self):
        if self.visible and self.herolife >= 0:
            self.main_scene.scene.blit(self.image, (self.rect[0], self.rect[1]))
            self.hero_lifes()
            
    # 飞机生命数绘制
    def hero_lifes(self):
        for number in range(self.herolife):
            #排列飞机生命       间隔  生命  飞机一半的宽度      
            self.life_rect[0] = 10 + number* 70
            self.main_scene.scene.blit(self.life_image,((452-self.life_rect[0]),10))
            
        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值