public static CellValuer FindBestTarget(Ship ship) { CellValuer bestCell = Mapping[ship.CurrentMapCell]; var sameAsPrevious = previousTargets.ContainsKey(ship.Id) && previousTargets[ship.Id].Equals(ship.position); double turnsToFill = bestCell.TurnsToFill(ship, sameAsPrevious); int layers = GameInfo.RateLimitXLayers(Math.Min(GameInfo.Map.width, (int)turnsToFill)); var cells = GameInfo.Map.GetXLayers(ship.position, Math.Min(GameInfo.Map.width, layers)); cells = RemoveBadCells(cells); foreach (var cell in cells) { sameAsPrevious = previousTargets.ContainsKey(ship.Id) && previousTargets[ship.Id].Equals(cell.position); CellValuer tempValuer = Mapping[cell]; double tempTurnsToFill = tempValuer.TurnsToFill(ship, sameAsPrevious); if ((bestCell.Target == ship.CurrentMapCell && ship.CellHalite < 25) || tempTurnsToFill < turnsToFill) { if (Navigation.IsAccessible(ship.position, cell.position, true)) { turnsToFill = tempTurnsToFill; bestCell = tempValuer; } } } theseTargets[ship.Id] = bestCell.Target.position; return(bestCell); }