Priests and Devils是一款益智類的小游戲,需要在規定的時間內幫助牧師和魔鬼都安全過河。河邊有三個魔鬼和三個牧師,他們都想過河,但河上只有一條船,這艘船每次只能搭載兩個,而且必須有一個人駕駛船行駛。如果河一邊的魔鬼數量多於牧師,牧師將被魔鬼擊殺,游戲結束。游戲鏈接:http://www.flash-game.net/game/2535/priests-and-devils.html
游戲成品圖
設置60s倒計時——60s后如果未能安全運送所有魔鬼與牧師,游戲失敗。
嘗試改進界面,對一些東西還不太熟悉。
1列出游戲中提及的事物(Objects)
Object:三個魔鬼(用白cube表示)、三個牧師(用黑sphere表示)、一艘船、兩個岸
2游戲架構:
ISceneController.cs和IUserAction.cs是接口類, ISceneController.cs定義場景控制方法,而FirstController.cs是控制一個場景的具體場景實現,實現的函數定義在ISceneController.cs之中,而場景管理器不知道具體實現方法,具體實現由導演(SSDirector)決定。只有場景設置可見,保證了內部核心代碼的安全性。IUserAction.cs定義用戶交互方法,UserGUI.cs實現對應方法。MVC,達到模式,視圖,控制分離。
例如:
1.接收到用戶點擊事件(UserGUI.cs)
2.調用用戶接口函數(函數在IUserAction.cs中)
3.轉到函數實現——轉到場景控制器FirstController.cs
4.請求具體方法實現——轉到導演SSDirector.cs——控制
2.3在 GenGameObjects 中創建 長方形、正方形、球 及其色彩代表游戲中的對象。
游戲中用白正方形表示魔鬼,黑球代表牧師,長方體代表船以及兩岸。
2.4用表格列出玩家動作表(規則表),注意,動作越少越好
與規則表對應的動作函數表:
行為大致可以分為三種,上船、開船和下船。開船有限制條件,必須要有一個牧師或一個魔鬼船方可開動。
1.上船
分為兩種對象——牧師和魔鬼。上船這個動作可以把牧師或者魔鬼作為船的子對象,在船中還有空位的時候就可以加進設置子對象的代碼。為區分是魔鬼或者牧師,在預設的時候添加對應的Tag。牧師為Priest,魔鬼為Devil
void AboardTheBoat(GameObject obj) { if (_instance.BCapacity() != 0) { obj.transform.parent = _instance.boat_obj.transform; if (_instance.boat[0] == null) { _instance.boat[0] = obj; obj.transform.localPosition = new Vector3(0, 1.2f, -0.3f); } else { _instance.boat[1] = obj; obj.transform.localPosition = new Vector3(0, 1.2f, 0.3f); } } }
2.開船
船上必須有一個牧師或者一個魔鬼,將船從一岸到另一個岸邊。
3.下船
不分對象,但分從船左船右下船,解除子對象綁定,再移動對應對象的位置。
public void getOffTheBoat(int side) { if (_instance.boat[side] != null) { _instance.boat[side].transform.parent = null; if (_instance.state == State.BEND) { if (_instance.boat[side].tag == "Priest") { _instance.priestsEnd.Push(boat[side]); } else if (_instance.boat[side].tag == "Devil") { _instance.devilsEnd.Push(boat[side]); } } else if (_instance.state == State.BSTART) { if (_instance.boat[side].tag == "Priest") { _instance.priestsStart.Push(boat[side]); } else if (_instance.boat[side].tag == "Devil") { _instance.devilsStart.Push(boat[side]); } } _instance.boat[side] = null; } }
關於代碼,將FirstContorller.cs掛載到空對象,將UserGUI.cs掛載到主攝像機即可運行
2.5修改代碼,使用 C# 集合類型 有效組織對象,通過 xxSceneController 對象 GenGameObjects 互動完成游戲邏輯。(這一點要求不同,現在改用課件框架。)如需要游戲對象代碼,可以動態綁定。
2.6注意事項:
1.整個游戲僅主攝像機和一個 Empty對象,其他對象必須代碼動態生成!!!。
使用預制動態生成對象。(未包含界面改進后的對象)
2.整個游戲不許出現 Find 游戲對象, SendMessage 這類突破程序結構的 通訊耦合 語句。 違背本條准則,不給分
3.注意細節,例如:船未靠岸,牧師與魔鬼上下船運動中,均不能接受用戶事件!
大致代碼邏輯參考師兄博客。