importpygameimportrandomimporttimefrom pygame.locals import *
'''实现飞机的显示,控制飞机的移动'''
classHeroPlane(object):def __init__(self,screen):##飞机的默认位置
self.x=225self.y=510
##设置显示内容窗口
self.screen=screen##生成飞机的图片对象
#elf.imageName='./feiji/zwt.png'
self.image=pygame.image.load('./feiji/zwt.png')##存放子弹列表
self.bulletList=[]#self.image=pygame.image.load(self.imageName)
pass
defmoveleft(self):if self.x>0:
self.x-=30
pass
defmoveright(self):if self.x<380:
self.x+=30
pass
defdisplay(self):
self.screen.blit(self.image,(self.x,self.y))##完善子弹展示逻辑
needDelItemList=[]for item inself.bulletList:ifitem.judge():
needDelItemList.append(item)###重新遍历
for i inneedDelItemList:
self.bulletList.remove(i)for bullet inself.bulletList:
bullet.display()##显示子弹的位置
bullet.move()##让子弹进行移动,下次再显示的时候就会看到子弹修改后的位置
pass
defsheBullet(self):
newBullet=Bullet(self.x,self.y,self.screen)
self.bulletList.append(newBullet)pass
pass
###创建子弹类对象
classBullet(object):def __init__(self,x,y,screen):
self.x=x+13self.y=y-20self.screen=screen
self.imgage=pygame.image.load('./feiji/Bullet.png')pass
defdisplay(self):
self.screen.blit(self.imgage,(self.x,self.y))defmove(self):
self.y-=8
defjudge(self):##判断子弹越界
if self.y<0:returnTrueelse:returnFalse##敌人子弹
classEnemyBullet(object):def __init__(self,x,y,screen):
self.x=x
self.y=y+60self.screen=screen
self.imgage=pygame.image.load('./feiji/Bullet2.png')pass
defdisplay(self):
self.screen.blit(self.imgage,(self.x,self.y))defmove(self):
self.y+=2
defjudge(self):##判断子弹越界
if self.y>550:returnTrueelse:returnFalse##创建敌人
classEnemyPlane:def __init__(self, screen):##m默认设置一个方向
self.direction='right'
##飞机的默认位置
self.x =0
self.y=0##设置显示内容窗口
self.screen =screen##生成飞机的图片对象
#elf.imageName='./feiji/zwt.png'
self.image = pygame.image.load('./feiji/cz.png')
self.bulletList=[]pass
defdisplay(self):
self.screen.blit(self.image,(self.x,self.y))
needDelItemList=[]for item inself.bulletList:ifitem.judge():
needDelItemList.append(item)###重新遍历
for i inneedDelItemList:
self.bulletList.remove(i)for bullet inself.bulletList:
bullet.display()##显示子弹的位置
bullet.move() ##让子弹进行移动,下次再显示的时候就会看到子弹修改后的位置
defsheBullet(self):###敌人随机发射子弹
num=random.randint(1,20)if num==3:
newBullet=EnemyBullet(self.x,self.y,self.screen)
self.bulletList.append(newBullet)defmove(self):##随机移动
if self.direction=='right':
self.x+=2
elif self.direction=='left':
self.x-=2
if self.x>410:
self.direction='left'
elif self.x<0:
self.direction='right'
##控制键盘
defkey_control(HeroObj):
eventlist=pygame.event.get()for event ineventlist:if event.type ==QUIT:print('退出')
exit()pass
elif event.type ==KEYDOWN:if event.type == K_a or event.key ==K_LEFT:print('left')
HeroObj.moveleft()elif event.type == K_d or event.key ==K_RIGHT:print('right')
HeroObj.moveright()elif event.key ==K_SPACE:print('k_SPACE')
HeroObj.sheBullet()pass
##主函数
defmain ():
screen=pygame.display.set_mode((450,550),0,32) ##创建一个窗口
backgrond=pygame.image.load('./feiji/background.jpg') #设定一个背景图
pygame.display.set_caption('cz大战zwt')###添加背景音乐
pygame.mixer.init()
pygame.mixer.music.load('./feiji/background.mp3')
pygame.mixer.music.set_volume(0.1) #设置音量
pygame.mixer.music.play(-1) ##无限循环
##创建飞机对象
hero=HeroPlane(screen)##创建敌人
enemyplane=EnemyPlane(screen)whileTrue:
screen.blit(backgrond,(0,0))##居中显示背景图
hero.display() ##显示我方飞机
enemyplane.display() ##显示敌人
enemyplane.move()##敌人移动
enemyplane.sheBullet()##敌人发射子弹
key_control(hero)
pygame.display.update()##更新显示内容
pygame.time.Clock().tick(15)##一秒执行多少次
if __name__=='__main__':
main()