2015-11-20 60 views
0

我正在製作一款包含獸人敵人的遊戲。我有一個問題,你如何初始化自己的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屬性或其他地方設置這些值。 –

回答

0

下面是做到這一點的正確方法:

你在一個類/結構定義屬性,並在該結構被初始化,構造函數(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

感謝您的幫助,我還沒有學過課程和結構,您可以推薦任何文章或書籍,所以我在將來沒有類似的問題? –

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#開發人員,如果我開發了,我肯定會使用這種方法一個遊戲。其實這個問題很有意見。 –