C++ 需要帮助在基本C+中实现健康+;进攻游戏

C++ 需要帮助在基本C+中实现健康+;进攻游戏,c++,pointers,inheritance,polymorphism,C++,Pointers,Inheritance,Polymorphism,这个极其简单的攻击游戏(对我来说)的主要价值在于熟悉简单的多态性,并练习使用指针。话虽如此,我想补充一下。看看我的程序,我不确定我是否应该创建一个单独的“英雄”类,让它从“角色”类继承,或者我是否应该假设英雄是敌人继承的“角色”类。我现在唯一想做的就是在英雄受到攻击后生命值下降的地方实施一些措施。很抱歉,如果这是非常初级的,我只是想把基本知识记下来 谢谢 #include <iostream> #include "Character.h" using namespace std;

这个极其简单的攻击游戏(对我来说)的主要价值在于熟悉简单的多态性,并练习使用指针。话虽如此,我想补充一下。看看我的程序,我不确定我是否应该创建一个单独的“英雄”类,让它从“角色”类继承,或者我是否应该假设英雄是敌人继承的“角色”类。我现在唯一想做的就是在英雄受到攻击后生命值下降的地方实施一些措施。很抱歉,如果这是非常初级的,我只是想把基本知识记下来

谢谢

#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.h”
使用名称空间std;
int main(){
忍者n;
龙d;
字符*enemy1=&n;
字符*enemy2=&d;
enemy1->setAttackPower(20);
enemy2->setAttackPower(40);
n、 攻击();
d、 攻击();
返回0;
}
//字符.h
#包括
使用名称空间std;
类字符
{
受保护的:
健康指数=100;
国际攻击力;
公众:
无效setAttackPower(整数攻击){
攻击力=攻击力;
}
};
忍者类:公众人物
{
公众:
无效攻击(){

我认为多态性的最佳用途是符合我们在现实生活中的想法

因此,我建议您使用
角色
类,该类具有英雄和敌人的所有共同特征。然后您有两个单独的类(英雄
类和敌人类)都继承自
角色
。但是,每个类都实现了英雄和敌人特有的特定方法

Character
类中的示例:攻击力和生命值(就像你的代码中的一样)

英雄
敌人
类中的事物示例:敌人或英雄的图像(或英雄的特殊独特武器)等


因此,你为忍者和龙提供的代码对我来说很有意义。

我在你的帖子中发现一些具体问题时遇到了一些困难,但有一些建议性的问题。即,你如何塑造英雄角色,并让他与这些其他角色“战斗”。首先,你需要一个英雄角色。这确实可以是b第二,攻击实际上需要指定一个目标

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

void attack ( Character &char )
or
void attack ( Character *char )
比如说

现在,有两个大问题。您似乎是为了多态性测试而做的,但您并没有真正充分利用它。首先,您应该将攻击提升为一个抽象的虚拟函数:

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

};

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

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

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

更改攻击函数以获取指向目标角色的指针,然后可以降低目标角色的健康状况。您将能够直接访问目标角色受保护的健康数据

void attack(Character* target)
{
  //specific printouts...
  target->Health -= attackpower;
}
另一种模式是将泛型代码保留在基类中,然后从基类中调用执行字符特定操作的派生函数,如:

class Character
{
  //...
  void attack(Character* target)
  {
    target->Health -= attackpower;
    DerivedAttack();
  }

  virtual void DerivedAttack() = 0;

};

class Dragon:public Character
{
  //...
  void DerivedAttack()
  {
    cout << "Dragon attacks your character! - " << attackpower << " Points!" << endl;
  }
};
类字符
{
//...
无效攻击(角色*目标)
{
目标->健康-=攻击力;
派生攻击();
}
虚拟void-DerivedAttack()=0;
};
龙类:公众人物
{
//...
无效派生攻击()
{

我注意到你的基类没有包含虚拟的“攻击”方法。如果所有类都需要实现它才能正常工作,那么您应该真正添加它,并可能使其成为纯虚拟的。否则,多态性在哪里?:)这更适合用于抱歉混淆…因为现在,我只想创建一个英雄类,并让该英雄类承受伤害(即,从生命值中减去攻击力)每当敌人发起攻击时。感谢所有回答的人!!带着我的评论跑步。不过信息填写得很好!:)