mirror of
https://github.com/ChuXunYu/OnlineRpg.git
synced 2026-01-31 12:05:47 +00:00
145 lines
3.9 KiB
C++
145 lines
3.9 KiB
C++
#pragma once
|
|
#include <string>
|
|
#include <vector>
|
|
#include <memory>
|
|
|
|
// 前向声明
|
|
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<std::shared_ptr<ISkill>> 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<std::shared_ptr<ISkill>>& 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<ISkill> skill);
|
|
};
|