為了方便大家更加系統地學習和掌握各種常用的設計模式,下面通過乙個綜合例項——「多人聯機射擊遊戲」來學習如何在實際開發中綜合使用設計模式。
反恐精英(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類的**片段如下所示:
public class magazine
public void display()
} ......
}
除了遍歷彈藥庫外,迭代器模式還可以用於遍歷戰隊盟友等聚合物件。
(5) 命令模式
在射擊遊戲中,使用者可以自定義快捷鍵,根據使用習慣來設定快捷鍵,如「w」鍵可以設定為「開槍」的快捷鍵,也可以設定為「前進」的快捷鍵,可通過命令模式來實現快捷鍵設定,類圖如圖5所示:
圖5 命令模式例項類圖
在圖5中,shortcutkey充當請求呼叫者,在其press()方法中將判斷使用者按的是哪個按鍵,再呼叫命令物件的execute()方法,在具體命令物件的execute()方法中將呼叫接收者如shothandler、goaheadhandler的action()方法來執行具體操作。在實現時可以將具體命令類類名和鍵盤按鍵的鍵碼(keycode)儲存在配置檔案中,配置檔案格式如下所示:
……如果需要更換快捷鍵,只需修改鍵碼和具體命令類的對映關係即可;如果需要在遊戲的公升級版本中增加乙個新功能,只需增加乙個新的具體命令類,可通過修改配置檔案來為其設定對應的按鍵,原有類庫**無需任何修改,很好地符合開閉原則。
】
多人聯機射擊遊戲中的設計模式應用(二)
6 觀察者模式 圖6 觀察者模式例項類圖 在圖6中,centercontroller充當觀察目標,observer充當抽象觀察者,player充當具體觀察者。在player類中,name屬性表示角色名,type屬性表示角色型別,如 戰隊a 或 戰隊b 等。player的die 方法執行時將呼叫cen...
對於多人聯機遊戲中 遊戲房間實現的想法
實現多人在 間的功能後 為了能讓使用者sessionid與名字匹配 用map將 session與名字 用key value儲存 private static map map newhashmap string session map.put m.getziji session 1 2新建乙個sess...
遊戲中的設計模式 工廠模式
現在的網遊更新很快,要延長網路遊戲生命週期的方法是,更新,不斷地更新,不斷的將新內容呈現於玩家面前。這要求遊戲程式的設計要有彈性,的重用至關重要。今天就說說遊戲中的工廠模式。說到工廠模式,有簡單工廠模式,工廠方法模式,抽象工廠模式。一 簡單工廠模式 ps 物件導向的程式設計,並不是類越多越好,類的劃...