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);
        }