转载:python中的pygame编写飞机大战(五) 敌人飞机

作者:还在琢磨 
来源:CSDN 
原文:https://blog.csdn.net/mbl114/article/details/78075409 
版权声明:本文为博主原创文章,转载请附上博文链接!

敌人飞机类的设计和英雄非常类似,区别在于英雄的坐标计算在每一帧的时候计算,每一帧绘制。当敌人飞出屏幕之后,自动再随机设置飞机的初始坐标,实现飞机无穷无尽从地图上面往下飞。

# 敌人飞机
class EnemyPlane(object):
    # 初始化敌人飞机
    def __init__(self, scene):
        # 加载飞机资源
        self.image = pygame.image.load("./res/img-plane_1.png")
        # 缓存主场景对象
        self.main_scene = scene
        # 飞机矩形
        self.rect = self.image.get_rect()
        # 子弹列表
        self.bullet = Bullet(self.main_scene, True)
        # 飞机速度
        self.speed = 2
 
    # 获得飞机矩形
    def rect(self):
        return self.rect
 
 
    # 设置飞机位置
    def set_pos(self, x, y):
        self.rect[0] = x
        self.rect[1] = y
 
    # 飞机动作
    def action(self):
        # 子弹每次移动向上移动self.speed速度
        self.rect.move_ip(0, self.speed)
        # 如果飞机移动出屏幕则将飞机设置为不可见状态
        if self.rect[1] > self.main_scene.size[1]:
            # 当飞机飞出屏幕,重新设置飞机的初始位置,移动速度
            # 随机产生x坐标,纵坐标使用为0
            self.set_pos(random.randint(0, self.main_scene.size[1] - self.rect[2] - 20), 0)
            # 随机设置飞机移动速度
            self.speed = random.randint(2, 5)
 
    # 绘制飞机
    def draw(self):
        self.main_scene.scene.blit(self.image, (self.rect[0], self.rect[1]))

在GameScene类的__init__函数中,我们预先创建了3个飞机

        # 创建多个敌机
        self.enemy_list = [EnemyPlane(self) for _ in range(3)]

在draw函数中绘制敌机

    # 绘制
    def draw_elements(self):
        # 绘制地图
        self.map.draw()
        # 绘制英雄飞机
        self.hero.draw()
        # 依次绘制英雄飞机每一颗发射出去的子弹
        for bullet in self.hero.bullets:
            if bullet.visible:
                bullet.draw()
        # 绘制敌人飞机和飞机子弹
        for plane in self.enemy_list:
            plane.draw()

在action函数中,计算飞机坐标

    # 绘制
    def draw_elements(self):
        # 绘制地图
        self.map.draw()
        # 绘制英雄飞机
        self.hero.draw()
        # 依次绘制英雄飞机每一颗发射出去的子弹
        for bullet in self.hero.bullets:
            if bullet.visible:
                bullet.draw()
        # 绘制敌人飞机和飞机子弹
        for plane in self.enemy_list:
            plane.draw()

作者没有写出敌人飞机的子弹发射代码,当然也没有写子弹显示代码。可以参照英雄飞机的代码来改写,不难。

猜你喜欢

转载自blog.csdn.net/hailler1119/article/details/88206633