📄 mysearchengine.cpp
字号:
// MySearchEngine.cpp: implementation of the CMySearchEngine class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "chess.h"
#include "MySearchEngine.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMySearchEngine::CMySearchEngine()
{
}
CMySearchEngine::~CMySearchEngine()
{
}
CHESSMOVE CMySearchEngine::SearchGoodMove(int board[][9])
{
//memcpy(board2,m_pMG->board.ChessBoard,90*4);
int n1,i1,nBestY,n2,i2,nChessID[2],num;
memcpy(m_pMG->board.ChessBoard,board1,90*4);
/////
m_pMG->CreatePossibleMove(m_pMG->board.ChessBoard,0,false);
n1=m_pMG->m_nMoveCount;
int current[4],score[2],n[4];
current[0]=-20000;
/*m_pMG->m_MoveList[0][0].From.X=3;m_pMG->m_MoveList[0][0].From.Y=0;
m_pMG->m_MoveList[0][0].To.X=4;m_pMG->m_MoveList[0][0].To.Y=1;*/
for(i1=0;i1<n1;i1++)
{
nChessID[0]=MakeMove(&m_pMG->m_MoveList[0][i1]);
//m_pMG->CreatePossibleMove(board1,0,false);
memcpy(m_pEval->board.ChessBoard,board1,90*4);
//score=m_pEval->Eveluate(m_pEval->board.ChessBoard,true);
/////////
memcpy(b,m_pMG->board.ChessBoard,90*4);//暂存棋盘,以便恢复
memcpy(m_pMG->board.ChessBoard,board1,90*4);
////
m_pMG->CreatePossibleMove(m_pMG->board.ChessBoard,1,true);
n2=m_pMG->m_nMoveCount;
current[1]=20000;
for(i2=0;i2<n2;i2++)
{
nChessID[1]=MakeMove(&m_pMG->m_MoveList[1][i2]);
memcpy(m_pEval->board.ChessBoard,board1,90*4);
///
score[1]=m_pEval->Eveluate(m_pEval->board.ChessBoard,false);
if((num=IsGameOver(board1,2,true))!=0)
score[1]=num;
//////
if(score[1]<current[1])
{
current[1]=score[1];
n[1]=i2;
//nBestY=i1;
//m_cmBestMove=m_pMG->m_MoveList[0][i1];
}
UnMakeMove(&m_pMG->m_MoveList[1][i2],nChessID[1]);
}
memcpy(m_pMG->board.ChessBoard,b,90*4);
score[0]=current[1];
/*s.Format("%d %d %d %d %d %d \n",score[0],i1,m_pMG->m_MoveList[0][i1].From.X,
m_pMG->m_MoveList[0][i1].From.Y,m_pMG->m_MoveList[0][i1].To.X,
m_pMG->m_MoveList[0][i1].To.Y);
fwrite(s,sizeof(char),s.GetLength(),fp);*/
if(score[0]>current[0])
{
current[0]=score[0];
/*s.Format("%d %d \n",score[0],i1);
fwrite(s,sizeof(char),s.GetLength(),fp);*/
nBestY=i1;
}
UnMakeMove(&m_pMG->m_MoveList[0][i1],nChessID[0]);
}
//draw(board1);
m_cmBestMove=m_pMG->m_MoveList[0][nBestY];
return m_cmBestMove;
}
int CMySearchEngine::MakeMove(CHESSMOVE *move)
{
int chess;
chess=board1[move->To.Y][move->To.X];
board1[move->To.Y][move->To.X]=board1[move->From.Y][move->From.X];
board1[move->From.Y][move->From.X]=0;
return chess;
}
void CMySearchEngine::UnMakeMove(CHESSMOVE *move,int nChessID)
{
board1[move->From.Y][move->From.X]=board1[move->To.Y][move->To.X];
board1[move->To.Y][move->To.X]=nChessID;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -