Beispiel #1
0
        private static void PrintSolution(string problemPath, string problemSolution, Status status)
        {
            StreamWriter file =
                new StreamWriter(problemPath + problemSolution, false);
            List <Wrappy> wrappies      = status.wrappies;
            int           wrappiesCount = wrappies.Count();

            for (int i = 0; i < wrappiesCount; i++)
            {
                List <Action> wrappiesActions = wrappies[i].ActionHistory;
                foreach (Action action in wrappiesActions)
                {
                    if (action.IsB || action.IsR)
                    {
                        string strAction = "";
                        if (action.IsB)
                        {
                            Action.B b = (Action.B)action;
                            strAction = "B(" + b.Item1 + "," + b.Item2 + ")";
                        }
                        else
                        {
                            Action.R r = (Action.R)action;
                            strAction = "R(" + r.Item1 + "," + r.Item2 + ")";
                        }
                        file.Write(strAction);
                    }
                    else
                    {
                        file.Write(action.ToString());
                    }
                }

                if (i < wrappiesCount - 1)
                {
                    file.Write("#");
                }
            }

            file.Close();
        }
Beispiel #2
0
        public void execute(Action a, Wrappy w)
        {
            Move(a, w);
            if (w.remainingFastWheel > 0)
            {
                w.remainingFastWheel--;
                updateStatus(w);
                Move(a, w);
            }
            if (w.remainingDrill > 0)
            {
                w.remainingDrill--;
                //map[w.Loc.x, w.loc.y] = Tile.Filled; // already done by updatemap
            }

            if (a.IsE)
            {
                w.rotateClockwise();
            }
            if (a.IsQ)
            {
                w.rotateAntiClockwise();
            }

            if (a.IsB)
            {
                if (!collectedBoosters.Remove(Booster.Manipulator))
                {
                    throw new Exception("Missing manipulator boost");
                }
                Action.B b = (Action.B)a;
                w.Manips.Add(new Point(b.Item1, b.Item2));
                // TODO: checkare che il punto sia davvero adiacente
            }
            if (a.IsF)
            {
                if (!collectedBoosters.Remove(Booster.FastWheels))
                {
                    throw new Exception("Missing fast wheel boost");
                }
                w.remainingFastWheel += 50;
            }
            if (a.IsL)
            {
                if (!collectedBoosters.Remove(Booster.Drill))
                {
                    throw new Exception("Missing Drill boost");
                }
                w.remainingDrill += 30;
            }
            if (a.IsR)//telepor
            {
                throw new Exception("Teleport not implemented yet");
            }
            if (a.IsC)
            {
                if (!collectedBoosters.Remove(Booster.Cloning))
                {
                    throw new Exception("Missing Cloning boost");
                }
                if (boosters.Find((kvp) => kvp.Value.Equals(w.Loc)).Key != Booster.CloningPlatform)
                {
                    throw new Exception("Cloning not in a platform");
                }
                wrappies.Add(new Wrappy(w.Loc));
            }
            w.ActionHistory.Add(a);
            updateStatus(w);
        }