本项目基于 Python3 进行开发,使用了 pygame 模块。
开发这个项目的目的不是为了做游戏,而是熟悉 设计模式 。
源代码
源码已经托管在Github,戳我 查看源码。你也可以通过使用命令 git clone git@github.com:CongLinDev/AirplaneWarGame.git
直接下载源码查看。
类图
类图如下:
设计模式
该项目用到了多种设计模式,但由于Python是动态语言,所以一些可以用到的设计模式没有涉及。
静态工厂方法
对于 Plane 和 Bullet 的创建均是使用了静态工厂创建。
生成器
游戏中的 Level 实质上是一个生成器,根据 Level 的不同,生成的 EnemyPlane 数量不同,其组装的 EnemyPlaneGroup 也不同。
桥接
游戏中的 Listener 起到了桥接的作用,监听按下不同 Button 对象。
享元工厂
这里设计的享元的作用是一次加载所需的资源如图片、音乐等。不同常规的是,这里的享元工厂并没有工厂,笔者把它设计成 单件模式 的效果。
单件模式
这里的享元使用Python的type方法进行创建其元类,只需要使用一个语句 __metaclass__ = metaflyweight
即可将类变成单件。函数 metaflyweight 如下:
1 | #纯函数式使用元类 |
命令模式
游戏中玩家飞机的子弹由玩家飞机通过一个 Command 的子类进行通知发射,其作用是为了使发射子弹与飞机移动进行 时间 上的解耦,有利于以后的扩展。