python-pygame实现飞机大战——添加背景和飞机运动项目拆解了几个大步骤,接下来一步步讲解):首先准备好资源,也可以从网上下载,我这里直接用的教程资源,为什么(真的很美,但是我找的那个很烂)然后就不多说了,上面的代码(这次的实现是放背景图+键盘飞行器的操作运动)main.py,注释基本都加上了,不清楚的可以百度试试对应的方法()#设置窗口大小bg_size=width,height=400,700#实际上元组screen=pygame.display.set_mode(bg_size)#设置窗口pygame.display.set_caption("AircraftWars")#窗口标题#加载背景图片,普通图片有没有convert显示效果一样,但是使用convert可以转换格式,提高blitbackground=pygame.image的速度.load("images/background.png").convert()defmain():#创建时钟对象(可以控制游戏循环频率)clock=pygame.time.Clock()#生成玩家平面me=myplane.MyPlane(bg_size)#三位玩家life_num=3#游戏暂停,默认为非暂停状态paused=False#控制玩家平面图片的切换,呈现出突兀突兀的效果switch_image=True#切换延迟delay=100running=Truewhilerunning:#Geteventsforeventinpygame.event.get():#结束事件事件触发结束操作ifevent.type==QUIT:pygame.quit()sys.exit()#检测用户键盘操作,分别为key_pressed=pygame.key.get_pressed()ifkey_pressed[K_w]orkey_pressed[K_UP]:me.moveUp()ifkey_pressed[K_s]orkey_pressed[K_DOWN]:me.moveDown()ifkey_pressed[K_a]orkey_pressed[K_LEFT]:me.moveLeft()ifkey_pressed[K_d]orkey_pressed[K_RIGHT]:我。moveRight()#在屏幕上绘制背景图,并指定位置screen.blit(background,(0,0))#绘制子弹补给、炸弹补给等各种元素#不暂停,生命大于0ifpaused==Falseandlife_num>0:#绘制玩家平面,如果平面处于活动状态ifme.active:#在屏幕上绘制玩家平面,switch_image是否切换画面ifswitch_image:screen.blit(me.image1,me.rect)#表示切换飞行画面else:screen.blit(me.image2,me.rect)#表示飞机相撞,激活爆炸事件else:print("Planedamage")delay-=1ifdelay==0:delay=100#每5帧切换一次飞行图片样式ifdelay%5==0:switch_image=notswitch_image#在屏幕上绘制背景图,andSpecifythepositionscreen.blit(me.image1,me.rect)#更新整个Surface对象显示在屏幕上,将内存中的内容显示在屏幕上pygame.display.flip()#指定循环frequency通过时钟对象,Loop60timespersecond#帧率是指程序每秒在屏幕上绘制图像clock.tick(60)if__name__=="__main__":try:main()#服务正常退出exceptSystemExit:print("Thegameexitsnormallyexits!")#pass忽略错误继续运行,其实这里和exitpass#服务中出现其他异常except:#直接打印错误traceback.print_exc()pygame.quit()myplane.py:主要是玩家对飞机的控制,包括玩家飞机的各种属性,up,下,左,右移动飞机,重生飞机classMyPlane(pygame.sprite.Sprite):def__init__(self,bg_size):#convert_alpha()改变图片的像素格式,包括每个像素的alpha,相当于让图片的背景透明self。image1=pygame.image.load('images/me1.png').convert_alpha()self.image2=pygame.image.load('images/me2.png').convert_alpha()#平面破坏图像并以数字形式保存self.destory_image=[]self.destory_image.extend([pygame.image.load('images/me_destroy_1.png').convert_alpha(),pygame.image.load('images/me_destroy_2.png').convert_alpha(),pygame.image.load('images/me_destroy_3.png').convert_alpha(),pygame.image.load('images/me_destroy_4.png').convert_alpha()])#定义屏幕宽高self.width=bg_size[0]自我。height=bg_size[1]#get_rect()是处理矩形图片的方法,返回值包含矩形的居中属性,这里返回飞机图片1的位置,可以得到图片的宽高属性self.rect=self.image1.get_rect()#飞机的初始位置,//可整除,位置居中,高度为60,从图片下框到屏幕底部self.rect.left=(self.width-self.rect.width)//2self.rect.top=self.height-self.rect.height-60#设置飞机的速度self.myPlaneSpeed=10self.active=True#设置飞机是否无敌(重生后3秒内无敌))self.invincible=True#飞机碰撞检测会忽略图片中的白色背景部分,从指定的Surface对象返回一个Mask#用于快速实现完美的碰撞检测,Mask可以精确到1像素级别判断#透明中表面对象部分设置为1,不透明部分设置为0。self.mask=pygame.mask.from_surface(self.image1)#玩家平面向上移动defmoveUp(self):#表示frame还没有固定,也就是还没有到达游戏的上边界接口如果self.rect.top>0:self.rect.top-=self.myPlaneSpeed#表示移动到了上边界else:self.rect.top=0#玩家平面向下移动defmoveDown(self):#底部需要绘制高度为60显示其他数据(炸弹数,生命数等)ifself.rect.bottom
