【转】多人联机射击游戏中的设计模式应用(一)
為了方便大家更加系統地學習和掌握各種常用的設計模式,下面通過一個綜合實例——“多人聯機射擊游戲”來學習如何在實際開發中綜合使用設計模式。
?
??????反恐精英(Counter-Strike, CS)、三角洲部隊、戰地等多人聯機射擊游戲廣受玩家歡迎,在多人聯機射擊游戲的設計中,可以使用多種設計模式。下面我選取一些較為常用的設計模式進行分析:
?
????? (1)?抽象工廠模式
????? 在聯機射擊游戲中提供了多種游戲場景,不同的游戲場景提供了不同的地圖、不同的背景音樂、不同的天氣等,因此可以使用抽象工廠模式進行設計,類圖如圖1所示:
圖1?抽象工廠模式實例類圖
???????在圖1中,SceneFactory充當抽象工廠,其子類SceneAFactory等充當具體工廠,可以創建具體的地圖(Map)、背景音樂(Music)和天氣(Weather)等產品對象,如果需要增加新場景,只需增加新的具體場景工廠類即可。
?
????? (2)?建造者模式
????? 在聯機射擊游戲中每一個游戲人物角色都需要提供一個完整的角色造型,包括人物造型、服裝、武器等,可以使用建造者模式來創建一個完整的游戲角色,類圖如圖2所示:
圖2?建造者模式實例類圖
????? 在圖2中,PlayerCreatorDirector充當指揮者角色,PlayerBuilder是抽象建造者,其子類PlayerBuilderA和PlayerBuilderB是具體建造者,用于創建不同的游戲角色,Player是所創建的完整產品,即完整的游戲角色,它包含形體(body)、服裝(costume)和武器(weapon)等組成部分。
?
????? (3)?工廠方法模式
????? 在射擊游戲中,AK47沖鋒步槍、狙擊槍、**槍等不同武器(Weapon)的外觀、使用方法和殺傷力都不相同,玩家可以使用不同的武器,而且游戲升級時還可以增加新的武器,無需對現有系統做太多修改,可使用工廠方法模式來設計武器系統,類圖如圖3所示:
圖3?工廠方法模式實例類圖
???????在圖3中,WeaponFactory接口表示抽象武器工廠,其子類AK47GunFactory生產AK47Gun,SniperRifleFactory生產SniperRifle,不同的武器的display()、use()和fire()等方法有不同的實現。
?
????? (4)?迭代器模式
????? 在射擊游戲中,一個玩家可以擁有多種武器,如既可以擁有AK47沖鋒槍,還可以擁有**槍和匕首,因此系統需要定義一個彈藥庫(武器的集合),在游戲過程中可以遍歷彈藥庫(Magazine),選取合適的武器,在遍歷彈藥庫時可使用迭代器模式,如類圖如圖4所示:
圖4?迭代器模式實例類圖
????? 在類Magazine中,可以通過迭代器遍歷彈藥庫,Magazine類的代碼片段如下所示:
? [java]?view plaincopy
????? 除了遍歷彈藥庫外,迭代器模式還可以用于遍歷戰隊盟友等聚合對象。
?
????? (5)?命令模式
??????在射擊游戲中,用戶可以自定義快捷鍵,根據使用習慣來設置快捷鍵,如“W”鍵可以設置為“開槍”的快捷鍵,也可以設置為“前進”的快捷鍵,可通過命令模式來實現快捷鍵設置,類圖如圖5所示:
圖5?命令模式實例類圖
????? 在圖5中,ShortcutKey充當請求調用者,在其press()方法中將判斷用戶按的是哪個按鍵,再調用命令對象的execute()方法,在具體命令對象的execute()方法中將調用接收者如ShotHandler、GoAheadHandler的action()方法來執行具體操作。在實現時可以將具體命令類類名和鍵盤按鍵的鍵碼(Keycode)存儲在配置文件中,配置文件格式如下所示:
? [html]?view plaincopy
????? 如果需要更換快捷鍵,只需修改鍵碼和具體命令類的映射關系即可;如果需要在游戲的升級版本中增加一個新功能,只需增加一個新的具體命令類,可通過修改配置文件來為其設置對應的按鍵,原有類庫代碼無需任何修改,很好地符合開閉原則。
?
【作者:劉偉?http://blog.csdn.net/lovelion】
轉載于:https://www.cnblogs.com/duzib/p/3168816.html
總結
以上是生活随笔為你收集整理的【转】多人联机射击游戏中的设计模式应用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 2524 Ubiquitous
- 下一篇: 分析死锁并处理_整理贴