【继承&多态】
2024-01-02 21:51:46
#include <iostream>
#include <string>
int monster = 10000; // 全局变量
class Hero {
protected:
std::string name;
int hp;
int attack;
public:
// 公有的无参构造函数
Hero() : hp(100), attack(10) {}
// 公有的有参构造函数
Hero(const std::string& n, int h, int a) : name(n), hp(h), attack(a) {}
// 虚成员函数
virtual void Atk() {
hp -= 0;
}
// 获取生命值的公有成员函数
int GetHP() const {
return hp;
}
};
class Mage : public Hero {
private:
int ap_attack;
public:
// 构造函数
Mage(const std::string& n, int h, int a, int ap) : Hero(n, h, a), ap_attack(ap) {}
// 重写虚成员函数
void Atk() override {
hp -= (attack + ap_attack);
}
};
class Archer : public Hero {
private:
int ac_attack;
public:
// 构造函数
Archer(const std::string& n, int h, int a, int ac) : Hero(n, h, a), ac_attack(ac) {}
// 重写虚成员函数
void Atk() override {
hp -= (attack + ac_attack);
}
};
int main() {
// 实例化对象
Mage mage("Mage1", 100, 20, 50);
Archer archer("Archer1", 100, 15, 100);
// 循环攻击怪物,直到怪物被杀死
while (monster > 0) {
mage.Atk();
archer.Atk();
std::cout << "Mage's HP: " << mage.GetHP() << ", Archer's HP: " << archer.GetHP() << ", Monster's HP: " << monster << std::endl;
if (mage.GetHP() <= 0 && archer.GetHP() <= 0) {
std::cout << "英雄被杀死,野怪胜利" << std::endl;
break;
}
if (monster <= 0) {
std::cout << "野怪被杀死,英雄胜利!" << std::endl;
break;
}
}
return 0;
}
文章来源:https://blog.csdn.net/jpk010820/article/details/135349245
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!