目录
过程说明:
主函数
键盘控制
创建类
01、飞机基类
02、子弹基类
03、Hero飞机类
04、enemy飞机类
源代码及素材
过程说明:
应用到的库:
import pygame
import random
一、框架
1、创建界面宽度
2、背景图片
3、标题
4、背景音乐
二、键盘控制
1、接收键盘控制-自己的方向和射击控制
三、创建类
1、飞机基类
a、初始化
屏幕、图片装载、子弹列表
b、显示
图片、子弹越界问题
2、子弹基类
a、初始化
屏幕、飞机类型、图片装载
b、移动
判断飞机类型移动
c、显示
图片
d、判断
是否越界
3、Hero飞机类-继承飞机、子弹基类
a、初始化
xy坐标,继承基类
b、左移动
c、右移动
d、发射子弹
引用子弹基类实例对象,通过列表保存
4、Enemy飞机类-继承飞机、子弹基类
a、初始化
xy坐标,继承基类,初始方向-右
b、移动
c、发射子弹
通过random随机发射
引用子弹基类实例对象,通过列表保存
主函数
def main():#界面screen=pygame.display.set_mode((350,500),depth=32)background=pygame.image.load('./feiji/background.png')pygame.display.set_caption('飞机大作战')#背景音乐pygame.mixer.init()pygame.mixer.music.load('./feiji/background.mp3')pygame.mixer.music.play(-1)#实例化对象hero=HeroPlane(screen)enemy=EnemyPlane(screen)while True:screen.blit(background,(0,0))hero.display()enemy.display()enemy.move()enemy.sheBullet()keyControl(hero)pygame.display.update()pygame.time.Clock().tick(120)pass
键盘控制
def keyControl(HeroObj):eventList=pygame.event.get()for event in eventList:if event.type==QUIT:print('退出!')exit()passelif event.type==KEYDOWN:if event.key==K_a or event.key==K_LEFT:print('left')HeroObj.moveleft()elif event.key==K_d or event.key==K_RIGHT:print('right')HeroObj.moveright()elif event.key==K_SPACE:print('空格-发射')HeroObj.sheBullet()passpasspasspass
创建类
01、飞机基类
class BasePlane(object):def __init__(self,screen,imagePath):self.screen=screenself.image=pygame.image.load(imagePath)self.bullentList=[]passdef display(self):self.screen.blit(self.image,(self.x,self.y))#子弹越界删除needDelItemList=[]for item in self.bullentList:if item.judge():needDelItemList.append(item)#先保存for i in needDelItemList:self.bullentList.remove(i)#再删除#发射子弹for bullet in self.bullentList:bullet.display()bullet.move()pass
02、子弹基类
class CommonBullet(object):def __init__(self,x,y,screen,bulletType):self.screen=screenself.type=bulletType#判断飞机类型-再初始化子弹坐标if self.type=='hero':self.x=x+13self.y=y-20self.imagePath='./feiji/bullet.png'elif self.type=='enemy':self.x=xself.y=y+10self.imagePath='./feiji/bullet1.png'passself.image=pygame.image.load(self.imagePath)pass#判断飞机类型-再根据类型决定子弹走向def move(self):if self.type=='hero':self.y-=2elif self.type=='enemy':self.y+=2passdef display(self):self.screen.blit(self.image,(self.x,self.y))passdef judge(self):if self.y>=500 or self.y<=0:return Trueelse:return Falsepass
03、Hero飞机类
class HeroPlane(BasePlane):def __init__(self,screen):super().__init__(screen,'./feiji/hero.png')self.x=150self.y=450passdef moveleft(self):if self.x>=0:self.x-=10passdef moveright(self):if self.x<=310:self.x+=10passdef sheBullet(self):newBullet=CommonBullet(self.x,self.y,self.screen,'hero')self.bullentList.append(newBullet)passpass
04、enemy飞机类
class EnemyPlane(BasePlane):def __init__(self,screen):super().__init__(screen,'./feiji/enemy0.png')self.direction='right'self.x=0self.y=0passdef move(self):if self.direction=='right':self.x+=1elif self.direction=='left':self.x-=1if self.x>=330:self.direction='left'elif self.x<=0:self.direction='right'passdef sheBullet(self):num=random.randint(1,60)if num==3:newBullet=CommonBullet(self.x,self.y,self.screen,'enemy')self.bullentList.append(newBullet)passpass
源代码及素材
代码及其素材: 提取码:vwk0/s/12QaRLi7-Ogh1Oh93HcCH4A