HW7-智能巡逻兵
一、作業(yè)要求
智能巡邏兵
游戲設計要求:
- 創(chuàng)建一個地圖和若干巡邏兵;
- 每個巡邏兵走一個3~5個邊的凸多邊型,位置數(shù)據(jù)是相對地址。即每次 確定下一個目標位置,用自己當前位置為原點計算;
- 巡邏兵碰撞到障礙物如樹,則會自動選下一個點為目標;
- 巡邏兵在設定范圍內感知到玩家,會自動追擊玩家;
- 失去玩家目標后,繼續(xù)巡邏;
- 計分:每次甩掉一個巡邏兵計一分,與巡邏兵碰撞游戲結束;
程序設計要求:
- 必須使用訂閱與發(fā)布模式傳消息、工廠模式生產巡邏兵
二、相關知識
1.訂閱與發(fā)布模式(觀察者模式)
也稱為觀察者模式(Observer Pattern)
- 發(fā)布者與訂閱者沒有直接的耦合
- 是實現(xiàn)模型與視圖分離的重要手段
- 例如:數(shù)據(jù)DataSource對象,就是Subject。任何使用該數(shù)據(jù)源 的顯示控件,如Grid都會及時更新。
實現(xiàn):
定義事件源
2.工廠模式的設計
為什么需要工廠對象
- 游戲對象的創(chuàng)建與銷毀高成本,必須減少銷毀次數(shù)。如:游戲中子彈
- 屏蔽創(chuàng)建與銷毀的業(yè)務邏輯,使程序易于擴展
實現(xiàn)示例DiskFactory:
設計讀圖:這是一個帶游戲對象緩存的工廠類
- 前面游戲,由導演、場記、運動管理師、演員構成。
- 新游戲中,場記請了記分員、飛碟管理員
- 其中記分員按飛碟的數(shù)據(jù)計分,記分員擁有計分規(guī)則
- 場記只需要管理出飛碟規(guī)則與管理碰撞就可以了
三、關鍵部分的實現(xiàn)
1.巡邏兵工廠
主要負責用預制創(chuàng)建四個士兵、點擊重新開始之后銷毀士兵并重新創(chuàng)建。
2.訂閱與發(fā)布模式傳遞消息
定義事件源:
public class AreaCollide : MonoBehaviour {public int sign;//注冊兩個事件//事件一:追蹤//定義回調函數(shù),定義subjectpublic delegate void CanFollow(int state,bool isEnter);public static event CanFollow canFollow;//事件二:分數(shù)public delegate void AddScore();public static event AddScore addScore;//發(fā)出通知void OnTriggerEnter(Collider collider){if (collider.gameObject.tag == "Player"){canFollow(sign,true);}}private void OnTriggerExit(Collider collider){if (collider.gameObject.tag == "Player"){canFollow(sign,false);addScore();}} }訂閱(注冊)以上事件:
//訂閱追蹤的巡邏兵 private void Start(){minPosX = startPos.x - 2.5f;minPosZ = startPos.z - 2.5f;isMoving = false;AreaCollide.canFollow += changeStateToFollow;} public void changeStateToFollow(int sign_,bool isEnter){if(sign == sign_ ){if (isEnter){state = PatrolState.FOLLOW;player = (SSDirector.getInstance().currentScenceController as FirstController).player;isFollowPlayer = true;} else{isFollowPlayer = false;state = PatrolState.PATROL;player = null;isMoving = false;}}}//訂閱分數(shù)增加的記分Recoder void Start(){AreaCollide.addScore += SetScore; }四、成品
最后,謝謝師兄的博客幫助!
視頻傳送門
總結
- 上一篇: datafountain自然语言处理比赛
- 下一篇: sqlServer服务器名称