围棋有静态这个概念,常见的是定势
何时静态,我认为是棋块状态没有变化,就达到静态
下面的程序分别判定吃子棋和正常对局时达到静态的估值
int score=0;
//计算要下的棋子的颜色
int ModeFlag=m_pMG->ModeFlag;
if(Depth<m_nMaxDepth)
{
if(m_pMG->iTakeBlack+m_pMG->iTakeWhite+m_pMG->Step>((GRID_COUNT*4)/5) && m_pMG->gWhiteCount<(GRID_COUNT/5) && m_pMG->gBlackCount<(GRID_NUM/5))
{
score=m_pEval->Eveluate(position,m_pMG->PosLog,m_pMG->Step,type,iMaxDepth-Depth,m_pMG->iTakeBlack,m_pMG->iTakeWhite);
return score;
}
}
if(ModeFlag==2 && Depth<m_nMaxDepth)
{//吃子棋
//如果提子,返回最大,否则返回0
if(type==WHITE)
{
if(m_pMG->iTakeBlack>iTakeBlack)
{
if(iTakeBlack<10)
{
score=m_pEval->Eveluate(position,m_pMG->PosLog,m_pMG->Step,type,iMaxDepth-Depth,m_pMG->iTakeBlack,m_pMG->iTakeWhite);
}
else
{
score=19900;
}
}
else if(m_pMG->iTakeWhite>iTakeWhite)
{
if(iTakeWhite<10)
{
score=m_pEval->Eveluate(position,m_pMG->PosLog,m_pMG->Step,type,iMaxDepth-Depth,m_pMG->iTakeBlack,m_pMG->iTakeWhite);
}
else
{
score=-19900;
}
}
else
{
score=0;
}
//如果轮到WHITE棋走返回估值
}
else
{
if(m_pMG->iTakeBlack>iTakeBlack)
{
if(iTakeBlack<10)
{
score=m_pEval->Eveluate(position,m_pMG->PosLog,m_pMG->Step,type,iMaxDepth-Depth,m_pMG->iTakeBlack,m_pMG->iTakeWhite);
}
else
{
score=-19900;
}
}
else if(m_pMG->iTakeWhite>iTakeWhite)
{
if(iTakeWhite<10)
{
score=m_pEval->Eveluate(position,m_pMG->PosLog,m_pMG->Step,type,iMaxDepth-Depth,m_pMG->iTakeBlack,m_pMG->iTakeWhite);
}
else
{
score=19900;
}
}
else
{
score=0;
}
//如果轮到黑棋走返回负估值
}
}
else if(Depth<m_nMaxDepth)
{
/*//如果本地急所不存在,
//调用估值函数
*/
if(m_pMG->LocalExact & (FIGHT1|FIGHT2))
{
score=0;
}
else
{
score=m_pEval->Eveluate(position,m_pMG->PosLog,m_pMG->Step,type,iMaxDepth-Depth,m_pMG->iTakeBlack,m_pMG->iTakeWhite);
}
}
return score;
[ Last edited by 杨云 on 2006-3-8 at 10:45 ]