🔥 任务背景
魔法森林出现神秘能量波动!捕捉并培养幻兽,用类与对象构建养成系统,通过继承与多态解锁进化形态,成为幻兽大师!
🧙 语法知识:高阶魔法咒语
咒语 1️⃣:类与对象 —— 幻兽灵魂容器
class MagicPet {
protected:
string name;
int level;
int exp;
public:
MagicPet(string n) : name(n), level(1), exp(0) {}
virtual void castSkill() { // 虚函数实现多态
cout << name << "发出普通攻击!" << endl;
}
void gainExp(int points) {
exp += points;
if(exp >= 100) evolve();
}
virtual void evolve() { // 可重写的进化方法
level++;
exp -= 100;
cout << "✨" << name << "升级至 Lv." << level << endl;
}
};
咒语 2️⃣:继承机制 —— 元素进化树
class FireDragon : public MagicPet {
private:
int flamePower;
public:
FireDragon(string n) : MagicPet(n), flamePower(50) {}
void castSkill() override {
cout << "🔥" << name << "喷射火焰!(威力:" << flamePower << ")" << endl;
}
void evolve() override {
MagicPet::evolve();
flamePower += 20;
cout << "炎之力量提升至:" << flamePower << endl;
}
};
class WaterSerpent : public MagicPet {
// 类似实现水系特有技能...
};
咒语 3️⃣:多态魔法 —— 技能释放系统
void battle(MagicPet* pet) {
pet->castSkill(); // 根据实际类型调用不同技能
}
🎮 代码实战:五大核心模块
第 1 步:幻兽基类与派生类
#include <iostream>
#include <vector>
using namespace std;
class MagicPet {
// 基类实现同上...
};
// 更多派生类示例
class ThunderWolf : public MagicPet {
public:
ThunderWolf(string n) : MagicPet(n) {}
void castSkill() override {
cout << "⚡" << name << "召唤雷电风暴!" << endl;
}
void evolve() override {
MagicPet::evolve();
cout << "获得闪电冲刺技能!" << endl;
}
};
第 2 步:幻兽管理系统
class PetManager {
private:
vector<MagicPet*> pets;
public:
void addPet(MagicPet* pet) {
pets.push_back(pet);
}
void startTraining() {
for(auto pet : pets) {
pet->gainExp(30);
battle(pet);
}
}
void showAllPets() {
cout << "\n=== 幻兽图鉴 ===" << endl;
for(auto pet : pets) {
cout << "名称:" << pet->getName()
<< " Lv." << pet->getLevel() << endl;
}
}
// 添加更多管理功能...
};
第 3 步:战斗系统实现
class BattleSystem {
public:
static void startDuel(MagicPet* attacker, MagicPet* defender) {
cout << "\n⚔️ 战斗开始!" << endl;
attacker->castSkill();
defender->castSkill();
// 简单伤害计算示例
int damage = rand() % 20 + 10;
cout << "⇒ 造成" << damage << "点伤害!" << endl;
}
};
🧪 知识加油站
- 虚函数表:多态的实现原理
- 智能指针:建议使用
unique_ptr管理幻兽对象 - 类型转换:
dynamic_cast的安全类型检查 - 封装原则:合理使用
private/protected保护数据
🏆 挑战任务:幻兽进化论
1. 元素相克系统
enum Element { FIRE, WATER, THUNDER };
virtual Element getElement() = 0; // 纯虚函数
2. 羁绊进化
当特定幻兽组队时触发特殊进化
3. 技能树系统
class SkillNode {
string skillName;
int requiredLevel;
SkillNode* nextSkills[3];
};
4. 联机对战
通过网络套接字实现幻兽PVP
示例:元素相克
float getDamageMultiplier(Element atk, Element def) {
if((atk == FIRE && def == WATER) ||
(atk == WATER && def == THUNDER) ||
(atk == THUNDER && def == FIRE))
return 0.5;
return 2.0;
}
📚 练习题:大师训练计划
- 实现幻兽交配系统(遗传特定技能)
- 开发幻兽图鉴收集系统
- 添加天气系统影响战斗效果
- 创建MVC架构分离数据与界面
🌟 下集预告:Level 6 魔法卡牌对战
- 模板编程实现万能卡牌容器
- STL 魔法打造卡组引擎
- 异常处理完善游戏规则
幻兽培养秘诀:
- 在构造函数中调用虚函数?小心对象未完全构造!
- 在评论区喊“以多态之名!”,获取动态类型转换技巧!
完成本关,你已掌握OOP三大特性!晒出「幻兽进化动图」,即可获得魔法卡牌系统的神秘邀请函!🎮🔮