Beispiel #1
0
        public void SolveLargePuzzle()
        {
            /***************************
            * N = null
            * P = player
            * G = normal game block
            *   0 1 2 3 4 5
            * 0 N P N N P N
            * 1 P G G G G P
            * 2 N G N N G N
            * 3 N G G G G P
            * 4 N P G G G N
            * 5 N N G N G N
            * 6 N N P N P N
            *
            ***************************/
            GameBoard gameBoard = new GameBoard(7, 6);

            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Player, 0, 1);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Player, 0, 4);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Player, 1, 0);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Player, 1, 5);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Player, 3, 5);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Player, 4, 1);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Player, 6, 2);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Player, 6, 4);

            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 1, 1);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 1, 2);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 1, 3);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 1, 4);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 2, 1);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 2, 4);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 3, 1);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 3, 2);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 3, 3);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 3, 4);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 4, 2);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 4, 3);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 4, 4);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 5, 2);
            gameBoard.CreateGameBlock(GameBoard.GameBlockType.Normal, 5, 4);

            GameBoardReverseSolver.SetMaxCombinationsSolve(1);
            int fails = 0;

            GameBoardReverseSolver.SolutionFailedEvent += (sender, args) => fails++;

            bool             aborted;
            List <GameBoard> solutions = GameBoardReverseSolver.ReverseSolve(gameBoard, 5, 10, 0, 15000, out aborted);

            Console.WriteLine("Failures: {0}\n", fails);

            Assert.GreaterOrEqual(solutions.Count, 1);
            Assert.LessOrEqual(solutions.Count, 10);

            foreach (GameBoard solution in solutions)
            {
                Console.WriteLine("Game board: Difficulty={0} \n{1}\n", solution.GetDifficulty(), solution.GetBoardString());
                Console.WriteLine("Solution: \n{0}\n", solution.GetSolutionString());

                Assert.IsTrue(solution.IsUntouchedPuzzle());
                Assert.IsTrue(solution.PlaySolution());
            }

            Console.WriteLine("Number of Solutions: {0}", solutions.Count);

            GameBoardReverseSolver.SetMaxCombinationsSolve(0);
        }