This commit is contained in:
2025-10-26 20:44:58 +08:00
parent e287aadd3c
commit e73c08abf7
45 changed files with 280774 additions and 0 deletions

144
include/core/ICharacter.h Normal file
View File

@@ -0,0 +1,144 @@
#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);
};