面向对象跟面向过程是一样的,不同的只是代码的组织方式不一样:
1、创建一个飞机类,实现左移、右移、显示三个功能。
2、创建一个键盘控制函数,实现键盘的左、右、空格键的功能。
3、创建主函数,实现创建窗口、背景图片、背景音乐、并实现所有的逻辑。
创建主函数
玩家飞机射出子弹实现原理:
1、每次按回车就会有一颗子弹射出,起始位置就是从飞机的停靠位置
2、子弹超出窗口就消失,并且删除掉子弹(否则子弹会越来越多,界面会越来越卡)
3、每一颗子弹就代表着一张图片
4、子弹会从发射开始,慢慢的往上移动,直到消失
实操代码:
import pygame
from pygame.locals import *
'''
1、实现飞机的显示,并且可以控制飞机的移动【面向对象】
'''
class HeroPlane(object):
def __init__(self,screen):
#飞机默认位置
self.x=150
self.y=450
#设置要显示内容的窗口
self.screen=screen
#生成飞机的图片对象
self.imageName='./背景/我方.png'
self.image=pygame.image.load(self.imageName)
#用来存放子弹的列表
self.bulletList=[]
pass
def moveleft(self): #左移动
if self.x>0:
self.x-=10
pass
def moveright(self): #右移动
if self.x<310:
self.x+=10
pass
def display(self): #显示飞机
self.screen.blit(self.image,(self.x,self.y))
# 完善子弹的展示逻辑
needDelItemList=[]
for item in self.bulletList:
if item.judge():
needDelItemList.append(item)
pass
pass
# 重新遍历删除越界的子弹
for i in needDelItemList:
self.bulletList.remove(i)
pass
for bullet in self.bulletList:
bullet.display() # 显示一下子弹的位置
bullet.move() # 让这个子弹进行移动,下次再显示的时候就会看到子弹在修改后的位置
pass
#发射子弹
def sheBullet(self):
#创建一个新的子弹对象
newBullet=Bullet(self.x,self.y,self.screen)
self.bulletList.append(newBullet)
pass
pass
class Bullet(object):
def __init__(self,x,y,screen):
self.x=x+13
self.y=y-20
self.screen=screen
self.imgage=pygame.image.load('./背景/我方武器.png')
pass
def display(self):
self.screen.blit(self.imgage,(self.x,self.y))
pass
# 发射子弹
def move(self):
self.y-=5
pass
def judge(self): #判断子弹是否越界
if self.y<0:
return True
else:
return False
pass
pass
def key_control(HeroPlane): #用来实现键盘的检测
# 获取键盘事件
eventList = pygame.event.get()
for event in eventList:
if event.type == QUIT:
print('退出')
exit()
pass
elif event.type == KEYDOWN:
if event.type == K_a or event.key == K_LEFT:
print('left')
HeroPlane.moveleft() #调用函数实现左移动
pass
elif event.type == K_d or event.key == K_RIGHT:
print('right')
HeroPlane.moveright() #调用函数实现右移动
pass
elif event.key == K_SPACE:
print('K_SPACE:发射子弹')
HeroPlane.sheBullet()
pass
pass
def main():
#首先创建一个窗口 用来显示内容
screen=pygame.display.set_mode((350,500),depth=32)
#设定一个背景图片对象
background=pygame.image.load('./背景/背景图.jpg')
#设置一个标题
pygame.display.set_caption('飞机游戏')
#设置背景音乐
pygame.mixer.init()
pygame.mixer.music.load('./背景/背景音乐.MP3')
pygame.mixer.music.set_volume(0.2)
pygame.mixer.music.play(-1) #音乐循环次数 -1表示无限循环
#创建一个飞机对象
hero=HeroPlane(screen)
#设定要显示的内容
while True:
screen.blit(background,(0,0))
#
hero.display()
key_control(hero)
#更新显示内容
pygame.display.update()
pass
if __name__=='__main__':
main()
此时子弹会随着按空格键从飞机位置发出: