Python---飞机大战小游戏

import pygame
import random

class MyPlane(object):

    # 属性:
    #  XY坐标问题
    #  飞机图片名字

    def __init__(self,screen):
        self.x = 240-49
        self.y = 850-124
        self.screen = screen
        self.name = 'feiji2.png'
        self.planeimage = pygame.image.load(self.name)
        self.bullist = []

    # 方法:
    #     展示
    def show(self):
    #  加载图片到窗口
        self.screen.blit(self.planeimage,(self.x,self.y))

        removebul_list = []
        # 存放需要删除的子弹对象
        for bul in self.bullist:
            # 保存需要删除的对象
            if bul.judge():
                removebul_list.append(bul)
        #    在总的子弹列表里面删除需要删除的子弹
        for need_rem in removebul_list:
            self.bullist.remove(need_rem)

        #     显示子弹并且让他移动起来
        for bul in self.bullist:
            bul.show_bullet()
            bul.move()
    # 绘制到窗口
    #   左
    def moveleft(self):
        self.x -= 20
        if self.x <=0:
            self.x = 0

    #  右移动
    def moveright(self):
        self.x += 20
        if self.x >= 480 - 98:
            self.x = 480 - 98


    def moveup(self):
        self.y -= 50
        if self.y <= 0:
            self.y = 0

    def movedown(self):
        self.y += 50
        if self.y >= 850 - 124:
            self.y = 850 - 124

    def shoot(self):
        '''
        发射子弹,用空格
        :return: 
        '''
        bul = Bullet(self.x,self.y,self.screen)
        self.bullist.append(bul)

class Bullet(object):
# 子弹
    def __init__(self,x,y,screen):
        # 属性:XY需要图片
        self.x = x + 40
        self.y = y - 50
        self.screen = screen
        self.bulimage = pygame.image.load('bullet.png')
    def show_bullet(self):
        self.screen.blit(self.bulimage,(self.x,self.y))

    def move(self):
        self.y -= 10

    def judge(self):
        if self.y < 0:
            return True
        else:
            return False

class FBullet(object):
    # 子弹
    def __init__(self, x, y, screen):
        # 属性:XY需要图片
        self.x = x + 40
        self.y = y - 50
        self.screen = screen
        self.bulimage = pygame.image.load('bullet-2.gif')

    def show_bullet(self):
        self.screen.blit(self.bulimage, (self.x, self.y))

    def move(self):
        self.y += 5

    def judge(self):
        if self.y > 850:
            return True
        else:
            return False

class Fighter(object):

# 敌机
    def __init__(self,screen):
        # 属性:位置。敌机的名字
        self.x = 0
        self.y = 0
        self.derection = 'right'
        self.screen = screen
        self.fighterplane = pygame.image.load('enemy1.png')
        self.fit_bul_list = []

    def show_fighetr(self):
        self.screen.blit(self.fighterplane,(self.x,self.y))


        removebul_list = []
        # 存放需要删除的子弹对象
        for bul in self.fit_bul_list:
            # 保存需要删除的对象
            if bul.judge():
                removebul_list.append(bul)
        # 在总的子弹列表里面删除需要删除的子弹
        for need_rem in removebul_list:
            self.fit_bul_list.remove(need_rem)

        # 显示子弹并且让他移动起来
        for bul in self.fit_bul_list:
            bul.show_bullet()
            bul.move()

    def move_fit(self):
        if self.derection == 'right':
            self.x += 1

        elif self.derection == 'left':
            self.x -= 1

        if self.x > 480-60:
            self.derection = 'left'

        if self.x <0:
            self.derection = 'right'

    def shoot_bul(self):
#     敌机发射子弹
        num = random.randint(1,50)
        if num == 10 or num == 20:
            new_fit_bul = FBullet(self.x,self.y,self.screen)
            self.fit_bul_list.append(new_fit_bul)

def key_control(myplane):
    '''
    检测用户的鼠标和键盘输入
    :return: 
    '''
    # 5、检测事件,获取具体事件
    event_lists = pygame.event.get()
    for event in event_lists:

        if event.type == pygame.QUIT:
            # 检测鼠标事件
            print('关闭')
            exit()
        elif event.type == pygame.KEYDOWN:
            #  检测键盘点击事件
            if event.key == pygame.K_LEFT or event.key == pygame.K_a:
                print('按下左键')
                myplane.moveleft()

            elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:
                print('按下右键')
                myplane.moveright()
            elif event.key == pygame.K_UP or event.key == pygame.K_w:
                print('按下向上的键')
                myplane.moveup()


            elif event.key == pygame.K_DOWN or event.key == pygame.K_z:
                print('向下移动')
                myplane.movedown()
            elif event.key == pygame.K_SPACE:
                myplane.shoot()

            else:
                print('输入不合法')

def main():
    '''
    这是一个飞机大战游戏
    :return: 
    '''

    # 1、创建一个窗口
    screen = pygame.display.set_mode((480,850))
    pygame.display.set_caption('雷霆战机')
    # 2、加载图片,作为背景
    background = pygame.image.load('bj7.jpg')
    # 2-2利用飞机类创建出一个对象,这个对象可以有多个属性与方法
    myplane = MyPlane(screen)
    # 2-3利用敌机类,创建一个敌机对戏那个
    fighter = Fighter(screen)


    while True:
        # 3、将图片加载到窗口
        screen.blit(background,(0,0))
        myplane.show()
        fighter.show_fighetr()
        fighter.move_fit()
        fighter.shoot_bul()

        # 5、检测事件,获取具体事件
        key_control(myplane)
        #if hit

        # 4、刷新
        pygame.display.update()
        import time
        time.sleep(0.001)

if __name__=='__main__':
    main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值