2016-05-23 55 views
-2

我是c#的新手,想要編寫一個簡單的模擬程序,其中兩個怪物將在控制檯中相互對戰。如何避免:負面傷害正在治癒敵人?

我有一個問題,我無法弄清楚,如何避免它。 問題是,如果AttackPower低於DefensivePower,則該值將爲負值並開始治療敵人,因爲負值爲& negative = positive。

do 
{ 
    if (currentFighter == 0) 
    { 
     s_monsters[1].m_Health -= 
      s_monsters[0].m_AttackPower - s_monsters[1].m_DefensivePower; 
    } 
    else 
    { 
     s_monsters[0].m_Health -= 
      s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower; 
    } 
} 
+0

添加一條if語句,如果該語句的值小於0,則將該值設置爲0. – Jhecht

+0

那麼您想要做什麼?請明確點。讓我們看看一些例子以及迄今爲止您嘗試過的方法。 –

回答

6

你可以使用Math.Max(返回高兩個數字),如:

s_monsters[1].m_Health -= Math.Max(s_monsters[0].m_AttackPower - s_monsters[1].m_DefensivePower, 0); 

在這種情況下,如果攻擊力小於防禦力,攻擊將不起作用。

+0

不錯,也是內聯。我挖掘它比我要發佈的解決方案更多。 – Jhecht

1

最簡單的解決辦法是分配s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower其自身的變量和運行檢查,以檢測它是否小於零,如果語句返回true,該變量設置爲0。

你然後可以注入新變量,其中s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower現在是您的問題應該停止存在。

do 
{ 
double attackDamage; 
if (currentFighter == 0) 
{ 
    attackDamage = s_monsters[0].m_AttackPower - s_monsters[1].m_DefensivePower 
    s_monsters[1].m_Health -= ((attackDamage < 0) ? 0 : attackDamage); 
} 
else 
{ 
    attackDamage = s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower 
    s_monsters[0].m_Health -= ((attackDamage < 0) ? 0 : attackDamage); 
} 
} 

儘管我絕對推薦使用Mike C.的內聯方法來提高可讀性,文件大小和範圍污染的關注度。