大佬们帮忙看看哪里出错了(自己找不出来o(╥﹏╥)o)

江306 2023-03-18 15:46:45
import pygame #引用第三方的模块
import random #随机产生数据对象
import time
from pygame.locals import *
pygame.init()
#实现飞机的显示,并且可以控制飞机的移动{面向对象}
class   Mypiane(object):
    def __init__(self,screen):
        #设置默认的窗口初始化
        self.screen=screen #进行初始化
        #飞机的默认位置
        self.x=200     #飞机的横坐标
        self.y=600     #飞机的纵坐标
        #生成飞机的图片对象
        self.myimagenaem='./picture(图片)/plane.png'  #插入飞机图片
        self.image=pygame.image.load(self.myimagenaem)   #加载飞机
        #存放子弹的列表
        self.Shebullet=[]
        pass
    def moveleft(self):  #左移动
        if self.x>0:
            self.x-=5
        pass
    def moverigth(self):  #右移动
        if self.x<400:
            self.x+=5
        pass
    def moveup(self):    #上移动
        if self.y<640:
            self.y-=5
    def movedown(self):  #下移动
        if self.y>0:
            self.y+=5
    def display(self): #显示飞机
        self.screen.blit(self.image,(self.x,self.y))
        #完善子弹的展示逻辑
        needlist=[]
        for itme in self.Shebullet:
            if itme.judge():
                needlist.append(itme)
                pass
            pass
        for i in needlist:
            self.Shebullet.remove(i)
            pass
        for itmeA in self.Shebullet:
            itmeA.display() #显示子弹的位置
            bullet.move() #让子弹进行移动下次显示时候会看到子弹在修改后的位置
        pass
    #发射子弹
    def shebullet(self):
        #创建一个新的子弹对象
        newshebullet=bullet(self.x,self.y,self.screen)
        self.Shebullet.append(newshebullet)
        pass
    pass
#创建我方子弹
class  bullet(object):
    def __init__(self,x,y,screen):
        self.x=x+10
        self.y=y-20
        self.screen=screen
        self.image=pygame.image.load("./picture(图片)/780.png")
        pass
    def disply(self): #调用子弹并调整初始位置
        self.screen.blit(self.image,(self.x,self.y))
        pass
    def move(self): #设置子弹的速度
        self.y-=2
        pass
    def judge(self): #判断子弹是否越界
        if self.y<0:
            return True
        else:
            return False
#创建敌方飞机
class enemypiane(object):
    def __init__(self,screen):
        #默认设置一个方向
        self.direction="right"
        # 设置默认的窗口初始化
        self.screen = screen  # 进行初始化
        # 飞机的默认位置
        self.x = 0  # 飞机的横坐标
        self.y = 0  # 飞机的纵坐标
        # 生成飞机的图片对象
        self.myimagenaem = './picture(图片)/enemy.png'  # 插入飞机图片
        self.image = pygame.image.load(self.myimagenaem)  # 加载飞机
        self.Shebullet=[]
        pass
    #显示敌方飞机以及位置子弹信息
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))
        needlist = []
        for itme in self.Shebullet:
            if itme.judge():
                needlist.append(itme)
                pass
            pass
        for i in needlist:
            self.Shebullet.remove(i)
            pass
        for itmeA in self.Shebullet:
            itmeA.display()  # 显示子弹的位置
            bullet.move()  # 让子弹进行移动下次显示时候会看到子弹在修改后的位置
        pass
    pass
    #敌方飞机随机发射
    def shebullet(self):
        num=random.randint(1,51)
        if num==3:
            newbullet=enemybullet(self.x,self.y)
            self.Shebullet.append(newbullet)
        pass
    #敌方飞机移动,随机进行的
    def enemymove(self):
        if self.direction=="rigth":
            self.x+=10
            pass
        elif self.direction=="left":
            self.x-=10
            pass
        if self.x>450-49:
            self.direction="left"
            pass
        elif self.x<0:
            self.direction="rigth"
        pass
#创建敌方子弹
class enemybullet(object):
    def __init__(self, x, y, screen):
        self.x = x
        self.y = y +5
        self.screen = screen
        self.image = pygame.image.load("./picture(图片)/enemybullet.png")
        pass

    def disply(self):  # 调用子弹并调整初始位置
        self.screen.blit(self.image, (self.x, self.y))
        pass

    def move(self):  # 设置子弹的速度
        self.y += 2
        pass

    def judge(self):  # 判断子弹是否越界
        if self.y >700 :
            return True
        else:
            return False

#检测键盘
def key_boaed(Myobj): #定义普通的函数用来控制检测的对象
    evention=pygame.event.get()
    for even in evention:  # 从队列中获取事件,并从队列中删除该事件
        if even.type == QUIT:  # 按下x退出窗口
            print("退出")
            exit()   #结束一个进程
            pass
        elif even.type == KEYDOWN:
            if even.type == K_a or even.type == K_LEFT:  # 键盘按下a健或者是左键
                print("left")
                Myobj.moveleft() #调用函数左移动
                pass
            elif even.type == K_d or even.type == K_RIGHT:  # 键盘按下d健或者是右键
                print("right")
                Myobj.moverigth() #调用函数右移动
                pass
            elif even.type==K_w or even.type==K_UP:
                print("up")
                Myobj.moveup() #调用函数上移动
                pass
            elif even.type==K_s or even.type==K_DOWN:
                print("down")
                Myobj.down() #调用函数下移动
                pass
            elif even.type == K_SPACE:  # #键盘按下空格键
                print("按下 space ,发射子弹")
                Myobj.Shebullet()
        # 更新显示的内容
    pygame.display.update()  # 更新软件的显示部分
    pass

def main():
    #首先创建一个窗口,用来显示内容
    screen=pygame.display.set_mode((450,700))#初始化窗口或者屏幕以供显示
    #设定一个背景图片对象
    background=pygame.image.load('./picture(图片)/background(背景).png')#设置图片大小加载图片
    #设置标题(title)
    pygame.display.set_caption("阶段总结飞机")#设置当前题目
    #添加背景音乐
    pygame.mixer.init() #初始化mixer(声音)模块
    pygame.mixer.music.load('./picture(图片)/backgroundmusic.mp3')#导入音乐加载音乐
    pygame.mixer.music.set_volume((0.2)) #设置音量。参数0~1之间的浮点数
    pygame.mixer.music.play(-1) #开始播放音乐(循环次数),默认是0,设置为-1可不确定的重复播放
    #载入飞机图片
    plane=Mypiane(screen) #加载我方飞机
    #加载敌方飞机对象
    enemy=enemypiane(screen)
    #设定需要显示的内容
    while True:
        screen.blit(background,(0,0)) #调用并显示居中
        plane.display()  #调用并显示居中我方飞机
        enemy.display() #显示调用敌方飞机
        #获取键盘事件
        key_boaed(plane)
        #更新显示的内容
        pygame.display.update()#更新软件的显示部分
    pass
if __name__=="__main__":
    main()

 

 执行出来:我方和敌方飞机不动,也不发射子弹,敲击键盘我方飞机不动

 

 

...全文
221 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2023-05-03
  • 打赏
  • 举报
回复

函数key_boade的代码后面不要加

pass

应该能解决问题。
或者
把事件循环好好的放在游戏循环里

「已注销」 2023-05-03
  • 举报
回复
@「已注销」 写错了,是key_boaed函数!!!
shaoyouhao 2023-03-22
  • 打赏
  • 举报
回复

这个没必要弄, 没有意义,

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧