我所理解的網絡游戲<?>:戰斗邏輯設計


客戶端發送消息,統一在服務器端觸發戰斗
服務器端驅動戰斗過程
客戶端端接收用戶輸入向服務器發送消息
客戶端接收服務器消息顯示客戶端表現
 
1. 服務器--客戶端交互(戰斗流程)
整戰斗流程分為4個狀態:戰斗准備,戰斗開始,戰斗進行,戰斗結束。其中戰斗進行狀態時服務器客戶端可以進行兩種交互,一種是服務器端定時器觸發戰斗循環,另一種是客戶端玩家發送戰斗操作。具體如下:
a. 戰斗准備
 
b. 戰斗開始
· 初始化戰斗相關信息,即從基礎信息模塊中獲得角色、陣型、屬性,從戰斗中獲得戰場
· 啟動戰斗實例的定時器,一個戰斗實例用一個定時器。
· 在初始化戰斗,特別是定時器的數據步驟中,需要根據屬性建立戰斗對象的出招隊列。戰斗對象可以在戰斗實例定時器下排成隊列一個接一個地調用。看策划需求,相較而言ARPG的野怪可以實現為每個野怪在該心跳下的一個定時器而非隊列。
 
c. 戰斗循環
· buff發生改變的情況包括:
1. buff定時失效 ,根據buff到達失效時間發送消息
2. buff定時扣血,根據扣血間隔發送buff改變消息
· 客戶端接收到buff改變的消息后要在相應操作:
buff扣血 ,客戶端播放扣血與buff的動畫特效
buff失效,客戶端停止播放buff的動畫特效
· 獲得出招隊列首位角色的仇恨對象,如果該角色沒有仇恨對象,就直線向前移動,並結束該次心跳
仇恨角色的選取:
1. 玩家指定(我自己設計)
2. 系統指派,系統以一定半徑搜索角色周圍
· 通過與仇恨對象的距離判斷是否攻擊
與仇恨對象距離過遠,則朝向仇恨對象移動,並結束該次心跳
與仇恨對象距離可以發動攻擊,檢查攻擊間隔
攻擊間隔已到則朝對象發動攻擊
攻擊間隔未到則結束該次心跳
· 如果發動攻擊,計算扣血
如果仇恨對象被攻擊死亡,清空進攻角色的仇恨對象
 
d. 戰斗操作
我自己設計了玩家在場景中拖拽部隊選擇其攻擊對象的功能。
戰斗操作只是更改戰斗對象的一些數據,這些數據不會即時影響戰斗循環,故不需要與戰斗循環的心跳做同步。
 
e. 戰斗結束
 
2. 服務器端戰斗系統結構
CWarMgr是服務器的一個單例組件,負責管理服務器所有的戰斗,包括創建戰斗、向戰斗實例派發消息、維持戰斗心跳、結束戰斗。
 
IWar是戰斗實例的接口,派生出CWarPve,CWarPvpOnline,CWarPvpOffline三種實現類去處理三種不同的戰斗。
IWar的創建應用了抽象工廠模式,由IWarCreator接口派生的實現類創建。
IWar包含了戰斗雙方的數據,由於服務器戰斗循環以及客戶端發起戰斗操作(在更改戰斗雙方的數據時需要考慮多線程數據的同步,固客戶端更改數據需要加鎖?)
 
3. 客戶端戰斗系統結構
相較服務器而言,客戶端增加了一個CWarScene戰斗場景類負責管理戰斗場景,它將包含一些IWarEffect戰斗特效類(戰斗特效的更新與播放)。IWarEffect主要派生出四種具體特效實現類,包括操作特效(僅變化模型着色以提示玩家)、粒子特效(特效只包含粒子)、動畫特效(特效包含粒子和動畫)、跳字特效(用於扣血等屬性數值的增減)。這些特效都在OnUpdate中查詢對於的SBuffInfo結構體,以確定特效是否和如何播放。
 
4. 如何應對策划修改
多數情況下都是策划攻,程序受,一起來探討一下逆天的策划會有什么逆天的設計,如何留好接口進行擴展去應對這些設計。
a. 世界boss,多個玩家挑戰同一個超級boss 
b. 大亂斗,玩家中途參戰 
c. 幫派戰,前軍中軍后軍3vs3 
d. 自動戰斗,中途加入操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM