python 飞机大战游戏

时间:2021-05-20 14:52:00
import pygame
import time  # 时间模块
from pygame.locals import *


class HeroPlane(object):


    def __init__(self, screen):
        self.x = 190
        self.y = 550


        image_path = 'feiji/hero1.png'
        self.image = pygame.image.load(image_path)


        self.screen = screen


        self.bullets = []  # 子弹列表


    def display(self):
        """显示飞机"""
        self.screen.blit(self.image, (self.x, self.y))


        # 显示子弹
        self.display_bullet()


    def display_bullet(self):
        # 显示子弹
        for bullet in self.bullets:
            bullet.display()
            bullet.move()


    def move_left(self):
        """向左移动"""
        self.x -= 10


    def move_right(self):
        """向右移动"""
        self.x += 10


    def biubiu(self):
        """发射一颗子弹"""
        # 创建子弹
        bullet = HeroBullet(self.screen, self.x, self.y)


        self.bullets.append(bullet)




class HeroBullet(object):
    """玩家子弹类"""


    def __init__(self, screen, plane_x, plane_y):
        """初始化子弹属性"""
        self.x = plane_x + 40
        self.y = plane_y - 22


        image_path = 'feiji/bullet.png'
        self.image = pygame.image.load(image_path)


        self.screen = screen


    def display(self):
        """显示子弹"""
        self.screen.blit(self.image, (self.x, self.y))


    def move(self):
        """移动子弹"""
        self.y -= 5


def main():
    """游戏主逻辑"""
    # 创建窗口
    screen = pygame.display.set_mode((480, 700), 0, 32)


    # 加载背景图片
    bg = pygame.image.load('feiji/background.png')


    # 加载玩家飞机
    hero = HeroPlane(screen)


    while True:
        # print('给我刷~')


        # 把背景图片显示到窗口(缓存图片)
        screen.blit(bg, (0, 0))


        # 显示玩家飞机
        hero.display()


        # 刷新界面
        pygame.display.update()


        # 获取事件,比如按键等
        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.move_left()


                # 检测按键是否是d或者right
                elif event.key == K_d or event.key == K_RIGHT:
                    hero.move_right()


                # 检测按键是否是空格键
                elif event.key == K_SPACE:
                    print('space')
                    hero.biubiu()


        # 冻结程序
        time.sleep(1/60)  # 单位为 秒


    print('程序结束')


if __name__ == '__main__':
    main()