/// <summary> /// Determine whether a position is threatened. /// </summary> /// <param name="position">Position to check</param> /// <param name="board">Board to reference</param> /// <param name="inactivePlayerBoardState">Used to only check opponent's pieces</param> /// <returns></returns> private bool IsPositionThreatened(ChessPosition position, IBoard board, IBoardState inactivePlayerBoardState) { foreach (IPiece enemyPiece in InactivePlayerPieces.Where(p => p.Location != ChessPosition.None)) { enemyPiece.GenerateThreatened(board.State, inactivePlayerBoardState); if (enemyPiece.IsThreateningAt(position)) { return(true); } } return(false); }
/// <summary> /// Returns all pieces that are threatening the passed in King /// </summary> /// <param name="king"></param> /// <returns></returns> private List <IPiece> GetPiecesThreateningKing(IKing king) { var piecesThreateningKing = new List <IPiece>(); InactivePlayerPieces.ForEach(p => { p.GenerateThreatened(GameBoard.State, InactivePlayerBoardState); if (p.IsThreateningAt(king.Location)) { piecesThreateningKing.Add(p); } }); return(piecesThreateningKing); }