不同的初始化方式

问题描述:

我正在制作一款包含兽人敌人的游戏。我有一个问题,你如何初始化自己的HP,MP,攻击,防御和速度而不考虑每个这样编写不同的代码:不同的初始化方式

int orcishHP = 50; 
int orcishMP = 5; 
int orcishAttack = 15; 
int orcishDef = 10; 
int orcishSpeed = 20; 

是不是有一些方法来初始化所有,当我指的是兽人,就像这样:

int orcishStats(){ 
    int HP = 50 
    etc... 
} 

因此而不是调用兽人MP HP和所有的东西,我这一切在一个同一个地方。

如果这有意义,请帮助。如果这没有意义,不要帮助。

+0

这就是为什么我们有OOP :)声明基类'Unit',创建一个继承类OrcUnit'并在构造函数,overriden属性或其他地方设置这些值。 –

下面是做到这一点的正确方法:

你在一个类/结构定义属性,并在该结构被初始化,构造函数(OrcishAttributes())被调用:

struct OrcishAttributes 
{ 
    int m_orcishHP; 
    int m_orcishMP; 
    int m_orcishAttack; 
    int m_orcishDef; 
    int m_orcishSpeed; 
    OrcishAttributes(int orcishHP, int orcishMP, int orcishAttack, int orcishDef, int orcishSpeed) 
    { 
    m_orcishHP=orcishHP; 
    m_orcishMP = orcishMP; 
    m_orcishAttack = orcishAttack 
    m_orcishDef = orcishDef; 
    m_orcishSpeed = orcishSpeed; 
    } 

} 

class Orc 
{ 
    public: 
    Orc(OrcishAttributes oa) 
    { 
    m_orcAttributes = oa; 
    } 
    private: 
    OrcishAttributes m_orcAttributes; 
} 

int main() 
{ 

    OrcishAttributes oa(50,5,15,10,20); 
    Orc* o = new Orc(oa); 
} 
+1

您应该使用构造函数初始化程序列表,而不是构造函数体内的赋值语句 –

+0

虽然对于非基元类型,您应该使用成员初始化程序列表,而不是在构造函数的主体中设置值;否则,您最终将默认构造非基本类型,然后稍后用新值替换它们。 – ShadowRanger

+0

感谢您的帮助,我还没有学过课程和结构,您可以推荐任何文章或书籍,所以我在将来没有类似的问题? –

这就是为什么我们有OOP。

您可以定义一个基类,例如Unit。它可以存储像字段或方法常见的成员:

class Unit 
{ 
protected: 
    int HP; 
    int MP; 
    int Attack; 
    int Def; 
    int Speed; 

public: 
    int getHPplusMP() 
    { 
     return HP + MP; 
    } 
}; 

然后,您可以创建继承的类,并在其构造函数初始化这些值:

class OrcUnit : public Unit 
{ 
public: 
    OrcUnit() 
    { 
     HP = 20; 
     MP = 0; 
     Attack = 13; 
     Def = 4; 
     Speed = 5; 
    } 
}; 

class ElfUnit : public Unit 
{ 
public: 
    ElfUnit() 
    { 
     HP = 25; 
     MP = 15; 
     Attack = 15; 
     Def = 1; 
     Speed = 8; 
    } 
}; 

然后,您将能够与它的工作:

ElfUnit elf; 
OrcUnit orc; 

Unit u = elf; 
cout << u.getHPplusMP(); 

Unit u = orc; 
cout << u.getHPplusMP(); 

一般来说,在尝试实施游戏之前学好OOP绝对是一个好主意。

+0

这是可能的,但不一定是明智的,更简单的是与其他成员说'单位'是否是一个orc或一个精灵。初学者倾向于过度使用继承。哪种方法可以帮助您学习C++的丰富经验 –

+0

@MM我只提供了很多可能的解决方案之一:)不确定C++,我是C#开发人员,如果我开发了,我肯定会使用这种方法一个游戏。其实这个问题很有意见。 –