2013-07-29 64 views
3

这种极其简单的攻击游戏(对我来说)的主要价值是用简单的多态性,以自己熟悉实现健康,并用指针来练习。有了这个说法,我很想加入它。看看我的程序,我不确定如果我应该创建一个单独的“英雄”类,并且只从“角色”类继承,或者我应该假设英雄是“角色”类,敌人从中继承。我现在想要做的唯一事情就是实施一些攻击后英雄的健康状况下降。对不起,如果它非常简单,我只是想把基础知识放下来。需要帮助的基本C++攻击游戏

谢谢。

#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; 
    } 
}; 
+0

有什么问题吗? :) – maditya

+0

我注意到你的基类不包括虚拟的“攻击”的方法。你真的应该添加它,并有可能使其成为纯粹的虚拟如果所有的类都需要实现它为您的游戏才能正常工作。否则,多态性在哪里? :) –

+1

这是prolly更适合于[代码审查(http://codereview.stackexchange.com) – aaronman

回答

0

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

所以,我建议你有Character类具有英雄和敌人的所有常用功能。然后,您有两个单独的类(Hero类和Enemy类)都从Character继承。然而,每一种都实现了自己特有的Heros and Enemies特有的方法。攻击力和健康(如你在你的代码)在Hero的事情

例和Enemy类:

的事情Character类实例的敌人还是英雄(或特殊独特的武器的英雄形象)等。

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

3

我在查找帖子中的具体问题时遇到了一些麻烦,但也有一些建议的问题。也就是说,你如何成为英雄角色并让他与这些其他角色“战斗”。首先,你需要一个英雄人物。这确实可能只是角色的另一个孩子。其次,攻击实际上需要指定一个目标。

n.attack() 

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

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

例如。

现在,有两个大的问题。看起来你已经为多态测试做了这个,但是你并没有真正充分利用它。首先,您需要宣传的攻击是在汉字的抽象虚函数:

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

运行。不错的信息虽然填写! :) –

1

改变你的攻击,以采取:

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

}; 

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

    } 
}; 

而且,现在你可以叫上你的人物的攻击时使用多态指向目标角色的指针,然后你可以减少目标角色的健康。您将能够直接访问目标的受保护的健康数据。

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; 
    } 
};