最近也是經(jīng)歷了裁員換工作,在熟悉了新項目游戲后端的架構(gòu)后白翻,感覺到游戲業(yè)務(wù)上的一些設(shè)計有些不同乍炉,當(dāng)然設(shè)計的不同也受到游戲類型的影響绢片,這里記錄下自己的總結(jié)。
上一家公司的項目是一個MMORPG類型的游戲岛琼,業(yè)務(wù)比較核心的開發(fā)內(nèi)容是副本相關(guān)的玩法底循,比如爬塔副本、PVP擂臺賽槐瑞、各種組隊副本等等熙涤。
玩法副本類繼承于副本基類作媚,基類中定義了各種常用的虛函數(shù)接口捣卤,比如玩家進入/離開副本、擊殺蜈膨、死亡等等悼沿。所有的副本內(nèi)部邏輯都寫在這個新玩法副本類中等舔。除了副本類,還需要一個handle類來接收新玩法相關(guān)的協(xié)議糟趾;一個manager類來處理玩家在新玩法中的數(shù)據(jù)以及與玩家相關(guān)的邏輯软瞎,比如玩家的積分、玩法獲勝后獎勵的發(fā)放等等(并不是每一個玩法都需要這個類拉讯,如果有需要處理的數(shù)據(jù)或邏輯才會有)涤浇。
玩家會持有各種玩法的manager類指針,當(dāng)handle類收到協(xié)議需要處理邏輯或者副本類中需要處理玩家數(shù)據(jù)時魔慷,直接通過玩家身上的manager類指針調(diào)用函數(shù)即可只锭。思路比較簡單,邏輯好理解院尔。
新公司的項目是一個即時對戰(zhàn)動作游戲蜻展,業(yè)務(wù)開發(fā)主要是各種節(jié)日活動,比如雙十一活動邀摆、元旦活動纵顾、春節(jié)活動等等。
實現(xiàn)上栋盹,將各種基礎(chǔ)活動(比如抽獎施逾、簽到、任務(wù)例获、兌換商城等等)實現(xiàn)為一個個component組件汉额,節(jié)日活動module類根據(jù)需要注冊對應(yīng)的component組件即可。
邏輯的觸發(fā)使用了事件機制榨汤,組件類根據(jù)需要注冊相應(yīng)事件的回調(diào)函數(shù)蠕搜,當(dāng)有事件觸發(fā),由事件分發(fā)器類轉(zhuǎn)發(fā)到注冊了該事件的活動組件類收壕,觸發(fā)回調(diào)函數(shù)妓灌」旄颍回調(diào)函數(shù)使用了map
存放,key
值使用typeid().hash_code()
來獲得事件類型的唯一值虫埂。
思路稍復(fù)雜些俱萍,而且代碼看起來比較累,各種回調(diào)函數(shù)告丢,邏輯不是特別清晰枪蘑。好處是理解之后,開發(fā)是比較便捷的岖免。
業(yè)務(wù)的設(shè)計和開發(fā)與游戲類型有一定的關(guān)系岳颇,而玩法活動配置的讀取就與游戲類型無關(guān)了。兩個項目的實現(xiàn)方式也不盡相同颅湘。
上一個項目的協(xié)議是自己實現(xiàn)的话侧,因此活動配置的數(shù)據(jù)結(jié)構(gòu)也使用了協(xié)議去約束〈巢危活動配置的excel表需要根據(jù)協(xié)議的定義來生成表結(jié)構(gòu)(由腳本實現(xiàn))瞻鹏,再由策劃配置內(nèi)容。內(nèi)容配置完成后鹿寨,由腳本生成為協(xié)議所定義的數(shù)據(jù)結(jié)構(gòu)類型對應(yīng)的二進制文件(供服務(wù)端讀取)和json文件(供客戶端讀取)新博。
因此,配置的讀取只需要在config配置類中注冊文件名脚草,服務(wù)器啟動時赫悄,config類會根據(jù)注冊的文件名依次讀取二進制配置文件內(nèi)容,轉(zhuǎn)為協(xié)議定義的數(shù)據(jù)結(jié)構(gòu)放到內(nèi)存中馏慨。
config類設(shè)計為單例埂淮,并且提供模板函數(shù)find<配置文件名>()
用于獲取活動配置,在需要的地方写隶,使用config類即可獲得倔撞。
目前項目是將excel配置表導(dǎo)出為xml文件,封裝了TinyXml庫作為基類慕趴。添加新的配置表時痪蝇,需要添加新的config單例類繼承于基類并注冊各個頁簽數(shù)據(jù)讀取的回調(diào)函數(shù)。服務(wù)器啟動時秩贰,基類會調(diào)用各個config類的初始化函數(shù)霹俺,讀取xml文件到內(nèi)存中(此內(nèi)存在結(jié)束回調(diào)后會釋放)柔吼,再通過回調(diào)讀取到各個config類中毒费。因此config類中需要定義對應(yīng)的數(shù)據(jù)結(jié)構(gòu)類型來接收存放,再提供get()
函數(shù)來獲取配置數(shù)據(jù)愈魏。
以上是對于游戲業(yè)務(wù)開發(fā)觅玻、配置讀取兩個方面在兩個項目中的設(shè)計實現(xiàn)方式想际。