示例#1
0
        public Eval addMove(Move moveFound, List <GoodMove> goodMoves,
                            Depth wDepth, Eval mValueFound, Eval mAlpha, Eval mBeta, EvalType etFound,
                            Boolean bFilterEvalUndefined = false)
        {
            var mValue = adjustValue(mAlpha, mBeta, mValueFound, etFound, SearchPly);
            // Note: Adjusted mValue may be EvalUndefined
            var bAllowValue = EvalUndefined < mValue || !bFilterEvalUndefined;

            if (bAllowValue && goodMoves is not null && isDefinite(moveFound))
            {
#if DedupeGoodMoves
                //
                // Duplicates should be avoided; but will be filtered from SiftedMoves
                //
                if (goodMoves.Exists(gm => equalMoves(gm.Move, moveFound)))
                {
#if DEBUG
                    var sb = new StringBuilder()
                             .AppendFormat("Filtering ")
                             .AppendAN(moveFound, State.Rule.IsChess960);
                    LogLine(sb.ToString());
#endif
                    return(mValue);
                }
#endif                                  // DedupeKillers
                // moveFound may be either annotated or abbreviated
                var good = new GoodMove(moveFound, wDepth, mValue, etFound);
#if LoadMRU
                goodMoves.Insert(0, good); // MRU order
#else
                goodMoves.Add(good);       // LRU works best
#endif
            }

            return(mValue);
        }