#pragma once #include #include #include // 前向声明 class ICharacter; class ISkill; /** * @brief 技能接口 (抽象基类) * * 技术点: 多态 (Polymorphism) - 纯虚函数 */ class ISkill { protected: std::string m_name; // 技能名称 std::string m_description; // 技能描述 int m_manaCost; // 消耗魔法值 int m_cooldown; // 冷却时间 public: virtual ~ISkill() {} /** * @brief 执行技能 * @param caster 施法者 * @param target 目标 * @return std::string 战斗日志描述 */ virtual std::string execute(ICharacter& caster, ICharacter& target) = 0; /** * @brief 获取技能名称 */ virtual std::string getName() const { return m_name; } /** * @brief 获取技能描述 */ virtual std::string getDescription() const { return m_description; } /** * @brief 获取魔法消耗 */ virtual int getManaCost() const { return m_manaCost; } /** * @brief 获取冷却时间 */ virtual int getCooldown() const { return m_cooldown; } }; /** * @brief 角色接口 (抽象基类) * * 技术点: 多态 (Polymorphism) - 纯虚函数、虚析构函数 */ class ICharacter { protected: std::string m_name; // 角色名称 std::string m_className; // 职业名称 int m_level; // 等级 int m_hp; // 当前生命值 int m_maxHp; // 最大生命值 int m_mp; // 当前魔法值 int m_maxMp; // 最大魔法值 int m_attack; // 攻击力 int m_defense; // 防御力 int m_speed; // 速度 (决定行动顺序) std::vector> m_skills; // 技能列表 (STL) public: /** * @brief 虚析构函数 (必须) */ virtual ~ICharacter() {} // === Getters === virtual std::string getName() const { return m_name; } virtual std::string getClassName() const { return m_className; } virtual int getLevel() const { return m_level; } virtual int getHp() const { return m_hp; } virtual int getMaxHp() const { return m_maxHp; } virtual int getMp() const { return m_mp; } virtual int getMaxMp() const { return m_maxMp; } virtual int getAttack() const { return m_attack; } virtual int getDefense() const { return m_defense; } virtual int getSpeed() const { return m_speed; } /** * @brief 检查角色是否存活 */ virtual bool isAlive() const { return m_hp > 0; } /** * @brief 获取指定名称的技能 * @param skillName 技能名称 * @return ISkill* 技能指针,如果不存在返回 nullptr */ virtual ISkill* getSkill(const std::string& skillName); /** * @brief 获取所有技能 */ virtual const std::vector>& getSkills() const { return m_skills; } /** * @brief 受到伤害 (纯虚函数 - 必须在派生类中实现) * @param damage 伤害值 */ virtual void takeDamage(int damage) = 0; /** * @brief 治疗 (纯虚函数 - 必须在派生类中实现) * @param amount 治疗量 */ virtual void heal(int amount) = 0; /** * @brief 消耗魔法值 * @param amount 消耗量 * @return bool 是否成功消耗 */ virtual bool consumeMana(int amount); /** * @brief 恢复魔法值 * @param amount 恢复量 */ virtual void restoreMana(int amount); /** * @brief 获取角色状态字符串 */ virtual std::string getStatus() const; /** * @brief 添加技能 */ virtual void addSkill(std::shared_ptr skill); };