1. 程式人生 > >遊戲中PVP戰場框架的設計

遊戲中PVP戰場框架的設計

MMORPG類的遊戲中,PVP戰場是很常見的一個遊戲功能,這裡分享一種專案中使用的設計方式。
在設計前,先理清下戰場我們需要維護的東西:

  1. 戰鬥的階段(如登入、準備、戰鬥、結算等階段)
  2. 戰鬥的積分(擊殺玩家得分、佔領得分、助攻得分)

對於戰鬥的階段劃分,每一類具體的戰場,需要的戰鬥階段可能都是不同的,比如某些需要倒計時階段,某些需要加速階段。這都需要根據具體戰場的業務邏輯來調整。這個階段不應該由程式硬編碼實現,需要支援由策劃進行動態配置。基於這個需求,戰鬥的階段也應該抽象成一個類來維護。具體不同的階段繼承自一個基類即可。
對於戰鬥的積分,設計思路與戰鬥階段型別,也應該需要支援由策劃進行動態的配置,支援在某具體的戰場中能有特定的加分型別(有些戰場擊殺得分,有些佔領得分等等)。所以積分,也是需要抽象出一個類來維護。具體不同的積分規則繼承自一個基類即可。
對於戰鬥階段的維護、階段的轉換、具體戰場的規則玩法等這些功能也肯定需要一個單獨的類來維護,這裡稱之為戰鬥模式。
對於積分的維護(包括個人積分、團隊積分、NPC積分等數值相關的)都交由一個積分模式的類來統一管理維護。
對於戰鬥模式和積分模式,再統一由一個總的戰鬥管理器來維護。
這個管理器具體掛載在哪個業務上,這個具體看自己的專案實現。比如在我這個專案組,所有的戰鬥、劇情之類的其實都是基於副本來實現的,所以,對於PVP戰場其實可以理解為在普通的副本類上初始化了這個戰鬥管理器,將進入副本後的操作交由這個戰鬥管理器來維護。

基於上述的分析,對涉及到的類做一個名詞定義,方便後面的書寫。

  • 副本:copymap
  • 戰鬥管理器:PvPFightMgr
  • 戰鬥模式:FightPattern
  • 積分模式:ScorePattern
  • 戰鬥階段基類:StageBase
  • 積分基類:ScoreBase

初始化

  1. 設定戰鬥型別
  2. 讀取對應型別的配置,初始化配置資料
  3. 建立戰鬥模式,初始化戰鬥模式
    3.1 戰鬥模式初始化時讀取配置,建立該型別配置的所有的戰鬥階段,並加入到階段表中
  4. 建立積分模式,初始化積分模式
    4.1 積分模式初始化時讀取配置,建立該型別配置的所有積分模式,並加入到積分表中

階段的設計與管理

不同的戰鬥階段繼承自一個虛基類,該虛基類抽象出當前階段的開始、結束、下階段等同樣的介面。根據c++多型特性,得以將不同的階段採用其父類指標的模式儲存在一張階段表中,階段段可以採用形如<階段型別,StageBase*>這樣子的一個map來實現。階段表由戰鬥模式來維護。戰鬥模式需要一個時間輪詢,以處理階段轉化等戰鬥事件的輪訓檢測。

積分的設計與管理

積分的設計和管理和戰鬥階段是類似的,都是基於多型性,採用一個不同的積分表來維護,積分表可以採用形如<積分型別,ScoreBase*>這樣子的一個map來實現。

上面這些是針對一個PVP戰場玩法而言的設計,對於一個戰場來說,玩家的段位、積分、排名等資料則不應該和上面說的積分混淆,這些資料需要再單獨設計一個戰鬥的積分類來維護,這個類掛載在玩家的身上即可。
【未完,待續】