public override ReturnCodes Execute(ConsoleCommandController controller)
        {
            // MODE: Progress + Library
            ProgressComponent comp = new ProgressComponent();
            comp.Load(ArgSolverLibrary);

            // MODE: Only Library
            XmlProvider xml = new XmlProvider();
            Library lib = xml.Load(ArgLibrary);

            controller.DisplayLable("Reading File", ArgLibrary);
            controller.DisplayLable("Reading Library", lib.GetDetails().Name);

            if (ArgPuzzle == null || ArgPuzzle == "*")
            {
                int cc = 0;
                comp.Add(lib);
            }
            else
            {
                Puzzle pux = lib.GetPuzzleByID(ArgPuzzle);
                comp.Add(pux.MasterMap);
            }

            comp.Sort();
            comp.Save(ArgSolverLibrary);
            controller.Display(comp.Summary);

            return ReturnCodes.OK;
        }
Пример #2
0
        public Game()
        {
            InitializeComponent();
            var xml = new XmlProvider();

            Library = xml.Load(@"C:\Projects\SokoSolve\trunc\SokoSolve.UI\Content\Libraries\Sasquatch.ssx");
            logic = new SokoSolve.Core.Game.Game(Library.Puzzles.First(), Library.Puzzles[0].MasterMap.Map);
        }
        public void TestMicrobanFailureOne()
        {
            XmlProvider xml = new XmlProvider();
            Library lib = xml.Load(MakePathUIContent(@"Libraries\SolverDevelopment.ssx"));
            Puzzle puz = lib.GetPuzzleByID("P31");

            int solutions = SolveForSolutions(puz.MasterMap);
            Assert.IsTrue(solutions > 0, "Must find a solution");
        }
Пример #4
0
        public void TestLibraryReport()
        {
            XmlProvider xmlHelper = new XmlProvider();
            Library lib = xmlHelper.Load(MakePathUIContent("Libraries\\Sasquatch.ssx"));

            LibraryReport rpt = new LibraryReport(lib, new StaticImage(ResourceController.Singleton.GetInstance("default"), new VectorInt(16,16)),@".");
            rpt.BuildReport();
            rpt.Save(@"library.html");
        }
        public void TestCornerHoverHint()
        {
            XmlProvider xml = new XmlProvider();
            Library lib = xml.Load(MakePathUIContent(@"Libraries\SolverDevelopment.ssx"));
            Puzzle puz = lib.GetPuzzleByID("P7");
            Assert.IsNotNull(puz);

            int solutions = SolveForSolutions(puz.MasterMap);
            Assert.IsTrue(solutions == 0, "Must not find a solution");
        }
        public void TestProgressCreate()
        {
            ProgressComponent comp = new ProgressComponent();

            XmlProvider xml = new XmlProvider();
            Library lib = xml.Load(MakePathUIContent(@"Libraries\SolverDevelopment.ssx"));

            comp.Add(lib);

            comp.Save("temp_test_progress.xml");

            ProgressComponent load = new ProgressComponent();
            load.Load("temp_test_progress.xml");

            Assert.AreEqual(comp.Count, load.Count);
        }
Пример #7
0
        public void TestSolverReport()
        {
            XmlProvider xmlHelper = new XmlProvider();
            Library lib = xmlHelper.Load(MakePathUIContent("Libraries\\Sasquatch.ssx"));

            List<SolverResult> results = new List<SolverResult>();

            SolverController one = new SolverController(lib.Puzzles[0].MasterMap);
            results.Add(one.Solve());

            SolverController two = new SolverController(lib.Puzzles[1].MasterMap);
            results.Add(two.Solve());

            SolverResultHTML rpt = new SolverResultHTML(results, null);
            rpt.BuildReport();
            rpt.Save(@"solver.html");
        }
        public void TestProgressUpdate()
        {
            ProgressComponent comp = new ProgressComponent();

            XmlProvider xml = new XmlProvider();
            Library lib = xml.Load(MakePathUIContent(@"Libraries\Sasquatch.ssx"));

            comp.Add(lib);

            var res = Solve(lib.GetPuzzleByID("P1").MasterMap.Map);
            var rec = comp.Update(res);
            Assert.IsTrue(rec.HasSolution);

            var res2 = Solve(lib.GetPuzzleByID("P3").MasterMap.Map);
            var rec2 = comp.Update(res2);
            Assert.IsTrue(rec2.HasSolution);

            comp.Save("temp_test_progress.xml");
        }
Пример #9
0
        /// <summary>
        /// Set the HTML
        /// </summary>
        private void InitHTML()
        {
            StringBuilder html = new StringBuilder(File.ReadAllText(FileManager.getContent("$html/Welcome.html")));

            XmlProvider prov = new XmlProvider();
            Core.Model.Library lib = prov.Load(ProfileController.Current.LibraryLastFile);

            HtmlBuilder leftpane = new HtmlBuilder();
            HtmlBuilder rightpane = new HtmlBuilder();
            Current = lib.GetPuzzleByID(ProfileController.Current.LibraryLastPuzzle);
            if (Current == null)
            {
                ProfileController.Current.LibraryLastPuzzle = lib.Puzzles[0].PuzzleID;
                Current = lib.Puzzles[0];
            }

            if (Current != null)
            {
                leftpane.AddSection(null);
                HtmlReporter.Report(leftpane, Current.Library.Details);

                rightpane.AddLine("{0}/{1} '<b>{2}</b>'", Current.Order, Current.Library.Puzzles.Count, Current.Details.Name);
                rightpane.Add("<a href=\"app://Puzzle/{0}\">", Current.PuzzleID);
                rightpane.Add(Current.MasterMap, DrawingHelper.DrawPuzzle(Current.MasterMap), null);
                rightpane.Add("</a>");
                rightpane.AddLine("<br/><i>Click to play...</i>");

            }
            else
            {
                // Library has no puzzles
            }

            html = html.Replace("[Details]", leftpane.GetHTMLBody());
            html = html.Replace("[Image]", rightpane.GetHTMLBody());
            html = html.Replace("[BASEHREF]", FileManager.getContent("$html"));
            html = html.Replace("[USERNAME]", ProfileController.Current.UserName);
            htmlView.SetHTML(html.ToString());
        }
Пример #10
0
 /// <summary>
 /// Load and display a file in Library mode
 /// </summary>
 /// <param name="libraryFile"></param>
 public void LoadLibrary(string libraryFile)
 {
     try
     {
         XmlProvider xml = new XmlProvider();
         InitLibrary(xml.Load(libraryFile));
         Mode = Modes.Library;
     }
     catch(Exception ex)
     {
         // Nothing
     }
 }
Пример #11
0
        public override ReturnCodes Execute(ConsoleCommandController controller)
        {
            if (ArgReport != null)
            {
                reportFile = File.CreateText(ArgReport);
            }

            if (!string.IsNullOrEmpty(ArgSolverLibrary))
            {
                DateTime start = DateTime.Now;

                // MODE: Progress + Library
                ProgressComponent comp = new ProgressComponent();
                Library lib = null;

                // It is exists load...
                if (File.Exists(ArgSolverLibrary))
                {
                    comp.Load(ArgSolverLibrary);
                }

                // If a library is specified, merge/add it...
                if (!string.IsNullOrEmpty(ArgLibrary))
                {
                    XmlProvider xml = new XmlProvider();
                    lib = xml.Load(ArgLibrary);
                    comp.Add(lib);
                }

                int cc = 0;
                foreach (SolverPuzzle item in comp.Items)
                {
                    if (ArgNonSolutionOnly && item.HasSolution)
                    {
                        controller.DisplayLable("Skipping solution", item.Name);
                        cc++;
                        continue;
                    }

                    TimeSpan left = TimeSpan.FromSeconds((double) (comp.Items.Count - cc)*ArgMaxTime);
                    controller.DisplayLable("Est. Time Left", left.ToString());
                    controller.DisplayLable("Time Elapsed", (DateTime.Now-start).ToString());
                    controller.Display("==========================================================================");
                    controller.Display("");
                    controller.DisplayLable("Attempt", string.Format("{0}/{1} {2}%, maxtime={3}", cc, comp.Items.Count, cc*100/comp.Items.Count, TimeSpan.FromSeconds(ArgMaxTime)));
                    controller.DisplayLable("Name", item.Name);
                    controller.DisplayLable("Rating", string.Format("{0}, size=({1}, {2})", item.Rating, item.Width, item.Height));

                    controller.Display(StringHelper.Join(item.NormalisedMap, null, Environment.NewLine));

                    SokobanMap map = new SokobanMap();
                    map.SetFromStrings(item.NormalisedMap);
                    using (SolverController ctrl = new SolverController(map))
                    {
                        ctrl.ExitConditions.MaxDepth = 1000;
                        ctrl.ExitConditions.MaxItterations = 10000000;
                        ctrl.ExitConditions.MaxTimeSecs = (float) ArgMaxTime;

                        SolverResult res = ctrl.Solve();
                        if (res.Exception != null)
                        {
                            controller.Display(res.Exception);
                        }
                        controller.DisplayLable("Result", res.Summary);

                        comp.Update(res);
                    }

                    CheckForceGC();
                    controller.Display("---------------------------------------------------------------------------");

                    if (System.Console.KeyAvailable && System.Console.ReadKey().KeyChar == 'Q')
                    {
                        controller.Display("BREAK REQUESTED... Exiting");
                        break;
                    }

                    cc++;
                }

                comp.Save(ArgSolverLibrary);

            }
            else if (!string.IsNullOrEmpty(ArgLibrary))
            {
                // MODE: Only Library
                XmlProvider xml = new XmlProvider();
                Library lib = xml.Load(ArgLibrary);

                if (ArgPuzzle == "*")
                {
                    int cc = 0;
                    foreach (Puzzle puzzle in lib.Puzzles)
                    {
                        cc++;
                        controller.Display("");
                        controller.DisplayLable("Attempting", string.Format("{0:000} of {1:000}", cc, lib.Puzzles.Count));

                        SolvePuzzle(puzzle.MasterMap, puzzle.GetDetails().Name);

                        CheckForceGC();

                        if (System.Console.KeyAvailable && System.Console.ReadKey().KeyChar == 'Q')
                        {
                            controller.Display("BREAK REQUESTED... Exiting");
                            break;
                        }

                    }
                }
                else
                {
                    Puzzle pux = lib.GetPuzzleByID(ArgPuzzle);
                    SolvePuzzle(pux.MasterMap, pux.GetDetails().Name);
                }
            }

            if (reportFile != null)
            {
                reportFile.Close();
                reportFile.Dispose();
            }

            return ReturnCodes.OK;
        }
        public void TestRecessHoverHint2()
        {
            Console.WriteLine(Directory.GetCurrentDirectory());
            XmlProvider xml = new XmlProvider();
            Library lib = xml.Load(MakePathUIContent(@"Libraries\SolverDevelopment.ssx"));
            Puzzle puz = lib.GetPuzzleByID("P11");
            Assert.IsNotNull(puz);

            int solutions = SolveForSolutions(puz.MasterMap);
            Assert.IsTrue(solutions == 0, "Puzzle is dead");
        }