亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? model.cpp

?? c+++ game uploading now
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
    //retrieve best move;
    if(depth==IdDepth) //TODO check whether I could do this from the callee
        bestMove=actualbtt.BestMove();

    return g;
}

int Thinker::MTD(int f, int depth)
{
    int g=f;
    int upperbound=+infinity;
    int lowerbound=-infinity;
    int beta;
    do
    {
        if(g==lowerbound)
            beta=g+1;
        else
            beta=g;
        g=AlphaBeta(beta-1, beta, depth);
        if(g<beta)
            upperbound=g;
        else
            lowerbound=g;
        //assert(lowerbound<=upperbound);
    }while(lowerbound!=upperbound);

    return g;
}

void Thinker::Think()
{
    assert(actualb.empties==Count(empty));
    assert(actualb.blacks==Count(black));
    
    //first move
    if(actualb.CountEmpty()==60)
    {
        bestMove=firstmoves[rand() % 4];
        _lastbestMove=bestMove;
        return;
    }

    //book lookup
    bestMove=_book.AdvisedMove(actualb);
    _lastbestMove=bestMove;
    if(-1!=TTBoard::Persil[bestMove])
        return;


    //allocate time for this search
    _timescheduler.AllocTarget(actualb.CountEmpty());

    int startDepth=1;

    bestMove=-1;
    IsLegalMove legal; 
    int dir;
    TTBoard *prev=_ttable.Retrieve();
    if(prev!=NULL && prev->GetDepth()!=0 
       && actualb.table[prev->BestMove()]==empty
       && legal(prev->BestMove(), dir))
    {
        //assert(prev->HasExact());
        startDepth=prev->GetDepth()+1;
        gamevalue=prev->Value();

        bestMove=prev->BestMove();
        _lastbestMove=bestMove;

        //low on time situations
        if(MSecRemaining()<=3)
        {
            if(bestMove!=-1)
                return;
        }
        if(_isdoublemove && 2*_avaible_time<=_init_totaltime)
        {
            if(bestMove!=-1)
            {
                _isdoublemove=false;
                return;
            }
        }

    }
    else
        gamevalue=NaiveBestMoveSearch();

#if defined _ENDGAME_TEST_

    if(actualb.CountEmpty()<=20)
        if(actualb.CountEmpty()>17)
        {
            IdDepth=actualb.CountEmpty();
            gamevalue=AlphaBeta(-1, 1, actualb.CountEmpty());
            _lastbestMove=bestMove;
            return;
        }
        else
            if(actualb.CountEmpty()>10) //stupid (best move isn't captured in endgame)
            {
                IdDepth=actualb.CountEmpty();
                gamevalue=AlphaBeta(-infinity, infinity, actualb.CountEmpty());
                _lastbestMove=bestMove;
                return;
            }

#endif

    //can we play perfectly? 
    bool perfect_play=(gamevalue>63 || gamevalue<-63);
     
    //do iterative deepening
    unsigned int maxdepth=MAXDEPTH;
    if(maxdepth > actualb.CountEmpty())
        maxdepth = actualb.CountEmpty(); 
    
    int prevvalue=gamevalue;
    for(IdDepth=startDepth; IdDepth<=maxdepth; IdDepth++)
    {
        actualbtt.SetDepth(0);
        int tmp=MTD(prevvalue, IdDepth);
        prevvalue=gamevalue ; gamevalue=tmp; _lastbestMove=bestMove;
        if(!perfect_play)
        {
            if(gamevalue>63 || gamevalue<-63 || _timescheduler.TimeIsUp(IdDepth))
            {
                IdDepth++; break;
            }
        }
        else
        {
            if(IdDepth==actualb.CountEmpty() ||_timescheduler.TimeIsUp(IdDepth))
            {
                IdDepth++; break;
            }
        }
    }
    IdDepth--;
    _ttable.AdvanceSearchStamp();
}


void Thinker::TTChangeSize(unsigned int logsize)
{
    _ttable.ReAlloc(logsize);
}

unsigned int Thinker::TTLogSize()
{
    return _ttable.LogSize();
}


void Thinker::SetTotalTime(unsigned int min_per_game)
{
    _avaible_time=min_per_game*1000*60;
    _init_totaltime=_avaible_time;
}

unsigned int Thinker::MSecRemaining() 
{
    return _timescheduler.MSecRemaining();
}


void Thinker::DispatchResultsToGui()
{
    //stop execution until controller says GO!
    _event.RedLight();
    AddMove(bestMove, actualb.isblacksturn);
    newBoard=actualb;
    GuiMoveExecuter(newBoard, bestMove);

    //check if I can make another move
    Board tmp=newBoard;
    MoveEnumerator opponentmoves(tmp);
    if(opponentmoves.Empty())
    {
        Board tmp2=newBoard;
        tmp2.isblacksturn=!tmp2.isblacksturn;
        MoveEnumerator mymoves(tmp2);
        if(mymoves.Empty())
        {
            //game over
            ::SendMessage(_hwnd, WM_CALC_DONE, 0, 0);
            return;
        }
        //yes I can take another move 
        Go();
        newBoard.isblacksturn=!newBoard.isblacksturn;
        _isdoublemove=true;
        ::SendMessage(_hwnd, WM_UPDATE_VIEW, 0, 0);
        return;
    }
    //say: We are Done!
    ::SendMessage(_hwnd, WM_CALC_DONE, 0, 0);
}


int Thinker::Hint()
{
    assert(_thinking==false);

    if(newBoard.CountEmpty()==60)
        return firstmoves[rand() % 4];
    
    Board tmp=newBoard;
    actualb=newBoard;
    InitBoards();

    int hintmove=-1;

    if(!_book.OutOfBook())
    {
        hintmove=_book.AdvisedMove(actualb);
        if(-1!=TTBoard::Persil[hintmove])
        {
            newBoard=tmp;
            InitBoards();
            return hintmove;
        }
    }

    TTBoard *prev=_ttable.Retrieve();
    IsLegalMove legal; 
    int dir;
    hintmove=-1;
    if(prev!=NULL 
        && actualb.table[prev->BestMove()]==empty
        && legal(prev->BestMove(), dir))
        hintmove=prev->BestMove();
    newBoard=tmp;
    InitBoards();
    return hintmove;
    //add a shallow search here
}


int Thinker::NaiveBestMoveSearch()
{
    bool ismaxplayer=actualb.isblacksturn;
    IsLegalMove legal;
    int dir;
    UndoData udata;
    int act_best_move=-1;
    int act_best_val=ismaxplayer?-infinity:+infinity;
    for(unsigned int i=p11; i<s89; i++)
    {
        if(actualb.table[i]==empty && legal(i, dir))
        {
            FullMoveExecuter exec(i, udata, dir);
            int g=evaluator.Evaluate();
            if(ismaxplayer)
            {
                if(act_best_val<=g)
                {
                    act_best_val=g;
                    act_best_move=i;
                }
            }
            else
            {
                if(act_best_val>=g)
                {
                    act_best_val=g;
                    act_best_move=i;
                }
            }
        }
    }

    if(act_best_move!=-1)
    {
        bestMove=act_best_move;
        _lastbestMove=bestMove;
        return act_best_val;
    }
    return evaluator.Evaluate();
}

void Thinker::InitThread()
{
    srand(time(0));
    ResetGame();
}

int Thinker::deep_enough[]=
{
    10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
    11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
    11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
    10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
    9,  9,  9,  9,  9,  9,  9,  10,  10, 10,
    10,  9,  8,  7,  6,  5,  4,  3,  2,  1
};

squareindex Thinker::firstmoves[]=
{
    p43, p34, p56, p65
};

void Thinker::CheckTime()
{
    if(_thinking)
    {
       if(!_timescheduler.TimeOk())
            _stop=timeOut;
    }
}

HistoryHeuristic& Thinker::_hheuristic=HistoryHeuristic::Instance();
TranspositionTable& Thinker::_ttable=TranspositionTable::Instance();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黑人巨大精品欧美一区| 欧美在线看片a免费观看| 91在线观看视频| 日韩欧美在线影院| 亚洲精品乱码久久久久久黑人 | 久久免费看少妇高潮| 亚洲欧美国产77777| 国产在线一区观看| 欧美一区二区精美| 亚洲综合免费观看高清完整版在线| 国产激情91久久精品导航 | 日本不卡高清视频| 一本大道综合伊人精品热热| 久久久99久久| 美女脱光内衣内裤视频久久影院| 欧美性大战久久久久久久| 亚洲国产精品成人综合| 激情欧美一区二区三区在线观看| 欧美视频一区二区| 亚洲人123区| jlzzjlzz欧美大全| 国产日韩欧美制服另类| 国产在线精品一区二区| 欧美电影免费提供在线观看| 全国精品久久少妇| 日韩欧美国产电影| 精品在线观看视频| 欧美一级日韩免费不卡| 热久久久久久久| 日韩一二三区视频| 久久精品国产一区二区三区免费看| 欧美精品丝袜中出| 蜜桃视频在线一区| 欧美一区二区三区公司| 久久国产精品一区二区| 久久久亚洲精品一区二区三区| 理论片日本一区| 久久久久久久久久久电影| 国产精品自拍在线| 中文字幕中文字幕一区二区| 99久久国产综合精品女不卡 | 日韩免费在线观看| 老鸭窝一区二区久久精品| 精品少妇一区二区三区| 国产精品一区二区不卡| 久久亚区不卡日本| 成人午夜精品在线| 亚洲精品免费在线| 欧美美女视频在线观看| 青青草国产成人99久久| xvideos.蜜桃一区二区| 成av人片一区二区| 亚洲综合色成人| 欧美电影免费观看高清完整版在线| 久久99精品国产.久久久久| 久久久亚洲欧洲日产国码αv| 国产精品综合在线视频| 亚洲人一二三区| 91网站最新地址| 国产伦精品一区二区三区免费| 有码一区二区三区| 欧美日韩精品一二三区| 奇米影视在线99精品| 久久精品夜夜夜夜久久| 日本高清不卡aⅴ免费网站| 国产精品卡一卡二卡三| 免费观看久久久4p| 国产欧美日韩麻豆91| 色欧美乱欧美15图片| 日日夜夜精品视频天天综合网| 久久亚洲二区三区| 日本高清不卡视频| 国产美女娇喘av呻吟久久| 亚洲精品成人天堂一二三| 日韩限制级电影在线观看| 成人激情免费电影网址| 午夜亚洲福利老司机| 国产精品视频一二三区| 欧美精品久久天天躁| 成人妖精视频yjsp地址| 亚洲成人午夜电影| 国产精品毛片久久久久久久| 91精品婷婷国产综合久久性色 | 国产精品护士白丝一区av| 欧美久久免费观看| av资源网一区| 国产激情一区二区三区四区| 日韩一区二区精品在线观看| 大陆成人av片| 美美哒免费高清在线观看视频一区二区 | 欧美一区二区三区爱爱| 91在线视频在线| 国产麻豆视频一区二区| 午夜伦理一区二区| 日韩美女视频一区二区| 久久久久久9999| 欧美mv日韩mv国产| 欧美一区二区三区视频免费 | 中文字幕欧美激情一区| 日韩一区二区三区在线视频| 91成人国产精品| 成人免费观看男女羞羞视频| 久久精品久久综合| 视频一区中文字幕国产| 日韩高清不卡一区| 久久久一区二区三区| 日韩一卡二卡三卡| 91精品国产麻豆国产自产在线| 成人国产视频在线观看| 久久精品国产99国产| 亚洲综合色视频| 中文字幕av不卡| 欧美精品一区二区三区视频| 欧美日韩的一区二区| 一本色道久久加勒比精品| 精品一区二区三区免费视频| 亚洲v中文字幕| 亚洲九九爱视频| 国产精品久久久久久亚洲毛片| 欧美一区二区三区的| 色综合色狠狠天天综合色| 国产98色在线|日韩| 激情国产一区二区| 国产精品99久久久| 欧美高清视频一二三区 | jlzzjlzz亚洲女人18| 成人性生交大片免费看视频在线| 国产成人亚洲综合a∨猫咪| 丰满少妇在线播放bd日韩电影| 成人一区二区三区在线观看| eeuss鲁一区二区三区| 91丝袜美腿高跟国产极品老师| 色美美综合视频| 欧美日韩在线播| 欧美成人bangbros| 久久噜噜亚洲综合| 亚洲情趣在线观看| 午夜免费久久看| 国产一区二区三区电影在线观看| 国产ts人妖一区二区| 91视视频在线观看入口直接观看www| 91小视频在线免费看| 欧美日韩不卡在线| 久久久久国色av免费看影院| 亚洲人成7777| 日本视频在线一区| 欧美xxxxx裸体时装秀| 欧美国产一区二区| 亚洲精品免费看| 精品一区二区免费| 不卡的av在线播放| 欧美精品久久99久久在免费线| 精品久久久久久最新网址| 中文字幕永久在线不卡| 午夜成人免费电影| 国产91丝袜在线播放0| 在线视频一区二区免费| 欧美videos中文字幕| 亚洲三级视频在线观看| 奇米影视一区二区三区小说| av亚洲精华国产精华精华| 欧美日韩国产成人在线免费| 国产女人aaa级久久久级| 亚洲午夜免费福利视频| 国产精品一区二区三区99| 色嗨嗨av一区二区三区| 国产午夜亚洲精品羞羞网站| 亚洲一区二区三区在线看| 国产一区二区三区国产| 欧美精品自拍偷拍| 日韩理论片网站| 国产真实精品久久二三区| 欧美四级电影在线观看| 国产视频一区在线观看| 热久久国产精品| 在线一区二区三区四区五区| 国产亚洲欧洲一区高清在线观看| 亚洲成人免费观看| 一本一道久久a久久精品| 国产欧美精品在线观看| 免费成人美女在线观看.| 色偷偷一区二区三区| 国产精品久久久久影院色老大| 奇米在线7777在线精品| 欧美亚洲愉拍一区二区| 亚洲欧洲韩国日本视频| 国产91精品一区二区麻豆亚洲| 67194成人在线观看| 一区二区三区.www| 99久久伊人精品| 久久国产麻豆精品| 欧美精品99久久久**| 一区二区三区精品在线观看| 不卡一区二区在线| 欧美电影一区二区三区| 午夜精品久久久久久久99水蜜桃| 色综合视频一区二区三区高清| 亚洲欧美一区二区三区孕妇| 成人免费福利片| 国产精品网站在线|