Example #1
0
        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);
        }