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