Example #1
0
        private double CalculateTargetBadness(Tuple<Vector, Stack<RobotMove>> target, Map map)
        {
            double badness = 0.0;
            bool deadend = false;
            bool moved = CanMoveToTargetExactlyByPath(target.Item2, map,
                                                      m =>
                                                      	{
                                                      		deadend = FindBestTarget(m, false) == null &&
                                                      		          m.GetCell(m.Robot) != MapCell.OpenedLift;
                                                      	});
            if(moved && deadend) badness += 100;
            if(specialTargetType == SpecialTargetType.Kamikadze || !CanMoveToTargetExactlyByPathWithNoRocksMoved(target.Item2, map))
                badness += 500;
            if (map.IsInWater(target.Item2.Count, target.Item1.Y) && !CanEscapeFromUnderwater(target, map))
                badness += 500;
            badness += target.Item2.Count;

            if (specialTargetType == SpecialTargetType.Favorite && specialTarget != null
                && target.Item1.X == specialTarget.X && target.Item1.Y == specialTarget.Y)
                badness -= 550;

            return badness;
        }