#pragma once
#include "ICharacter.h"
#include <random>

/**
 * @brief 普通攻击技能
 */
class NormalAttack : public ISkill {
public:
    NormalAttack();
    virtual std::string execute(ICharacter& caster, ICharacter& target) override;
};

/**
 * @brief 战士技能: 重击
 * 造成高额伤害，消耗怒气
 */
class HeavyStrike : public ISkill {
public:
    HeavyStrike();
    virtual std::string execute(ICharacter& caster, ICharacter& target) override;
};

/**
 * @brief 战士技能: 防御姿态
 * 大幅提升防御，回复少量生命
 */
class DefensiveStance : public ISkill {
public:
    DefensiveStance();
    virtual std::string execute(ICharacter& caster, ICharacter& target) override;
};

/**
 * @brief 法师技能: 火球术
 * 造成魔法伤害
 */
class Fireball : public ISkill {
public:
    Fireball();
    virtual std::string execute(ICharacter& caster, ICharacter& target) override;
};

/**
 * @brief 法师技能: 冰霜新星
 * 造成伤害并降低目标速度
 */
class FrostNova : public ISkill {
public:
    FrostNova();
    virtual std::string execute(ICharacter& caster, ICharacter& target) override;
};

/**
 * @brief 法师技能: 奥术护盾
 * 为自己添加法力护盾
 */
class ArcaneShield : public ISkill {
public:
    ArcaneShield();
    virtual std::string execute(ICharacter& caster, ICharacter& target) override;
};

/**
 * @brief 治疗术
 * 恢复生命值
 */
class Heal : public ISkill {
public:
    Heal();
    virtual std::string execute(ICharacter& caster, ICharacter& target) override;
};
