?? searchengine.cpp
字號:
// SearchEngine.cpp: implementation of the CSearchEngine class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Chess.h"
#include "SearchEngine.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSearchEngine::CSearchEngine()
{
}
CSearchEngine::~CSearchEngine()
{
delete m_pMG;
delete m_pEval;
}
BYTE CSearchEngine::MakeMove(CHESSMOVE* move)
{
BYTE nChessID;
nChessID=CurPosition[move->To.y][move->To.x]; //取目標位置棋子
CurPosition[move->To.y][move->To.x]=CurPosition[move->From.y][move->From.x];
//把棋子移動到目標位置
CurPosition[move->From.y][move->From.x]=NOCHESS;//將原位置清空
return nChessID;//返回被吃掉的棋子
}
void CSearchEngine::RedoChessMove(BYTE position[][9],CHESSMOVE* move)
{
position[move->To.y][move->To.x]=position[move->From.y][move->From.x];
position[move->From.y][move->From.x]=NOCHESS;
}
void CSearchEngine::UnMakeMove(CHESSMOVE* move, BYTE nChessID)
{
CurPosition[move->From.y][move->From.x]=CurPosition[move->To.y][move->To.x];//將目標位置棋子拷回原位
CurPosition[move->To.y][move->To.x]=nChessID; //恢復目標位置的棋子
}
void CSearchEngine::UndoChessMove(BYTE position[][9],CHESSMOVE* move, BYTE nChessID)
{
position[move->From.y][move->From.x]=position[move->To.y][move->To.x];//將目標位置棋子拷回原位
position[move->To.y][move->To.x]=nChessID; //恢復目標位置的棋子
}
int CSearchEngine::IsGameOver(BYTE position[][9], int nDepth)
{
int i,j;
BOOL RedLive=FALSE,BlackLive=FALSE;
//檢查紅方九宮是否有帥
for(i=7;i<10;i++)
for(j=3;j<6;j++)
{
if(position[i][j]==B_KING)
BlackLive=TRUE;
if(position[i][j]==R_KING)
RedLive=TRUE;
}
//檢查黑方九宮是否有將
for(i=0;i<3;i++)
for(j=3;j<6;j++)
{
if(position[i][j]==B_KING)
BlackLive=TRUE;
if(position[i][j]==R_KING)
RedLive=TRUE;
}
i=(m_nMaxDepth-nDepth+1)%2;//取當前奇偶標志,奇數層為電腦方,偶數層為用戶方
//紅方不在
if(!RedLive)
if(i)
return 19990+nDepth; //奇數層返回極大值
else
return -19990-nDepth;//偶數層返回極小值
//黑方不在
if(!BlackLive)
if(i)
return -19990-nDepth;//奇數層返回極小值
else
return 19990+nDepth; //偶數層返回極大值
return 0;//將帥都在,返回0
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -