DAY10显示敌机

在这里插入图片描述
代码:

import pygame
import random #导入随机数
import time  #加入延时操作
from pygame.locals import *
'''
1、实现飞机的显示,并且可以控制飞机的移动【面向对象】
'''
class HeroPlane(object):
    def __init__(self,screen):
        #飞机默认位置
        self.x=150
        self.y=450
        #设置要显示内容的窗口
        self.screen=screen
        #生成飞机的图片对象
        self.imageName='./背景/我方.png'
        self.image=pygame.image.load(self.imageName)
        #用来存放子弹的列表
        self.bulletList=[]
        pass
    def moveleft(self):   #左移动
        if self.x>0:
            self.x-=10
        pass
    def moveright(self):    #右移动
        if self.x<310:
            self.x+=10
        pass
    def display(self):    #显示飞机
        self.screen.blit(self.image,(self.x,self.y))
        # 完善子弹的展示逻辑
        needDelItemList=[]
        for item in self.bulletList:
            if item.judge():
                needDelItemList.append(item)
                pass
            pass
        # 重新遍历删除越界的子弹
        for i in needDelItemList:
            self.bulletList.remove(i)
            pass
        for bullet in self.bulletList:
            bullet.display()  # 显示一下子弹的位置
            bullet.move()  # 让这个子弹进行移动,下次再显示的时候就会看到子弹在修改后的位置
        pass
    #发射子弹
    def sheBullet(self):
        #创建一个新的子弹对象
        newBullet=Bullet(self.x,self.y,self.screen)
        self.bulletList.append(newBullet)
        pass
    pass

class Bullet(object):
    def __init__(self,x,y,screen):
        self.x=x+13
        self.y=y-20
        self.screen=screen
        self.imgage=pygame.image.load('./背景/我方武器.png')
        pass
    def display(self):
        self.screen.blit(self.imgage,(self.x,self.y))
    pass
    # 发射子弹
    def move(self):
        self.y-=5
        pass
    def judge(self):  #判断子弹是否越界
        if self.y<0:
            return True
        else:
            return False
        pass
    pass



class EnemyPlane:  #创建敌机类
    def __init__(self,screen):
        #默认设置一个方向
        self.direction='right'
        # 飞机默认位置
        self.x = 0
        self.y = 0
        # 设置要显示内容的窗口
        self.screen = screen
        self.bulletList=[]
        # 生成飞机的图片对象
        self.imageName = './背景/敌方.png'
        self.image = pygame.image.load(self.imageName)
        pass
    def display(self):  #显示敌机以及子弹位置信息
        self.screen.blit(self.image, (self.x, self.y))
        # 完善子弹的展示逻辑
        needDelItemList = []
        for item in self.bulletList:
            if item.judge():
                needDelItemList.append(item)
                pass
            pass
        # 重新遍历删除越界的子弹
        for i in needDelItemList:
            self.bulletList.remove(i)
            pass
        for bullet in self.bulletList:
            bullet.display()  # 显示一下子弹的位置
            bullet.move()  # 让这个子弹进行移动,下次再显示的时候就会看到子弹在修改后的位置
        pass
    def sheBullet(self):   #敌机随机的发射子弹
        num=random.randint(1,400)
        if num==3:
            newBullet=EnemyBullet(self.x,self.y,self.screen)
            self.bulletList.append(newBullet)
        pass
    def move(self):   #敌机移动,随机进行
        if self.direction=='right':
            self.x+=0.05
            pass
        elif self.direction=='left':
            self.x-=0.05
            pass
        if self.x>350-20:
            self.direction='left'
            pass
        elif self.x<0:
            self.direction='right'
            pass
        pass
    pass

class EnemyBullet(object):   #敌机的子弹类
    def __init__(self,x,y,screen):
        self.x=x+30
        self.y=y+50
        self.screen=screen
        self.imgage=pygame.image.load('./背景/敌方武器.jpg')
        pass
    def display(self):
        self.screen.blit(self.imgage,(self.x,self.y))
    pass
    # 发射子弹
    def move(self):
        self.y+=2
        pass
    def judge(self):  #判断子弹是否越界
        if self.y>500:
            return True
        else:
            return False
        pass
    pass

def key_control(HeroPlane):   #用来实现键盘的检测
    # 获取键盘事件
    eventList = pygame.event.get()
    for event in eventList:
        if event.type == QUIT:
            print('退出')
            exit()
            pass
        elif event.type == KEYDOWN:
            if event.type == K_a or event.key == K_LEFT:
                print('left')
                HeroPlane.moveleft()  #调用函数实现左移动
                pass
            elif event.type == K_d or event.key == K_RIGHT:
                print('right')
                HeroPlane.moveright()   #调用函数实现右移动
                pass
            elif event.key == K_SPACE:
                print('K_SPACE:发射子弹')
                HeroPlane.sheBullet()
                pass
    pass


def main():
    #首先创建一个窗口 用来显示内容
    screen=pygame.display.set_mode((350,500),depth=32)
    #设定一个背景图片对象
    background=pygame.image.load('./背景/背景图.jpg')
    #设置一个标题
    pygame.display.set_caption('飞机游戏')

    #设置背景音乐
    pygame.mixer.init()
    pygame.mixer.music.load('./背景/背景音乐.MP3')
    pygame.mixer.music.set_volume(0.2)
    pygame.mixer.music.play(-1)  #音乐循环次数  -1表示无限循环
    #创建一个飞机对象
    hero=HeroPlane(screen)
    #创建一个敌机对象
    enemyplane=EnemyPlane(screen)
    #设定要显示的内容
    while True:
        screen.blit(background,(0,0))
        #显示玩家飞机的图片
        hero.display()
        enemyplane.display() #显示敌机
        enemyplane.move()    #敌机移动
        enemyplane.sheBullet()  #敌机随机发射子弹
        #获取键盘事件
        key_control(hero)
        #更新显示内容
        pygame.display.update()
        #time.sleep(1)  #休眠一秒钟再循环
        #pygame.time.Clock().tick(5)  #一秒钟循环五次
    pass

if __name__=='__main__':
    main()

运行结果
敌机会移动且发射子弹
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值