/// <summary> /// Calculates a position evaluation result for the specified parameters. /// </summary> /// <param name="bitboard">The bitboard.</param> /// <param name="color">The player color.</param> /// <param name="pieceType">The piece type.</param> /// <param name="piecesToParse">The pieces to parse.</param> /// <returns>The position evaluation result.</returns> private int GetPositionValue(Bitboard bitboard, Color color, PieceType pieceType, ulong piecesToParse) { var position = 0; var array = PositionValues.GetValues(color, bitboard.GamePhase, pieceType); while (piecesToParse != 0) { var pieceLSB = BitOperations.GetLSB(piecesToParse); piecesToParse = BitOperations.PopLSB(piecesToParse); var pieceIndex = BitOperations.GetBitIndex(pieceLSB); position += array[pieceIndex]; } return(position); }
/// <summary> /// Calculates a new position evaluation result based on the value of the removed piece and its position. /// </summary> /// <param name="bitboard">The bitboard.</param> /// <param name="color">The piece color.</param> /// <param name="pieceType">The piece type.</param> /// <param name="piece">The piece bit.</param> public static void RemovePiece(Bitboard bitboard, Color color, PieceType pieceType, ulong piece) { var pieceIndex = BitOperations.GetBitIndex(piece); var array = PositionValues.GetValues(color, bitboard.GamePhase, pieceType); var delta = array[pieceIndex]; switch (color) { case Color.White: { bitboard.IncEvaluation.Position -= delta; break; } case Color.Black: { bitboard.IncEvaluation.Position += delta; break; } } }