/// <summary> /// Returns whether the piece has any possible legal captures. /// </summary> /// <param name="piece"></param> /// <returns></returns> private bool DoesPieceHaveLegalCapture(IPiece piece) { piece.GenerateCaptures(GameBoard.State, ActivePlayerBoardState); ICapture capture = ModelLocator.Capture; capture.StartingPosition = piece.Location; IBoardState captureSet = ModelLocator.BoardState; captureSet.Add(piece.CaptureSet); foreach (ChessPosition position in captureSet) { capture.EndingPosition = position; if (IsCaptureLegal(piece, capture, GameBoard.State)) { return(true); } if (piece is IPawn && IsCaptureLegalEnPassant(piece, capture, GameBoard)) { return(true); } } return(false); }
/// <summary> /// Is a capture legal? /// </summary> /// <returns></returns> private bool IsCaptureLegal(IPiece piece, ICapture capture, IBoardState state) { piece.GenerateCaptures(state, ActivePlayerBoardState); bool canPieceCapture = piece.CanCaptureAt(capture.EndingPosition); bool doesCaptureLeaveKingInCheck = DoesPotentialMoveLeaveKingInCheck(capture); return(canPieceCapture && !doesCaptureLeaveKingInCheck); }