コード例 #1
0
ファイル: ChessDraw.cs プロジェクト: Bonifatius94/ChessAI.CS
        private static int toHashCode(ChessDrawType drawType, ChessColor drawingSide, ChessPieceType drawingPieceType, ChessPieceType?takenPieceType,
                                      ChessPieceType?promotionPieceType, ChessPosition oldPosition, ChessPosition newPosition, bool isFirstMove)
        {
            // TODO: try to remove if/else branchings to make this more efficient

            // shift the bits to the right position (preparation for bitwise OR)
            int isFirstMoveBits        = (isFirstMove ? 1 : 0) << IS_FIRST_MOVE_TRAILING_BITS;
            int drawTypeBits           = ((int)drawType) << DRAW_TYPE_TRAILING_BITS;
            int drawingSideBits        = ((int)drawingSide) << DRAWING_SIDE_TRAILING_BITS;
            int drawingPieceTypeBits   = ((int)drawingPieceType) << DRAWING_PIECE_TYPE_TRAILING_BITS;
            int takenPieceTypeBits     = ((takenPieceType != null) ? (int)takenPieceType.Value : CHESS_PIECE_TYPE_NULL) << TAKEN_PIECE_TYPE_TRAILING_BITS;
            int promotionPieceTypeBits = ((promotionPieceType != null) ? (int)promotionPieceType.Value : CHESS_PIECE_TYPE_NULL) << PROMOTION_PIECE_TYPE_TRAILING_BITS;
            int oldPositionBits        = oldPosition.GetHashCode() << OLD_POSITION_TRAILING_BITS;
            int newPositionBits        = newPosition.GetHashCode();

            // fuse the shifted bits to the hash code (by bitwise OR)
            int hashCode = (isFirstMoveBits | drawTypeBits | drawingSideBits | drawingPieceTypeBits
                            | takenPieceTypeBits | promotionPieceTypeBits | oldPositionBits | newPositionBits);

            return(hashCode);
        }
コード例 #2
0
 public ChessPieceAtPos(ChessPosition position, ChessPiece piece)
 {
     _hashCode = (short)((position.GetHashCode() << 5) | piece.GetHashCode());
 }