private bool TryToFight(Elf elf) { var root = new Coordinate(elf.X, elf.Y); var neighbors = GetNeighbors(root); var goblins = new List <Goblin>(); foreach (var neighbor in neighbors) { var goblin = Goblins.Find(g => !g.IsDead && g.X == neighbor.X && g.Y == neighbor.Y); if (goblin != null) { goblins.Add(goblin); } } var toAttack = goblins.OrderBy(g => g.HP).ThenBy(g => g.Y).ThenBy(g => g.X).FirstOrDefault(); if (toAttack != null) { toAttack.HP -= elf.AP; if (toAttack.IsDead) { Map[toAttack.X, toAttack.Y] = '.'; } return(true); } return(false); }
public Goblin FindClosestEnemyTo(Elf source) { var sourceX = source.X; var sourceY = source.Y; var target = SearchFor('G', sourceX, sourceY); return(Goblins.Find(g => g.X == target.X && g.Y == target.Y)); }