コード例 #1
0
ファイル: egbb.cpp プロジェクト: raimarHD/lcec
bool CBitbases::probe(eval_t& eval, const CBoard& board)
{
    if (loaded())
    {
        int32 player = (board.getSide() == eBlack ? _BLACK : _WHITE);
        int32 piece[MAX_PIECES]  = { _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY, _EMPTY };
        int32 square[MAX_PIECES] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
        int32 count = 0;

        bb_t pieces = board.getOccupBits();
        while (pieces)
        {
            EField from = popFirstBit(pieces);
            EPiece type = board.getPiece(from);

            square[count] = from;
            switch (type)
            {
                case eW_P: piece[count] = _WPAWN; break;
                case eW_N: piece[count] = _WKNIGHT; break;
                case eW_B: piece[count] = _WBISHOP; break;
                case eW_R: piece[count] = _WROOK; break;
                case eW_Q: piece[count] = _WQUEEN; break;
                case eW_K: piece[count] = _WKING; break;
                case eB_P: piece[count] = _BPAWN; break;
                case eB_N: piece[count] = _BKNIGHT; break;
                case eB_B: piece[count] = _BBISHOP; break;
                case eB_R: piece[count] = _BROOK; break;
                case eB_Q: piece[count] = _BQUEEN; break;
                case eB_K: piece[count] = _BKING; break;
                case eNP: break;
            }
            ++count;
        }

        eval_t eval_eg = m_lib.probe_egbb(player, piece, square);
        if (eval_eg != NOTFOUND)
        {
            eval = eval_eg;
            ++m_hits;

            return(true);
        }
    }
    return(false);
}