// 调整型局面评价函数 inline int Evaluate(const PositionStruct &pos, int vlAlpha, int vlBeta) { int vl; vl = Search.bKnowledge ? pos.Evaluate(vlAlpha, vlBeta) : pos.Material(); return vl == pos.DrawValue() ? vl - 1 : vl; }
// 静态搜索 int SearchQuiesc ( int alpha, int beta ) { int mv, vl; int bvl = - MATE_VALUE; MoveSortStruct mvsort; if ( TimeOut() ) { // 超时 return bvl; } // 无害裁剪 vl = HarmlessPruning (); if ( vl > - MATE_VALUE ) { return vl; } // 置换裁剪 vl = QueryValueInHashTableQC ( alpha, beta ); if ( vl > - MATE_VALUE ) { return vl; } // 生成着法 if ( pos.checked ) { mvsort.InitMove (); } else { bvl = pos.Evaluate (); if ( bvl >= beta ) { InsertInfoToHashTableQC ( bvl, MATE_VALUE ); return bvl; } if ( bvl > alpha ) { alpha = bvl; } mvsort.InitGoodCapMove (); } // 大搜索 while ( (mv = mvsort.NextMove()) != 0 ) { pos.MakeMove (mv); vl = - SearchQuiesc ( -beta, -alpha ); pos.UndoMakeMove (); if ( TimeOut() ) { // 超时 return bvl; } if ( vl > bvl ) { bvl = vl; if ( bvl >= beta ) { if ( bvl > - BAN_VALUE && bvl < BAN_VALUE ) { InsertInfoToHashTableQC ( bvl, MATE_VALUE ); } return vl; } if ( bvl > alpha ) { alpha = bvl; } } } // 最后 if ( bvl > - BAN_VALUE && bvl < BAN_VALUE ) { InsertInfoToHashTableQC ( bvl, bvl ); } return bvl; }