游戏中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战场玩法而言的设计,对于一个战场来说,玩家的段位、积分、排名等数据则不应该和上面说的积分混淆,这些数据需要再单独设计一个战斗的积分类来维护,这个类挂载在玩家的身上即可。
【未完,待续】

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页