【问题标题】:C++ Implementing an attack class in a gameC++ 在游戏中实现攻击类
【发布时间】:2012-08-21 03:46:10
【问题描述】:

为了学习和娱乐,我决定使用类创建一个迷你版的星际争霸 2。我创建了一个 ProtossUnit 基类和两个派生类 Zealot 和 Stalker。现在我正在尝试找出实施攻击的最佳方法(损坏另一个单位)。

我在 ProtossUnit 基类中包含了一个函数,但也许有更优雅/更好的方法,例如创建一个 Class Attack。我相信这将允许我对攻击进行更多定制(包括升级/攻击率等)。我正在考虑将 Attack 类的继承权赋予派生类,因为它们拥有伤害统计信息?

任何帮助表示赞赏。

class ProtossUnit {
protected:
    int psishield, health, armor;
    int mineralcost, gascost;   
public:
    int getHealth() { return health; }
    int getPsiShield() { return psishield; }
    int getArmor() { return armor; }
};

class Zealot : public ProtossUnit {
public:
    string attacktype;
    int damage, attackspeed;
    Zealot() {
        attacktype = "Psi Blades";
        psishield = 50;
        health = 100;
        damage = 8 * 2;
        attackspeed = 1.2;
        mineralcost = 100;
        gascost = 0;
    }
};

class Stalker : public ProtossUnit {
public:
    string attacktype;
    int damage, attackspeed;
    Stalker() {
        attacktype = "Ranged";
        psishield = 80;
        health = 80;
        damage = 10;
        attackspeed = 1.44;
        mineralcost = 125;
        gascost = 50;           
    } 
};

class Attack {
private:
    string attackName;
    int damage, attackspeed;
public:
    Attack(string aName, int dmg, int aspeed) {
        attackName = aName;
        damage = dmg;
        attackspeed = aspeed;
    }

};

【问题讨论】:

  • 初始化列表应该优先于在构造函数主体中设置每个变量。对于 POD 类型(正如你所拥有的)它实际上并不重要,但对于其他类型,它避免调用它们的默认构造函数(假设它们有一个,如果没有,你 必须 使用初始化列表。另外,如果你有一个const 成员变量)。

标签: c++ class inheritance


【解决方案1】:

首先,重要的是要认识到有许多可能的设计。在我的脑海中,我认为一个单位将有能力(方法)攻击另一个单位,所以也许它将目标作为一些参数。然后根据攻击,您可以做一些随机的事情(字面意思是生成概率结果)并根据目标单位的健康(或 w.e)进行调整。这就是攻击类可能发挥作用的地方:如果一个单位有很多不同的攻击,或者不同的单位共享攻击,那么具有一些一般行为的可重用攻击类可能会有所帮助。没有错误的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多