(6)觀察者模式java
聯機射擊遊戲能夠實時顯示隊友和敵人的存活信息,若是有隊友或敵人陣亡,全部在線遊戲玩家將收到相應的消息,能夠提供一個統一的中央角色控制類(CenterController)來實現消息傳遞機制,在中央角色控制器中定義一個集合用於存儲全部的玩家信息,若是某玩家角色(Player)陣亡,則調用CenterController的通知方法notifyPlayers(),該方法將遍歷用戶信息集合,調用每個Player的display()方法顯示陣亡信息,隊友陣亡和敵人陣亡的提示信息有所不一樣,在使用notifyPlayers()方法通知其餘用戶的同時,陣亡的角色對象將從用戶信息集合中被刪除。可以使用觀察者模式來實現信息的一對多發送,類圖如圖6所示:web
圖6 觀察者模式實例類圖多線程
在圖6中,CenterController充當觀察目標,Observer充當抽象觀察者,Player充當具體觀察者。在Player類中,name屬性表示角色名,type屬性表示角色類型,如「戰隊A」或「戰隊B」等。Player的die()方法執行時將調用CenterController的notifyPlayers()方法,在notifyPlayers()方法中調用其餘Player對象的提示方法,若是是隊友陣亡則調用displayTeam(),若是是敵人陣亡則調用displayEnemy();還將調用detach()方法刪除陣亡的Player對象,其中CenterController類的notifyPlayers()方法代碼片斷以下所示:app
(7)單例模式ide
爲了節約系統資源,在聯機射擊遊戲中能夠使用單例模式來實現一些管理器(Manager),如場景管理器(SceneManager)、聲音管理器(SoundManager)等,如圖7所示的場景管理器SceneManager類:oop
圖7 單例模式實例類圖this
SceneManager類的實現代碼片斷以下所示【注:如下代碼未考慮多線程訪問的問題】:url
(8)狀態模式spa
在射擊遊戲中,遊戲角色存在幾種不一樣的狀態,如正常狀態、暫停狀態、陣亡狀態等,在不一樣狀態下角色對象的行爲不一樣,可以使用狀態模式來設計和實現角色狀態的轉換,類圖如圖8所示:.net
圖8 狀態模式實例類圖
在圖8中,遊戲角色類Player充當環境類,State充當抽象狀態類,其子類NormalState、PauseState和DeathState充當具體狀態類,在具體狀態類的pause()、start()、beAttacked()等方法中可實現狀態轉換,其中NormalState類的代碼片斷以下所示:
(9)適配器模式
爲了增長遊戲的靈活性,某些射擊遊戲還能夠經過遊戲手柄來進行操做,遊戲手柄的操做程序和驅動程序由遊戲手柄製造商提供,爲了讓當前的射擊遊戲能夠與遊戲手柄兼容,可以使用適配器模式來進行設計,類圖如圖9所示:
圖9 適配器模式實例類圖
在圖9中,GamepadsAdapter充當適配器,它將遊戲手柄中按鍵(GamepadsKey)的方法適配到現有系統中,在其move()方法中能夠調用MoveKey類的handle()方法,在其shot()方法中能夠調用ShotKey的handle()方法,從而實現經過手柄來控制遊戲運行。