/// <summary> /// Each Recruit Attacks an enemy /// </summary> /// <param name="enemy"></param> private void Attack(IEnemy enemy) { _writer.Information(); _writer.WriteMessage($"\n{" ",-80}"); _writer.WriteMessage($"{"-----------",22} {"The Army begins its Attack!!",5} {"-----------",10}{" ",17}"); _writer.WriteMessage($"{" ",-80}\n"); _writer.Default(); foreach (var soldier in Recruits.Where(r => !r.IsDead)) { if (enemy.HitPoints > 0) { var attackDamage = soldier.Attack(); _writer.WriteMessage(soldier.AttackMessage()); // Enemy Defends the Attack enemy.Defend(attackDamage); } else { enemy.IsDead = true; break; } } }
public static void ConvertLootersToKingdomCultureRecruits(ref TroopRoster troopRoster, CultureObject culture, int numberToUpgrade) { var recruit = Recruits.Where(x => x.Culture == Clan.All.FirstOrDefault(k => k.Culture == culture)?.Culture) .ToList().GetRandomElement() ?? Recruits.ToList().GetRandomElement(); troopRoster.AddToCounts(recruit, numberToUpgrade); }
/// <summary> /// Army Defends against the Enemy /// </summary> /// <param name="enemy"></param> private void Defend(IEnemy enemy) { var liveSoldiers = Recruits.Where(r => !r.IsDead); DisplayDefendMessage(); foreach (var soldier in liveSoldiers) { var attackDamage = enemy.Attack(); _writer.WriteMessage(enemy.AttackMessage()); soldier.Defend(enemy.AttackType, attackDamage); // Wonder about putting this inside Defend, but then defend would need to return a string which might be weird? _writer.WriteMessage(soldier.DefendMessage(enemy.AttackType, attackDamage)); } }