2016-02-17 30 views
-1

我想創建一個簡單的類層次結構作爲幻想戰鬥遊戲的基礎。我試圖讓兩個班級去戰鬥(直到他們中的一個達到零強度)。這是我到目前爲止:如何讓兩個不同的類在一個循環中進行交互

int main() 
{ 
srand(time(NULL)); 

Barbarian b; 
BlueMen bm; 
Medusa m; 
Vampire v; 
HarryPotter hp; 

cout << "Main Menu" << endl << endl; 
cout << "Press 1 for Barbarain" << endl; 
cout << "Press 2 for Medusa" << endl; 
cout << "Press 3 for Blue Men" << endl; 
cout << "Press 4 for Vampire" << endl; 
cout << "Press 5 for Harry Potter" << endl << endl; 

int c1, c2, a1, a2, s1, s2, d1, d2, ar1, ar2; 
cout << "What is the first creature that you want?" << endl; 
cin >> c1; 

cout << "What is the second creature that you want?" << endl; 
cin >> c2; 

if (c1 == 1) 
{ 
    s1 = do_getStrength(&b); 
    a1 = do_getAttack(&b); 
    d1 = do_getDefense(&b); 
    ar1 = do_getArmor(&b); 
} 

if (c1 == 2) 
{ 
    s1 = do_getStrength(&m); 
    a1 = do_getAttack(&m); 
    d1 = do_getDefense(&m); 
    ar2 = do_getArmor(&m); 
} 

if (c1 == 3) 
{ 
    s1 = do_getStrength(&bm); 
    a1 = do_getAttack(&bm); 
    d1 = do_getDefense(&bm); 
    ar1 = do_getArmor(&bm); 
} 

if (c1 == 4) 
{ 
    s1 = do_getStrength(&v); 
    a1 = do_getAttack(&v); 
    d1 = do_getDefense(&v); 
    ar1 = do_getArmor(&v); 
} 

if (c1 == 5) 
{ 
    s1 = do_getStrength(&hp); 
    a1 = do_getAttack(&hp); 
    d1 = do_getDefense(&hp); 
    ar1 = do_getArmor(&hp); 
} 

//Creature 2 
if (c2 == 1) 
{ 
    s2 = do_getStrength(&b); 
    a2 = do_getAttack(&b); 
    d2 = do_getDefense(&b); 
    ar2 = do_getArmor(&b); 
} 
if (c2 == 2) 
{ 
    s2 = do_getStrength(&m); 
    a2 = do_getAttack(&m); 
    d2 = do_getDefense(&m); 
    ar2 = do_getArmor(&m); 
} 

if (c2 == 3) 
{ 
    s2 = do_getStrength(&bm); 
    a2 = do_getAttack(&bm); 
    d2 = do_getDefense(&bm); 
    ar2 = do_getArmor(&bm); 
} 

if (c2 == 4) 
{ 
    s2 = do_getStrength(&v); 
    a2 = do_getAttack(&v); 
    d2 = do_getDefense(&v); 
    ar2 = do_getArmor(&v); 
} 

if (c2 == 5) 
{ 
    s2 = do_getStrength(&hp); 
    a2 = do_getAttack(&hp); 
    d2 = do_getDefense(&hp); 
    ar2 = do_getArmor(&hp); 
} 

Creature monster1(c1, a1, s1, d1, ar1); 
Creature monster2(c2, a2, s2, d2, ar2); 

monster1.printstats(); 
cout << endl; 
monster2.printstats(); 

do 
{ 
    monster1.dealdamage(monster1, monster2); 
    monster2.dealdamage(monster2, monster1); 
} while ((s1 > 0) && (s2 > 0)); 


cout << endl; 
monster1.printstats(); 
cout << endl; 
monster2.printstats(); 


cin.get(); 
cin.ignore(); 
cin.clear(); 

return 0; 
} 

do while循環導致無限循環和for循環不會導致兩個生物戰鬥。任何意見將不勝感激。

+1

您不改變條件離子在你的循環內:'while((s1> 0)&&(s2> 0));'。沒有觸及's1'或's2'。在下一次詢問之前,先通過調試器進行操作。 –

+2

這種設計對於多態性已經成熟。 – AndyG

+0

你的問題與類之間的交互無關,你在談論對象。 – kfsone

回答

1

由於Creature的definiton缺少我只能猜測,但很可能你的構造函數定義是這樣的:

Creature(int health ...) 
: m_health(health) 
{ 
    ... 
} 

m_health被宣佈爲int m_health;

在這種情況下,該如果將它傳遞給構造函數,s1/s2的值爲複製。您需要通過指針參考(並聲明m_health原樣)以便更改反映。


到,雖然實現這個正確的方法,是有Creature暴露GetHealth()方法和在循環利用那邊的方法,所以就變成:

do 
{ 
    monster1.dealdamage(monster1, monster2); 
    monster2.dealdamage(monster2, monster1); 
} while ((monster1.GetHealth() > 0) && (monster2.GetHealth() > 0)); 

更妙的是additonally實施IsAlive()方法:

bool Creature::IsAlive() const 
{ 
    return m_health > 0 
} 
相關問題