public Point GetTarget(ref Pac pac) { Point target = null; double minDistance = Double.MaxValue; double distance; if (pac.currentTarget != null && pac.currentTarget.hasVisiblePellets) // && !PacController.GetCurrentTargets().Values.Contains(pac.currentTarget)) { Console.Error.WriteLine("Keeping current target:" + pac.currentTarget.ToString()); return(pac.currentTarget); } foreach (KeyValuePair <Point, int> junction in Level.junctions) { if (PacController.GetCurrentTargets().Values.Contains(junction.Key)) { Pac previousTargetOwner = PacController.GetPacWithCurrentTarget(junction.Key); if ((pac.origin.GetDistanceTo(junction.Key) < previousTargetOwner.origin.GetDistanceTo(junction.Key))) { Common.SwapPacTargets(ref previousTargetOwner, ref pac, junction.Key); } else { Console.Error.WriteLine("Junction to skip:" + junction.Key.ToString()); } continue; } if (junction.Key.hasVisiblePellets) { distance = pac.origin.GetDistanceTo(junction.Key); if ((distance < minDistance) && (distance > 0.1)) { minDistance = distance; target = junction.Key; Console.Error.WriteLine("Junction target:" + junction.Key.ToString() + " distance: " + distance.ToString()); } } } Console.Error.WriteLine("PacId:" + pac.id + " Strategy: Junctions " + ((target == null) ? "null" : target.ToString())); return(target); }
public Point GetTarget(ref Pac pac) { if (pac.currentTarget != null && PelletController.ExistsAtPosition(pac.currentTarget)) // && !PacController.GetCurrentTargets().Values.Contains(pac.currentTarget)) { return(pac.currentTarget); } Point target = null; double minDistance = Double.MaxValue; double distance; if (PelletController.BigPellets.Count > 0) { foreach (Point bigPellet in PelletController.BigPellets) { if (PacController.GetCurrentTargets().Values.Contains(bigPellet)) { Pac previousTargetOwner = PacController.GetPacWithCurrentTarget(bigPellet); if ((pac.origin.GetDistanceTo(bigPellet) < previousTargetOwner.origin.GetDistanceTo(bigPellet))) { Common.SwapPacTargets(ref previousTargetOwner, ref pac, bigPellet); } else { Console.Error.WriteLine("Pellet to skip:" + bigPellet.ToString()); } continue; } distance = bigPellet.GetDistanceTo(pac.origin); if (distance < minDistance) { minDistance = distance; target = new Point(bigPellet); } } } Console.Error.WriteLine("PacId:" + pac.id + " Strategy: Greedy" + ((target == null) ? "null" : target.ToString())); return(target); }