public void ShouldBeAbleToSolveARealGame()
        {
            //Arrange
            var game = new TowerGame(RandomTower.Peg.MaxDiscs);
            var sut  = CreateSut();

            //Act
            foreach (var move in sut.SolveFromStart(game))
            {
                game.PerformMove(move.From, move.To);
            }
            //Assert
            game.IsGameOver().Should().BeTrue("The game has not been solved");
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            Console.Write("Enter the number of discs per peg (2 - 18): ");
            var pegSize = int.Parse(Console.ReadLine() ?? "3");

            Console.WriteLine("Choose the solver to run: ");
            var solvers      = FindAllSolvers().ToArray();
            var solverNumber = 0;

            foreach (var solverType in solvers)
            {
                solverNumber++;
                Console.WriteLine($"{solverNumber}: {solverType.FullName}");
            }

            solverNumber = int.Parse(Console.ReadLine() ?? "1");

            var game   = new TowerGame(pegSize);
            var drawer = new ConsoleDrawer();
            var solver = (ISolveTowers)Activator.CreateInstance(solvers[solverNumber - 1]);

            drawer.Draw(game);

            var moves = RunTowerThroughTheSolver(solver, game, drawer);

            if (game.IsGameOver())
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("The Tower has been SOLVED!!!");
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("The Tower has NOT been solved. :(");
            }

            Console.ForegroundColor = ConsoleColor.White;

            var numberOfInvalidMoves = moves.Count(m => !m.Valid);

            Console.WriteLine($"Number of moves: {moves.Count}. Invalid Moves: {numberOfInvalidMoves}.");
            Console.WriteLine("Print the move history? (Y/N)");
            var printAnswer = Console.ReadLine()?.ToUpper() ?? "";

            if (printAnswer == "Y")
            {
                PrintMoveLogToConsole(moves);
            }
        }