private List<GamePieceMove> GetAddtionalMoves(GameBoard board, GamePieceMove bestMove) { List<GamePieceMove> moves = new List<GamePieceMove>(); List<GamePieceMove> bestMoves = new List<GamePieceMove>(); int bestBoardValue = board.EvaluateBoard(PlayerColours.Black); GameBoard nextBoard = new GameBoard(); nextBoard = board.CloneBoard(); nextBoard.ApplyMove(bestMove); if (bestMove.IsJump) moves.AddRange(board.GetAllPossibleJumpsForThisPiece(bestMove.MovingPiece)); foreach (GamePieceMove m in moves) { GameBoard currentBoard = new GameBoard(); currentBoard = nextBoard.CloneBoard(); currentBoard.ApplyMove(m); //currentBoard = MakeAddtionalMoves(currentBoard, m); if (currentBoard.EvaluateBoard(PlayerColours.Black) > bestBoardValue) bestMoves.Add(m); bestMoves.AddRange(GetAddtionalMoves(currentBoard, m)); board.UnDoMove(m); } board.UnDoMove(bestMove); return bestMoves; }
private GameBoard MakeAddtionalMoves(GameBoard board, GamePieceMove move) { List<GamePieceMove> addtionalMoves = new List<GamePieceMove>(); GameBoard bestBoard = board.CloneBoard(); int bestBoardValue = bestBoard.EvaluateBoard(PlayerColours.Black); if (move.IsJump && board.IsThereASecondJump(move)) addtionalMoves.AddRange(board.GetAllPossibleJumpsForThisPiece(move.MovingPiece)); foreach (GamePieceMove m in addtionalMoves) { GameBoard currentBoard = new GameBoard(); currentBoard = board.CloneBoard(); currentBoard.ApplyMove(m); currentBoard = MakeAddtionalMoves(currentBoard, m); if (currentBoard.EvaluateBoard(PlayerColours.Black) > bestBoardValue) bestBoard = currentBoard; board.UnDoMove(m); } return bestBoard; }