通过前面9篇的讲解,已经可以运行一个完整的飞机大战游戏,接下来补充一些流程,完善细节。
首先观察之前的脚本,Main()
函数586-696共110行,阅读起来还是比较费劲。
经过完善,压缩到了26行,结构也非常清晰,而且本次修改,还添加了很多新效果,比如敌机BOSS花式子弹、更完善的状态显示、敌机刷新机制……。
之前的音效、背景音乐默认音量太大了,先给PlaySound
函数加一句,让耳朵清净一下。
sound.set_volume(0.1)
把背景音乐播放也封装成函数
def PlayMusic(Musicfilename): # 播放背景音乐 # exp10 添加
pygame.mixer.music.load(Musicfilename)
pygame.mixer.music.play(-1, 0)
pygame.mixer.music.set_volume(0.1)
正式开始本次脚本的完善
一、将图中标记的函数和Main
函数中的部分流程,封装成一个对象。
脚本比较长,这里就不发了,在之前提供的网盘共享会有完整源码。
对象结构如图,也就是将之前的函数封装成方法。
二、类属性的应用
之前的子弹、补给包、敌机,是在函数中声明了列表变量来保存。
那么对象中要对这些列表操作,就需要把它做为参数传入,比如英雄飞机,要发射子弹,就要传入这个子弹列表:
def __init__(self, pygame_screen, Bullets):
而且,每次创建对象都需要操作列表
所以这里用类属性来替代列表变量,在有需要的类中声明列表group,__init__
方法中添加:
类名.group.append(self)
这样就可以和全局变量一样的方便引用
修改以后要把原来需要传的参数删除,比如图中的hero:
下一篇讲解相关类的修改。