コード例 #1
0
        protected Eval storeQXP(Eval mValue, EvalType et,
                                Move moveBest = Move.Undefined)
        {
            Trace.Assert(EvalUndefined < mValue, "storeQXP(EvalUndefined)");
            traceVal("storeQXP", mValue, et); //[Conditional]
            State.IncEvalType(et);
            var mAdjusted = creditMate(mValue, SearchPly);

            if (IsFinal())
            {
                Trace.Assert(!isDefined(moveBest), "moveBest defined in a Final position.");
                moveBest = Move.EmptyMove;
            }
#if DebugMoveColor
            if (isDefinite(moveBest))
            {
                var bWTM       = WTM();
                var bWhiteMove = (moveBest & Move.WTM) != 0;
                if (bWTM != bWhiteMove)
                {
                    Debug.Assert(bWTM == bWhiteMove, "WTM != WhiteMove [storeQXP]");
                    DisplayCurrent("storeQXP()");
                }
            }
#endif
#if QXPHash128
            var store = new QuietPosition(Hash, State.MovePly, HashPawn, mAdjusted, et, moveBest);
#else
            var store = new QuietPosition(Hash, State.MovePly, mAdjusted, et, moveBest);
#endif
            State.QXPTank.Save(store);
            return(mValue);
        }
コード例 #2
0
        protected Boolean probeQXP(Eval mAlpha, Eval mBeta,
                                   out Move moveFound, out Eval mValue, out EvalType etFound)
        {
#if QXPHash128
            var match = new QuietPosition(Hash, State.MovePly, HashPawn);
#else
            var match = new QuietPosition(Hash, State.MovePly);
#endif
            var bValid   = State.QXPTank.LoadFirst(ref match);
            var moveBest = adjustEmptyMove(match.BestMove);
            moveFound = isDefined(moveBest) ? moveBest | Move.Qxnt : moveBest; //[out]3
            etFound   = match.Type;                                            //[out]2
            //[Note]Mate values are suspect because quiet moves were not considered
            var mValueFound = match.Value;
            mValue = adjustValue(mAlpha, mBeta, mValueFound, etFound, SearchPly); //[out]1
            traceVal("probeQXP", mValue, etFound);                                //[Conditional]
            var bValueDefined = EvalUndefined < mValue;
            return(bValid && bValueDefined);
        }