3D游戏编程与设计作业五
编写一个简单的鼠标打飞碟(Hit UFO)游戏
- 游戏内容要求:
- 游戏有 n 个 round,每个 round 都包括10 次 trial;
- 每个 trial 的飞碟的色彩、大小、发射位置、速度、角度、同时出现的个数都可能不同。它们由该 round 的 ruler 控制;
- 每个 trial 的飞碟有随机性,总体难度随 round 上升;
- 鼠标点中得分,得分规则按色彩、大小、速度不同计算,规则可自由设定。
- 游戏的要求:
- 使用带缓存的工厂模式管理不同飞碟的生产与回收,该工厂必须是场景单实例的!具体实现见参考资源 Singleton 模板类
- 近可能使用前面 MVC 结构实现人机交互与游戏模型分离
实践内容
-
游戏思想
为了减少开销,提升游戏的运行速度,采用工厂模式对飞碟进行管理,飞碟的生产与回收由工厂来执行,剩下的场景管理,动作管理和上次牧师与魔鬼相同。 -
游戏预制
一共四种预制
其中,爆炸效果的具体设置如下: -
游戏构架
UML图(盗用的)如下:
具体部分如下:
部分详解:
1. 飞碟数据DiskData:这个方法通过一个变量给游戏对象附加数据属性(分数),将作为Component挂载到一个 disk 游戏对象。
2. 飞碟管理员DiskFactory:这个方法负责接收场记的请求(直接被场记调用),对 disk 游戏对象产生和回收。这里运用了工厂模式,减少了游戏对象创建与销毁成本,减少创建和销毁次数,使程序易于扩展。
3. 记分员Scorekeeper:负责根据游戏对象的DiskData组件中的变量score进行分数的累加,分数被场景直接访问,提供清零方法。
4. 抛出动作FlyDisk:继承了动作基类SSAction,接收速度级别参数,实现抛出Disk动作。
这里实现了飞行速度和飞碟的发射频率的改变以及随机性和总体难度随 round 上升的实现,但比较遗憾的是未能实现得分随颜色变化的要求。
5. 其他部分与上次牧师与魔鬼作业大致相似,这里就不多说了。