不同的初始化方式
我正在制作一款包含兽人敌人的游戏。我有一个问题,你如何初始化自己的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和所有的东西,我这一切在一个同一个地方。
如果这有意义,请帮助。如果这没有意义,不要帮助。
下面是做到这一点的正确方法:
你在一个类/结构定义属性,并在该结构被初始化,构造函数(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);
}
您应该使用构造函数初始化程序列表,而不是构造函数体内的赋值语句 –
虽然对于非基元类型,您应该使用成员初始化程序列表,而不是在构造函数的主体中设置值;否则,您最终将默认构造非基本类型,然后稍后用新值替换它们。 – ShadowRanger
感谢您的帮助,我还没有学过课程和结构,您可以推荐任何文章或书籍,所以我在将来没有类似的问题? –
这就是为什么我们有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绝对是一个好主意。
这是可能的,但不一定是明智的,更简单的是与其他成员说'单位'是否是一个orc或一个精灵。初学者倾向于过度使用继承。哪种方法可以帮助您学习C++的丰富经验 –
@MM我只提供了很多可能的解决方案之一:)不确定C++,我是C#开发人员,如果我开发了,我肯定会使用这种方法一个游戏。其实这个问题很有意见。 –
这就是为什么我们有OOP :)声明基类'Unit',创建一个继承类OrcUnit'并在构造函数,overriden属性或其他地方设置这些值。 –