⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysearchengine.cpp

📁 一个简单的象棋游戏
💻 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 + -