<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 多人聯機射擊游戲中的設計模式應用(二) (6) 觀察者模式 聯機射擊游戲可以實時顯示隊友和敵人的存活信息,如果有隊友或敵人陣亡,所有在線游戲玩家將收到相應的消息,可以提供一個統一的中央角色控制類(CenterController)來實現消息傳遞機制,在中央角色控制器中定義一個集合用于存儲所有的玩家信息,如果某玩家角色(Player)陣亡,則調用CenterController的通知方法notifyPlayers(),該方法將遍歷用戶信息集合,調用每一個Player的display()方法顯示陣亡信息,隊友陣亡和敵人陣亡的提示信息有所不同,在使用notifyPlayers()方法通知其他用戶的同時,陣亡的角色對象將從用戶信息集合中被刪除。可使用觀察者模式來實現信息的一對多發送,類圖如圖6所示: ![](http://img.my.csdn.net/uploads/201212/06/1354723472_2717.jpg) 圖6 觀察者模式實例類圖 在圖6中,CenterController充當觀察目標,Observer充當抽象觀察者,Player充當具體觀察者。在Player類中,name屬性表示角色名,type屬性表示角色類型,如“戰隊A”或“戰隊B”等。Player的die()方法執行時將調用CenterController的notifyPlayers()方法,在notifyPlayers()方法中調用其他Player對象的提示方法,如果是隊友陣亡則調用displayTeam(),如果是敵人陣亡則調用displayEnemy();還將調用detach()方法刪除陣亡的Player對象,其中CenterController類的notifyPlayers()方法代碼片段如下所示: ``` for(Object player : players) { if(player.getName().equals(name)) { this.detach(player); //刪除陣亡的角色 } else { if(player.getType().equals(type)) { player.displayTeam(name); //隊友顯示提示信息 } else { player.displayEnemy(name); //敵人顯示提示信息 } } } ``` (7) 單例模式 為了節約系統資源,在聯機射擊游戲中可以使用單例模式來實現一些管理器(Manager),如場景管理器(SceneManager)、聲音管理器(SoundManager)等,如圖7所示的場景管理器SceneManager類: ![](http://img.my.csdn.net/uploads/201212/06/1354723530_2433.jpg) 圖7 單例模式實例類圖 SceneManager類的實現代碼片段如下所示【注:以下代碼未考慮多線程訪問的問題】: ``` class SceneManager { private static SceneManager sManager = null; private SceneManager() { //初始化代碼 } public synchronized static SceneManager getInstance() { if(sManager==null) { sManager = new SceneManager(); } return sManager; } public void manage() { //業務方法 } } ``` (8) 狀態模式 在射擊游戲中,游戲角色存在幾種不同的狀態,如正常狀態、暫停狀態、陣亡狀態等,在不同狀態下角色對象的行為不同,可使用狀態模式來設計和實現角色狀態的轉換,類圖如圖8所示: ![](http://img.my.csdn.net/uploads/201212/06/1354723562_1798.jpg) 圖8 狀態模式實例類圖 在圖8中,游戲角色類Player充當環境類,State充當抽象狀態類,其子類NormalState、PauseState和DeathState充當具體狀態類,在具體狀態類的pause()、start()、beAttacked()等方法中可實現狀態轉換,其中NormalState類的代碼片段如下所示: ``` class NormalState extends State { public void pause() //游戲暫停 { //暫停代碼省略 player.setState(new PauseState(this)); //轉為暫停狀態 } public void start() //游戲啟動 { //游戲程序正在運行中,該方法不可用 } public void beAttacked() //被攻擊 { //其他代碼省略 if(lifeValue<=0) { player.setState(new DeathState(this)); //轉為陣亡狀態 } } public void shot() //射擊 { //代碼省略 } public void move() //移動 { //代碼省略 } } ``` (9) 適配器模式 為了增加游戲的靈活性,某些射擊游戲還可以通過游戲手柄來進行操作,游戲手柄的操作程序和驅動程序由游戲手柄制造商提供,為了讓當前的射擊游戲可以與游戲手柄兼容,可使用適配器模式來進行設計,類圖如圖9所示: ![](http://img.my.csdn.net/uploads/201212/06/1354723596_1612.jpg) 圖9 適配器模式實例類圖 在圖9中,GamepadsAdapter充當適配器,它將游戲手柄中按鍵(GamepadsKey)的方法適配到現有系統中,在其move()方法中可以調用MoveKey類的handle()方法,在其shot()方法中可以調用ShotKey的handle()方法,從而實現通過手柄來控制游戲運行。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看