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