2016-05-23 3 views
-2

私はC#を初めて使い、2つのモンスターがコンソールで戦う単純なシミュレーションをプログラムしたいと思っています。避ける方法:負のダメージで敵を癒していますか?

私には分かりませんが、回避する方法が1つあります。 攻撃力がDefensivePowerよりも低い場合、負の値になります。負の値である&は負の値であるため、値は負になり、敵を治癒し始めます。

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

次のような、(2つの数のより高いを返す)Math.Maxを使用することができる:攻撃力未満防御力、攻撃であれば、この場合

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

何の効果もありません。

最も簡単な解決策は、あなたの自身のの変数に s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePowerを割り当て、文がtrueを返した場合、それは、ゼロ未満であるか否かを検出するためのチェックを実行して、0

に変数を設定することです

+0

ニース、インラインも。私はそれを私が投稿しようとしていた解決策以上に掘り起こした。 – Jhecht

1

新しい変数を挿入することができます。ここでは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); 
} 
} 

私は間違いなく、読みやすさ、ファイルサイズ、およびスコープ汚染の懸念のためのマイク・C.のインラインメソッドを使用することをお勧めしますが。

関連する問題