public void ApplyAverageAttack_10To40_AreEqual() { int sourceLeave; int targetNew; var act = Combat.ApplyAverageAttack(10, 40, out sourceLeave, out targetNew); Assert.AreEqual(false, act); Assert.AreEqual(10, sourceLeave); Assert.AreEqual(34, targetNew); }
public void ApplyAverageAttack_05To01_AreEqual() { int sourceLeave; int targetNew; var act = Combat.ApplyAverageAttack(5, 1, out sourceLeave, out targetNew); Assert.AreEqual(true, act); Assert.AreEqual(5, sourceLeave); Assert.AreEqual(4, targetNew); }
public void ApplyAverageAttack_22To10_AreEqual() { int sourceLeave; int targetNew; var act = Combat.ApplyAverageAttack(21, 10, out sourceLeave, out targetNew); Assert.AreEqual(true, act); Assert.AreEqual(21, sourceLeave); Assert.AreEqual(14, targetNew); }
/// <summary>Attacks or transfer to a region.</summary> private void AttackOrTransfer(int sourceId, int targetId, ushort owner, int armies, Map map) { unchecked { var sOldRegion = this[sourceId]; var tOldRegion = this[targetId]; var sOldArmies = (ushort)Armies(sourceId); var tOldArmies = (ushort)Armies(targetId); ushort sNewArmies; ushort tNewArmies; var tOldOwner = (ushort)Owner(targetId); var tNewOwner = tOldOwner; // attack if (owner != tOldOwner) { int attackersLeave; int targetNew; var success = Combat.ApplyAverageAttack(armies, tOldArmies, out attackersLeave, out targetNew); sNewArmies = (ushort)Math.Max(Settings.MinimumArmies, sOldArmies - attackersLeave); tNewArmies = (ushort)targetNew; if (success) { tNewOwner = owner; } } else { sNewArmies = (ushort)Math.Max(Settings.MinimumArmies, sOldArmies - armies); tNewArmies = (ushort)(tOldArmies + armies); } // set and create. var sNewRegion = RegionState.Create(sNewArmies, owner); var tNewRegion = RegionState.Create(tNewArmies, tNewOwner); this[sourceId] = sNewRegion; this[targetId] = tNewRegion; // update the hash. XOrHash(sOldRegion, sNewRegion, sourceId); XOrHash(tOldRegion, tNewRegion, targetId); } }