37,721
社区成员
发帖
与我相关
我的任务
分享
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()
执行出来:我方和敌方飞机不动,也不发射子弹,敲击键盘我方飞机不动
函数key_boade的代码后面不要加
pass
应该能解决问题。
或者
把事件循环好好的放在游戏循环里
这个没必要弄, 没有意义,