c++ - 需要帮助在基本 C++ 攻击游戏中实现健康

标签 c++ pointers inheritance polymorphism

这个极其简单的攻击游戏(对我来说)的主要值(value)是让自己熟悉简单的多态性,并练习使用指针。话虽如此,我很想补充一下。查看我的程序,我不确定是否应该创建一个单独的“Hero”类,并且只继承“Character”类,或者我是否应该假设 Hero 是“Character”类,敌人从中继承。我现在唯一想做的就是实现英雄在攻击后生命值下降的东西。抱歉,如果它非常简陋,我只是想了解一下基础知识。

谢谢。

#include <iostream>
#include "Character.h"

using namespace std;

int main() {

    Ninja n;
    Dragon d;

    Character *enemy1 = &n;
    Character *enemy2 = &d;

    enemy1->setAttackPower(20);
    enemy2->setAttackPower(40);

    n.attack();
    d.attack();

    return 0;
}


//Character.h
#include <iostream>

using namespace std;

class Character 
{
    protected:

    int Health = 100;
    int attackpower;

    public:

    void setAttackPower(int attack) {
        attackpower = attack;
    }
};

class Ninja: public Character
{
    public:

    void attack() {
        cout << "Ninja attacks your character! - " << attackpower << " Points!" << endl;
    }
};

class Dragon: public Character
{
    public:

    void attack() {
        cout << "Dragon attacks your character! - " << attackpower << " Points!" << endl;
    }
};

最佳答案

我在确定您帖子中的具体问题时遇到了一些困难,但有一些建议的问题。也就是说,你如何创造一个英雄角色并让他与其他角色“战斗”。首先,你需要一个英雄角色。这确实可以只是 Character 的另一个 child 。其次,攻击其实需要指定一个目标。

n.attack()

一切都很好,但他在攻击什么?现在这不是问题,因为所有攻击都是打印,但您希望它做更多。你想让它攻击一个特定的角色,所以你应该让它以一个角色作为参数

void attack ( Character &char )
or
void attack ( Character *char )

例如。

现在,有两个大问题。看起来你是为了多态性测试而做的,但你并没有真正充分利用它。首先,您应该将 attack 提升为 Character 中的抽象虚函数:

class Character {
public:
  virtual void attack ( Character *char ) = 0;

};

class Ninja {
public:
  virtual void attack ( Character *char) 
  {

  }
};

此外,现在您可以在对角色调用攻击时使用多态性:

enemy1->attack(Hero);
enemy2->attack(Hero);

关于c++ - 需要帮助在基本 C++ 攻击游戏中实现健康,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17934310/

相关文章:

c - 使用双指针的问题

java - 为什么在覆盖时不允许缩小方法的范围

c - C甚至有 "pass by reference"吗?

c++ - 观察者模式,智能指针和单例类

c++ - Maxscript - 动画改变网格中的顶点位置

c++ - 嵌入批处理脚本文件并在 C++ 控制台项目中运行

c - 将二维数组传递给函数时,单指针和双指针有什么区别?

java - 是否可以将 JPA 注释添加到父类(super class)实例变量?

c# - 每个 ID 系统唯一对象的设计模式

c++ - 有没有一种组合流操纵器的好方法?