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