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

问题描述 投票:0回答:4

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

谢谢。

#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;
    }
};
c++ pointers inheritance polymorphism
4个回答
3
投票

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

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

1
投票

更改你的攻击函数以将指针指向目标角色,然后你可以减少目标角色的生命值。您将能够直接访问目标的受保护健康数据。

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

0
投票

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

所以,我建议你拥有

Character
类,它具有英雄和敌人的所有共同特征。然后你有两个单独的类(
Hero
类和
Enemy
类)都继承自
Character
。然而,每个英雄和敌人都实现了自己独特的特定方法。

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

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

因此,您提供的 Ninja and Dragon 代码对我来说很有意义。


0
投票

你能制作一个合适的游戏并运行并制作一个可以在应用商店下载的应用程序吗

#include <iostream>
#include <string>

class Player {
public:
    std::string name;
    int health;
    int attack;
    int defense;

    Player(std::string n, int h, int atk, int def) : name(n), health(h), attack(atk), defense(def) {}

    void attackEnemy(Player& enemy) {
        int damageDealt = attack - enemy.defense;
        enemy.health -= damageDealt;
        std::cout << name << " attacks " << enemy.name << " for " << damageDealt << " damage." << std::endl;
    }

    void displayStats() {
        std::cout << "Name: " << name << std::endl;
        std::cout << "Health: " << health << std::endl;
        std::cout << "Attack: " << attack << std::endl;
        std::cout << "Defense: " << defense << std::endl;
    }
};

int main() {
    Player player("Player1", 100, 10, 5);
    Player enemy("Enemy1", 50, 8, 3);

    player.displayStats();
    enemy.displayStats();

    player.attackEnemy(enemy);
    enemy.attackEnemy(player);

    player.displayStats();
    enemy.displayStats();

    return 0;
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.