游戏规则
- 游戏包括了n个round(回合),每个回合有十次trial。
- 通过按空格开始每个trial,同时会发射飞碟(UFO),发射飞碟的数量会逐渐递增,为了减低游戏难度我把发射飞碟的数量限制为最多3个(因为自己体验的时候发现5个的话要全命中难度较大)。颜色/角度/速度均随机产生。
- 用户在每一个trial必须在飞碟落地前击毙所有UFO才能成功进入下一个trial,当通关十个trial的时候会自动进入下一轮。
- 用户每击中一个飞碟加100分,但如果无法通过trail会使分数清0。
游戏设计
UML图
游戏开发
接口
这里IUserAction接口定义了与用户交互相关的动作,用户可以通过按下空格发射飞碟,也可以点击鼠标打飞碟。而IGameStatusOp接口定义了与游戏状态相关的工作,由场记(SceneController)控制。
public interface IUserAction
{
void launchUFO();
void hitUFO(Vector3 mousePos);
}
public interface IGameStatusOp
{
int getRoundNum();
void addScore();
void subScore();
}
具体的用户接口实现如下:
public class UserInterface : MonoBehaviour {
private IUserAction action;
// Use this for initialization
void Start () {
action = SceneController.getInstance() as IUserAction;
}
// Update is called once per frame
void Update () {
//检测鼠标点击
if (Input.GetMouseButtonDown(0))
{
Vector3 mousePos = Input.mousePosition;
action.hitUFO(mousePos);
}
//检测用户按下空格
if (Input.GetKeyDown(KeyCode.Space))
{
action.launchUFO();
}
}
}
场记
场记采用了单例模式,这样在其他地方调用getInstance()获取到的就是同一个SceneController对象。不同于前面几个星期,游戏由导演、场记、动作管理员、演员构成;在这个打飞碟游戏中,场记(由于突然有钱)请来了记分员和飞碟管理者,当用户按下空格,场记监控到只需要大喊一声“嘿!飞碟管理者,大胆放出你的飞碟吧~~”,具体怎么发射飞碟由飞碟管理者控制,场记就可以躺下来好好休息了~当然,记分相关的工作也都分发给了记分员,有钱真好~
public class SceneController : System.Object, IUserAction, IGameStatusOp
{
private static SceneController instance; //单例模式
private UFOController myUFOCtrl; //飞碟管理者
private StatusController myStatusCtrl; //记分员
public static SceneController getInstance()
{
if (instance == null) instance = new SceneController();
return instance;
}
internal void setUFOController(UFOController ufoCtrl)
{
if (myUFOCtrl == null) myUFOCtrl = ufoCtrl;
}
internal void setStatusController(StatusController gameStatus)
{
if (myStatusCtrl == null) myStatusCtrl = gameStatus;
; }
//记分员负责的工作
public void addScore()
{
myStatusCtrl.addScore();
}