游戏战斗数据包

        虽然现在很多游戏都用上手动战斗了,但还是想分享一下之前做过的回合制游戏的战斗数据写法。不同游戏战斗有不同的写法,数据上的需求也会有些差异,下面这个回合制战斗数据包当是借鉴,它满足很多的战斗需求比如:多场战斗连在一起打,合击,群攻,消除buffer,反击等等。

typedef uint8_t CellId;
typedef uint16_t    CardId;
typedef uint16_t    CAttr;
typedef uint16_t SkillId;
typedef uint16_t BufferId;
typedef uint16_t ComId;
typedef json::value JsonValue;
typedef ByteData   ByteValue;
namespace GameBattle
{
struct BackAttack //反击技能被攻击对象
{
CellId     cellId; //被攻击对象的站位
bool        isAvoid; //是否闪避
CAttr     hp;   //血量值变化
CAttr   energy;  //能量值变化
BackAttack();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
struct ActionObject //作用的对象
{
CellId     cellId; //被作用的对象站位
bool       isAvoid; //是否闪避
CAttr     hp;   //血量值变化
CAttr   energy;  //能量值变化
ComId       comId;      //可以是技能也可以是bufferId
vector<BackAttack> backAttacks;  //反击技能对象
vector<BufferId> deleteBuffers; //消除的buffer
ActionObject();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
struct SubAttack
{
CellId   cellId;   //攻击对象站位
bool     isCrit;   //是否暴击
    SkillId skillId; //释放的技能ID
    CAttr     costEnergy; //释放技能消耗的能量
    vector<ActionObject> objs; //作用的对象集合
    SubAttack();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
struct OneAttack
{
vector<SubAttack>  attacks;  //攻击集合
OneAttack();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
struct BufferObject
{
CellId   cellId;     //作用的站位对象
BufferId bufferId;   //bufferId
CAttr   hp;         //变化的血量值
CAttr     energy;     //变化的能量值
BufferObject();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
struct OneRound
{
vector<BufferObject> buffers; //每回合初始时的buffer效果
vector<OneAttack>    attacks; //每次攻击集合
OneRound();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
struct BattleCell
{
CellId     cellId;   //站位ID
CardId     cardId;   //卡牌ID
CAttr   curHp;  //当前血量
CAttr   maxHp;  //最大血量
CAttr   curEnergy;  //当前能量值
CAttr   maxEnergy;  //最大能量值
BattleCell();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
struct OneBattle
{
PlayerId winner;    //赢者ID
PlayerId atkId;  //攻击者ID
PlayerId atkedId;//被攻击者ID
vector<BattleCell> lineup; //阵型
vector<BufferObject>  recovers;//每场战斗后的能量和血量加成效果
vector<OneRound>      rounds;//战斗回合集合
OneBattle();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
struct BattleResult
{
string battleId; //每场战斗ID
vector<OneBattle> battles;  //每场战斗集合
BattleResult();
void convertToJson(JsonValue& val) const;
void convertFromJson(const JsonValue& val);
void Serialize(ByteValue& val) const;
void DeSerialize(const ByteValue& val);
};
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值