飞机大战-玩家飞机被击中

# -*- coding:utf-8 -*-
import pygame
import time
from pygame.locals import *
import random
# 玩家飞机
class HeroPlane(object):
    def __init__(self,screen_temp):
        self.x=200
        self.y=440
        self.image=pygame.image.load("./feiji/hero_live.png")
        self.screen=screen_temp
        self.bullet_list=[]

    def display(self):
        self.screen.blit(self.image, (self.x, self.y))
        for bullet in self.bullet_list:
            bullet.display()
            bullet.move_up()
            if bullet.judget():#判断子弹是否越界
                self.bullet_list.remove(bullet)

    def move_left(self):
        self.x-=5
    def move_right(self):
        self.x+=5
    def fire(self):
        self.bullet_list.append(Bullet(self.screen, self.x+50, self.y-50))

    def bong(self,enemy,hero):
        enemy.enemybullethit(self.x,enemy,hero)

    def changeimg(self,enemyplan_temp):
        self.image = pygame.image.load("./feiji/hero.png")
        self.screen.blit(self.image, (self.x, self.y))
        enemyplan_temp.stop()


# 敌人飞机
class EnemyPlane(object):
    def __init__(self,screen_temp):
        self.x=0
        self.y=0
        self.image=pygame.image.load("./feiji/enermy.png")
        self.screen=screen_temp
        self.bullet_list = []
        self.direction = "right"

    def display(self):
        self.screen.blit(self.image, (self.x, self.y))
        for bullet in self.bullet_list:
            bullet.display()
            bullet.move_down()
            if bullet.judget():#判断子弹是否越界
                self.bullet_list.remove(bullet)

    def move(self):
        """方向决定表达式 边界值更改方向值"""
        if self.direction == "right":
            self.x += 2
        elif self.direction == "left":
            self.x -= 2

        if self.x>410:
            self.direction = "left"
        elif self.x<0:
            self.direction = "right"

    def autofire(self):
        random_num=random.randint(1,100)
        if random_num==20 or random_num==80:
            self.bullet_list.append(EnemyBullet(self.screen, self.x, self.y))

    def enemybullethit(self, heroplan_x_temp,enemyplan_temp,heroplan_temp):
        for bullet in self.bullet_list:
            bullet.hit(heroplan_x_temp,enemyplan_temp,heroplan_temp)

    def stop(self):
        self.direction = None# 敌机停止


class Bullet(object):
    def __init__(self,screen_temp, x, y):
        self.x = x
        self.y = y
        self.image = pygame.image.load("./feiji/zidan.png")
        self.screen = screen_temp
    def display(self):
        self.screen.blit(self.image, (self.x, self.y))
    def move_up(self):
        self.y -= 10
    def judget(self):
        if self.y<0:
            return True
        else:
            return False

class EnemyBullet(Bullet):
    def __init__(self,screen_temp, x, y):
        self.x = x+50
        self.y = y+100
        self.image = pygame.image.load("./feiji/zidan2.png")
        self.screen = screen_temp
    def display(self):
        self.screen.blit(self.image, (self.x, self.y))

    def move_down(self):
        self.y += 10

    def judget(self):
        if self.y>600:
            return True
        else:
            return False

    def hit(self,heroplan_x_temp,enemyplan_temp,heroplan_temp):
        if self.y >=440 and self.y<=600:
            # 获取玩家的飞机的x值进行判断
            # x1=玩家飞机.x x2=x1+142
            x1 = heroplan_x_temp
            x2 = x1 + 142
            if self.x >=x1 and self.x <=x2:
                print("击中!!!!!")
                # 玩家飞机换图 game over
                heroplan_temp.changeimg(enemyplan_temp)

def key_control(hero_temp):
    # 获取事件,比如按键等
    for event in pygame.event.get():
        # 判断是否点击了退出按钮
        if event.type == QUIT:  # 点击窗口的退出键
            print("exit")
            exit()
        # 判断是否按下了键
        elif event.type == KEYDOWN:
            # 检测是否 a 或者 left
            if event.key == K_a or event.key == K_LEFT:
                print("left")
                hero_temp.move_left()
            # 检测是否 d 或者 right
            elif event.key == K_d or event.key == K_RIGHT:
                print("right")
                hero_temp.move_right()
            # 空格键
            elif event.key == K_SPACE:
                print("space")
                hero_temp.fire()


def main():
    # 创建一个窗口
    screen = pygame.display.set_mode((480,600),0,32)
    # 创建一个背景图片
    background = pygame.image.load("./feiji/bg.png")
    #创建一个飞机对象
    hero = HeroPlane(screen)
    #创建敌人飞机
    enemy = EnemyPlane(screen)

    while True:
        screen.blit(background,(0,0))
        hero.display()
        enemy.display()
        enemy.move()#调用敌机的移动
        enemy.autofire()  # 调用敌机的发射子弹
        hero.bong(enemy,hero) #玩家飞机爆炸
        pygame.display.update()
        key_control(hero)
        time.sleep(0.01)

if __name__ == '__main__':
    main()

  

猜你喜欢

转载自www.cnblogs.com/huahua2018/p/9921688.html
今日推荐