public MoveResult SolveBoard(IBoard board) { FailedBoards = new List<string>(); var originalBoard = new BoardCells(board); var result = SolveBoard(new MoveResult(originalBoard, new List<IMove>(), (List<IMove>)null)); result.OriginalBoard = originalBoard; return result; }
/// <summary> /// Will play all forced moves. The result returned will be the resulting /// board and an unsorted move list which does not have any forced moves. /// </summary> protected MoveResult PlayForcedMoves(IBoardCells board, List<IMove> moves,IList<IMove>previousMovesPlayed) { IBoard playboard = board.Board; List<IMove> movesPlayed = new List<IMove>(); if(previousMovesPlayed != null) { movesPlayed.AddRange(previousMovesPlayed); } List<IMove> forcedMoves = GetForcedMoves(moves); IBoardCells playboardCells = new BoardCells(playboard); List<Cell> movesRemaining = null; do { foreach (var move in forcedMoves) { playboard = new Board(playboard, move); movesPlayed.Add(move); _numMovesTried++; } playboardCells = new BoardCells(playboard); movesRemaining = MoveFinder.FindMoves(playboardCells); forcedMoves = GetForcedMoves(Board.GetMovesFrom(movesRemaining)); } while (forcedMoves.Count > 0); if (!Board.IsValid((Board)playboard)) { return null; } return new MoveResult(playboardCells, movesPlayed, movesRemaining); }