OOP双人决斗(多重继承)C++
时间: 2023-11-03 08:06:01 浏览: 143
好的,让我们来实现一个简单的双人决斗游戏吧。我们需要用到多重继承来实现双方角色的属性和技能,同时也需要用到虚函数和纯虚函数来实现多态性。
首先,我们需要定义一个基类 `Character`,它包含了角色的基本属性,比如姓名、生命值、攻击力等等。同时,它还包含了一些虚函数,比如 `attack()` 和 `takeDamage()`,用于角色进行攻击和承受伤害时的逻辑处理。
```c++
class Character {
public:
Character(const std::string& name, int hp, int atk) : m_name(name), m_hp(hp), m_atk(atk) {}
virtual void attack(Character& other) = 0;
virtual void takeDamage(int damage) = 0;
const std::string& getName() const { return m_name; }
int getHp() const { return m_hp; }
int getAtk() const { return m_atk; }
protected:
std::string m_name;
int m_hp;
int m_atk;
};
```
接下来,我们需要定义两个派生类,分别代表两个角色。这里我们定义了一个 `Warrior` 和一个 `Mage`,它们分别代表战士和法师。由于它们都需要继承 `Character` 类的属性和方法,因此我们使用多重继承来实现。
```c++
class Warrior : public Character {
public:
Warrior(const std::string& name, int hp, int atk) : Character(name, hp, atk) {}
void attack(Character& other) override {
std::cout << m_name << " attacks " << other.getName() << " with a sword!\n";
other.takeDamage(m_atk);
}
void takeDamage(int damage) override {
std::cout << m_name << " takes " << damage << " damage!\n";
m_hp -= damage;
}
};
class Mage : public Character {
public:
Mage(const std::string& name, int hp, int atk) : Character(name, hp, atk) {}
void attack(Character& other) override {
std::cout << m_name << " casts a fireball at " << other.getName() << "!\n";
other.takeDamage(m_atk);
}
void takeDamage(int damage) override {
std::cout << m_name << " takes " << damage << " damage!\n";
m_hp -= damage;
}
};
```
现在,我们已经定义了两个角色的属性和方法,接下来我们可以创建一个双人决斗的游戏。在这个游戏中,我们需要创建两个角色,然后让它们进行攻击和承受伤害,直到其中一个角色的生命值归零为止。
```c++
int main() {
Warrior warrior("Warrior", 100, 20);
Mage mage("Mage", 80, 25);
while (warrior.getHp() > 0 && mage.getHp() > 0) {
// 战士攻击法师
warrior.attack(mage);
// 法师攻击战士
mage.attack(warrior);
}
if (warrior.getHp() > 0) {
std::cout << "Warrior wins!\n";
} else {
std::cout << "Mage wins!\n";
}
return 0;
}
```
这样,我们就实现了一个简单的双人决斗游戏,并且使用了多重继承、虚函数和纯虚函数等面向对象的特性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)