HW5
1. 编写一个简单的鼠标打飞碟(Hit UFO)游戏
游戏内容要求:
- 游戏有 n 个 round,每个 round 都包括10 次 trial;
- 每个 trial 的飞碟的色彩、大小、发射位置、速度、角度、同时出现的个数都可能不同。它们由该 round 的 ruler 控制;
- 每个 trial 的飞碟有随机性,总体难度随 round 上升;
- 鼠标点中得分,得分规则按色彩、大小、速度不同计算,规则可自由设定。
游戏的要求:
- 使用带缓存的工厂模式管理不同飞碟的生产与回收,该工厂必须是场景单实例的!具体实现见参考资源 Singleton 模板类
- 近可能使用前面 MVC 结构实现人机交互与游戏模型分离
游戏设计:
本次设计使用了单例模式和MVC模式,下面将按照实际设计的顺序来展示本次 Hit UFO 游戏的设计。
- 设计飞碟预设
由于U3D没有给我们提供飞碟的形状,所以我们只好自己设计。
我选择的方式是将一个圆球外面再套上一个圆盘,这样就做成了我们小时候印象中最经典飞碟的样子。由于我们需要给飞碟添上颜色,所以还需要给飞碟添上material组件。这就是我们的飞碟预设了。
- 设计Director
Director 的设计十分简单,使用单例模式。设置一个 Director类 的private static成员变量,并设置一个与之配套的 getInstance() 的成员函数。再设置一个 currentController 的成员变量就可以了。
public class Director : System.Object { private static Director _instance; public Controller currentController { get; set; } public static Director getInstance() { if (_instance == null) { _instance = new Director(); } return _instance; } }
- 设计Controller
Controller 的设计也比较简单,它负责统筹各个组件之间的关系,所以在其中我们需要设置一下几个成员变量:_UFOfactory、__director、my_diskfactory ,并对其进行初始化、实例化。需要注意的是, _UFOfactory 采用的是单例模式。
public class Controller : MonoBehaviour { public UFOFactory _UFOfactory; public Director _director; private GameObject my_diskfactory; void Awake() { Random.InitState((int)System.DateTime.Now.Ticks); my_diskfactory = new GameObject("Disk_Factory"); my_diskfactory.AddComponent<UFOFactory>(); _director = Director.getInstance(); _UFOfactory = Singleton<UFOFactory>.Instance; _director.currentController = this; } }
- 设计UFOaction
UFOaction 定义了UFO的飞行动作,以下是其详细介绍。
成员变量: