private IEnumerable <BoardWithHistory> EnumSim(BoardWithHistory currentBoard, Piece.PlayerColour currentColour, int currentMoveNum, Predicate <ConditionalStruct> condition) { if (condition(new ConditionalStruct { Board = currentBoard.Board, MoveCount = currentMoveNum })) { yield return(currentBoard); } else { Piece.PlayerColour nextColour = currentColour == Piece.PlayerColour.White ? Piece.PlayerColour.Black : Piece.PlayerColour.White; foreach (Piece p in currentBoard.Board.EnumeratePieces(currentColour)) { foreach (Cell move in p.GetPossibleMoves()) { Board nextBoard = currentBoard.Board.SimulateMove(p.ParentCell, move); BoardWithHistory nextBWH = new BoardWithHistory() { Board = nextBoard, BoardHistory = currentBoard.BoardHistory + "\r\n\r\n" + nextBoard.BoardString, }; foreach (BoardWithHistory returnedBoard in EnumSim(nextBWH, nextColour, currentMoveNum + 1, condition)) { yield return(returnedBoard); } } } } }
public IEnumerable <BoardWithHistory> EnumSimTill(Piece.PlayerColour startColour, Predicate <ConditionalStruct> condition) { Board copyOfBoard = this.Clone() as Board; BoardWithHistory copyOfBoardWH = new BoardWithHistory() { Board = copyOfBoard, BoardHistory = copyOfBoard.BoardString, }; foreach (BoardWithHistory simBoard in EnumSim(copyOfBoardWH, startColour, 0, condition)) { yield return(simBoard); } }