📄 search.cpp
字号:
// Search.cpp: implementation of the CSearch class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "chinesechess.h"
#include "Search.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSearch::CSearch()
{
}
CSearch::~CSearch()
{
delete m_pEval;
delete m_pMG;
}
BYTE CSearch::MakeMove(ChessMove* move)
{
BYTE nChessID;
nChessID=CurPosition[move->pTo.y][move->pTo.x]; //取目标位置棋子
CurPosition[move->pTo.y][move->pTo.x]=CurPosition[move->pFrom.y][move->pFrom.x];
//把棋子移动到目标位置
CurPosition[move->pFrom.y][move->pFrom.x]=NoChessMan;//将原位置清空
return nChessID;//返回被吃掉的棋子
}
void CSearch::RedoChessMove(BYTE position[][9],ChessMove* move)
{
position[move->pTo.y][move->pTo.x]=position[move->pFrom.y][move->pFrom.x];
position[move->pFrom.y][move->pFrom.x]=NoChessMan;
}
void CSearch::UnMakeMove(ChessMove* move, BYTE nChessID)
{
CurPosition[move->pFrom.y][move->pFrom.x]=CurPosition[move->pTo.y][move->pTo.x];
//将目标位置棋子拷回原位
CurPosition[move->pTo.y][move->pTo.x]=nChessID;
//恢复目标位置的棋子
}
void CSearch::UndoChessMove(BYTE position[][9],ChessMove* move, BYTE nChessID)
{
position[move->pFrom.y][move->pFrom.x]=position[move->pTo.y][move->pTo.x];
//将目标位置棋子拷回原位
position[move->pTo.y][move->pTo.x]=nChessID;
//恢复目标位置的棋子
}
int CSearch::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]==BlackKing)
BlackLive=TRUE;
if(position[i][j]==RedKing)
RedLive=TRUE;
}
//检查黑方九宫是否有将
for(i=0;i<3;i++)
for(j=3;j<6;j++)
{
if(position[i][j]==BlackKing)
BlackLive=TRUE;
if(position[i][j]==RedKing)
RedLive=TRUE;
}
int tag;
tag=(m_nMaxDepth-nDepth+1)%2;//取当前奇偶标志,奇数层为电脑方,偶数层为用户方
//红方不在
if(!RedLive)
if(tag)
return 19990+nDepth; //奇数层返回极大值
else
return -19990-nDepth;//偶数层返回极小值
//黑方不在
if(!BlackLive)
if(tag)
return -19990-nDepth;//奇数层返回极小值
else
return 19990+nDepth; //偶数层返回极大值
return 0;//将帅都在,返回0
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -