C++技能效果设计伪码

最近要开始实现技能效果了,比如击退多少距离,增加攻击,中毒等等。

先写个伪码,方便回去实现,当然如果有人用的到,也是好的。


Enum EeffectId
{
	Eeffectid_JT,    // 击退
	Eeffectid_QJTJ,  // 全军突击
	…
}

// 效果属性设置结构
Struct SeffectDef
{
	Int effectId;
	Int maxLevel;
	String effecticon;
	Int baseVal;
	string appendVal;    // 1,2,3,4,8  ,号分隔按级别升级匹配
	Int baselife;
	string appendLife;    // 1,2,3,4,8  ,号分隔按级别升级匹配
}

// 基类 所有effect继承自该类,分别实现对应方法
class CeffectBase 
{
Public:
	Virtual void onEnter(Centity *pTarget) = 0;  // 效果图标等显示,即时技能效果
	Virtual Void onRoundBegin() = 0;
	Virtual Void onRoundEnd() = 0;
	Virtual Void onExit() = 0;

Private:
	Int effectid;
	Int effectVal;
	Int effectLife;
	Int leftLife;  // 剩余周期 初始值为effectLife
	Centity * m_pTarget;
}

// 工厂
Class CeffectFactory
{
Public:
	Static CeffectBase * getEffectObj(int effectid, effectLevel);

Protect:
getEffectVal(int effectid, effectLevel);
getEffectLife(int effectid, effectLevel);
}

// 对象类
Centity:
Void dealEffect(effectid, effectLevel, this);   // 供hurt heal调用
    D_EffectManager->doEffect(effectid, effectLevel, target)

Void addEffect(Ceffect * pEffectObj);  // 供Ceffect::onEnter调用
Void removeEffect(Ceffect * pEffectObj); // 供Ceffect::onExit调用
Void removeAllEffect(int type);  // 移除特定类型的效果  1:有益 2:不利… bit方式可组合  供die或者特定技能调用(移除不利状态)
Protect:
	Vector< Ceffect * > effectVec; // 对象当前的效果集

// 效果管理类
EffectManager:
Public:
Void doEffect(int effectId, int effectLevel, Centity *pTarget)
    CeffectBase * pEffectObj = CeffectFactory:: getEffectObj(effectId,  effectLevel );
    pEffectObj->onEnter(pTarget); 
    effectLst.push_back(pEffectObj);

void onRoundBegin();
    For (auto &a : m_effectLst)
    {
        a->onRoundbegin();
    }

Void onRoundEnd();
    Auto ite = m_effectLst.begin();
    For (;ite != m_effectLst,end(); )
    {
        Ite->onRoundEnd();
        if Ite ->getleftLife <= 0 
            Ite-> onExit;
            Ite = m_effectLst->erase(Ite)
        Else
            Ite++;
    }
		
Void removeEffect(Ceffect *pEffectObj);  // 供Centity::removeAllEffect调用
    Auto ite = m_effectLst.find(pEffectObj);
    If (ite != m_effectLst.end() ) m_effectLst->erase(ite);

Protect:
List< Ceffect * > m_effectLst;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值