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;
}
}
<