private static List <TowerGameMoveLogModel> RunTowerThroughTheSolver( ISolveTowers solver, ITowerGame game, IDrawTheTowerGame drawer) { var moves = new List <TowerGameMoveLogModel>(); foreach (var move in solver.SolveFromStart(game.AsReadonly())) { var thisMove = new TowerGameMoveLogModel { Move = move, Valid = true, Peg1CountBefore = game.Peg1.CurrentNumberOfDiscs, Peg2CountBefore = game.Peg2.CurrentNumberOfDiscs, Peg3CountBefore = game.Peg3.CurrentNumberOfDiscs }; Thread.Sleep(solver.MillisecondDelayBetweenMoves); try { game.PerformMove(move.From, move.To); } catch (Exception e) { thisMove.Valid = false; thisMove.Error = e.Message; } thisMove.Peg1CountAfter = game.Peg1.CurrentNumberOfDiscs; thisMove.Peg2CountAfter = game.Peg2.CurrentNumberOfDiscs; thisMove.Peg3CountAfter = game.Peg3.CurrentNumberOfDiscs; moves.Add(thisMove); drawer.Draw(game); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(thisMove.Error); Console.ForegroundColor = ConsoleColor.White; } return(moves); }
public ReadonlyTowerGame(ITowerGame underlying) { _underlying = underlying; }