多人聯機射擊遊戲中的設計模式應用(二)

2021-06-11 16:02:41 字數 2113 閱讀 5259

(6)

觀察者模式

圖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) 

else

else }}

(7) 單例模式為了節約系統資源,在聯機射擊遊戲中可以使用單例模式來實現一些管理器(manager),如場景管理器(scenemanager)、聲音管理器(soundmanager)等,如圖7所示的場景管理器scenemanager類:

圖7 單例模式例項類圖

scenemanager類的實現**片段如下所示【注:以下**未考慮多執行緒訪問的問題】:

class scenemanager 

public synchronized static scenemanager getinstance()

return smanager;

} public void manage()

}

(8) 狀態模式在射擊遊戲中,遊戲角色存在幾種不同的狀態,如正常狀態、暫停狀態、陣亡狀態等,在不同狀態下角色物件的行為不同,可使用狀態模式來設計和實現角色狀態的轉換,類圖如圖8所示:

圖8 狀態模式例項類圖

在圖8中,遊戲角色類player充當環境類,state充當抽象狀態類,其子類normalstate、pausestate和deathstate充當具體狀態類,在具體狀態類的pause()、start()、beattacked()等方法中可實現狀態轉換,其中normalstate類的**片段如下所示:

class normalstate extends state

public void start() //遊戲啟動

public void beattacked() //被攻擊 }

public void shot() //射擊

public void move() //移動

}

(9) 介面卡模式為了增加遊戲的靈活性,某些射擊遊戲還可以通過遊戲手柄來進行操作,遊戲手柄的操作程式和驅動程式由遊戲手柄製造商提供,為了讓當前的射擊遊戲可以與遊戲手柄相容,可使用介面卡模式來進行設計,類圖如圖9所示:

圖9 介面卡模式例項類圖

在圖9中,gamepadsadapter充當介面卡,它將遊戲手柄中按鍵(gamepadskey)的方法適配到現有系統中,在其move()方法中可以呼叫movekey類的handle()方法,在其shot()方法中可以呼叫shotkey的handle()方法,從而實現通過手柄來控制遊戲執行。

多人聯機射擊遊戲中的設計模式應用(一)

為了方便大家更加系統地學習和掌握各種常用的設計模式,下面通過乙個綜合例項 多人聯機射擊遊戲 來學習如何在實際開發中綜合使用設計模式。反恐精英 counter strike,cs 三角洲部隊 戰地等多人聯機射擊遊戲廣受玩家歡迎,在多人聯機射擊遊戲的設計中,可以使用多種設計模式。下面我選取一些較為常用的...

對於多人聯機遊戲中 遊戲房間實現的想法

實現多人在 間的功能後 為了能讓使用者sessionid與名字匹配 用map將 session與名字 用key value儲存 private static map map newhashmap string session map.put m.getziji session 1 2新建乙個sess...

遊戲中的設計模式 工廠模式

現在的網遊更新很快,要延長網路遊戲生命週期的方法是,更新,不斷地更新,不斷的將新內容呈現於玩家面前。這要求遊戲程式的設計要有彈性,的重用至關重要。今天就說說遊戲中的工廠模式。說到工廠模式,有簡單工廠模式,工廠方法模式,抽象工廠模式。一 簡單工廠模式 ps 物件導向的程式設計,並不是類越多越好,類的劃...