public static void DebugSolve(int problemnum, int seed, string[] magicSpells, int delay) { var problem = ProblemsSet.GetProblem(problemnum); //var problemSolver = new MagicProblemSolver(); //var solver = new MuggleProblemSolver(); var solver = new MuggleProblemSolver_MultiUnit(1); var fastConsole = new FastConsole(); solver.SolutionAdded += (g, s) => { using (var drawer = new Drawer(fastConsole)) { drawer.DrawMap(g.map, g.currentUnit); drawer.console.WriteLine("Score: " + g.CurrentScore); } Console.ReadKey(true); var unit = g.currentUnit; foreach (var c in s.Where(x => !MoveTypeExt.IsIgnored(x))) { var moveType = MoveTypeExt.Convert(c); if (!moveType.HasValue) throw new InvalidOperationException(string.Format("Invalid char in solution: {0}. Char: '{1}'", s, c)); var newUnit = unit.Move(moveType.Value); using (var drawer = new Drawer(fastConsole)) { if (newUnit.IsCorrect(g.map)) drawer.DrawMap(g.map, newUnit); else drawer.DrawMap(g.map, unit, locked: true); drawer.console.WriteLine("Score: " + g.CurrentScore); unit = newUnit; } Thread.Sleep(delay < 0 ? 0 : delay); } Console.ReadKey(true); }; solver.Solve(problem, problem.sourceSeeds[seed], magicSpells); while (Console.ReadKey(true).Key != ConsoleKey.Escape) { } }
public static void Solve(int problemnum, int seed, string[] magicSpells, int delay, bool visualize) { var problem = ProblemsSet.GetProblem(problemnum); // var muggleProblemSolver = new MuggleProblemSolver(); //var muggleProblemSolver = new MagicProblemSolver(); var solver = new MuggleProblemSolver_MultiUnit(1); var stopwatch = Stopwatch.StartNew(); var solution = solver.Solve(problem, problem.sourceSeeds[seed], magicSpells); stopwatch.Stop(); var game = new Game(problem, new Output { seed = problem.sourceSeeds[seed], solution = solution }, magicSpells); if (visualize) { var emulator = new Emulator(game, delay); emulator.Run(); } else { while (game.state == GameBase.State.UnitInGame || game.state == GameBase.State.WaitUnit) { game.Step(); } Console.WriteLine("Score=" + game.CurrentScore); Console.WriteLine("Time=" + stopwatch.Elapsed); Console.ReadKey(); } }