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

📄 cchessuidlg.cpp

📁 中国象棋人机对弈
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			CChessBoard[i][j] =0;
		}
	}
	CChessBoard[0][0] = R;
	CChessBoard[1][0] = H;
	CChessBoard[2][0] = E;
	CChessBoard[3][0] = A;
	CChessBoard[4][0] = K;
	CChessBoard[5][0] = A;
	CChessBoard[6][0] = E;
	CChessBoard[7][0] = H;
	CChessBoard[8][0] = R;

	CChessBoard[1][2] = C;
	CChessBoard[7][2] = C;

	CChessBoard[0][3] = P;
	CChessBoard[2][3] = P;
	CChessBoard[4][3] = P;
	CChessBoard[6][3] = P;
	CChessBoard[8][3] = P;


	CChessBoard[0][6] = p;
	CChessBoard[2][6] = p;
	CChessBoard[4][6] = p;
	CChessBoard[6][6] = p;
	CChessBoard[8][6] = p;

	CChessBoard[1][7] = c;
	CChessBoard[7][7] = c;

	CChessBoard[0][9] = r;
	CChessBoard[1][9] = h;
	CChessBoard[2][9] = e;
	CChessBoard[3][9] = a;
	CChessBoard[4][9] = k;
	CChessBoard[5][9] = a;
	CChessBoard[6][9] = e;
	CChessBoard[7][9] = h;
	CChessBoard[8][9] = r;
/*
	//FOR TEST..............................
	CChessBoard[0][6] = p;
	CChessBoard[2][6] = p;
	CChessBoard[4][6] = p;
	CChessBoard[6][6] = p;
	CChessBoard[8][6] = p;

	CChessBoard[1][7] = 0;
	CChessBoard[7][7] = 0;

	CChessBoard[0][9] = 0;
	CChessBoard[1][9] = 0;
	CChessBoard[2][9] = 0;
	CChessBoard[3][9] = 0;
	CChessBoard[4][9] = k;
	CChessBoard[5][9] = 0;
	CChessBoard[6][9] = 0;
	CChessBoard[7][9] = 0;
	CChessBoard[8][9] = 0;
*/

	WhoseTurn = RED ;
	fGameover = false;

	nMaxSearchDepth = m_SetDlg.GetDepth();	

}

//将阿拉伯数字转换为中国数字
CString ConvertDigit(int nNum)
{
	switch(nNum)
	{
	case 0:
		return "一";
	case 1:
		return "二";
	case 2:
		return "三";
	case 3:
		return "四";
	case 4:
		return "五";
	case 5:
		return "六";
	case 6:
		return "七";
	case 7:
		return "八";
	case 8:
		return "九";
	default:
		return "";
	}
}

// 取得着法的名称
CString GetMoveStr(int nFromX,int nFromY,int nToX,int nToY,int nSourceID)
{
	/*	
	bool bIsAgain;
	int i;
	int nCount;
	int nPos[5];
	int j=0;
	*/	

	CString Str;
	int nCur,nOther;
	int Other[4];
	//和兵有关的
	int count_X = 1;    //计算在一列上的子的数目
	int count_Y = 0;	//记录有几个子在当前子的前方
	int i;

	switch(nSourceID)
	{
		//红帅
		case RED_K0:
			if( nFromX == nToX )
			{
				if( nToY > nFromY )
					Str="红:帅"+ConvertDigit(8-nFromX)+"进"+ConvertDigit(nToY-nFromY-1);
				else
					Str="红:帅"+ConvertDigit(8-nFromX)+"退"+ConvertDigit(nFromY-nToY-1);
			}
			else
				Str="红:帅"+ConvertDigit(8-nFromX)+"平"+ConvertDigit(8-nToX);

		break;

		//黑将
		case BLACK_K0:
			if ( nFromX == nToX ) 
			{
				if( nToY < nFromY )
					Str.Format("黑:将%d进%d",nFromX+1,nFromY-nToY);
				else
					Str.Format("黑:将%d退%d",nFromX+1,nToY-nFromY);
			}
			else
				Str.Format("黑:将%d平%d",nFromX+1,nToX+1);
		break;


		//红仕
		case RED_Sl:
		case RED_Sr:
			if( nToY>nFromY )
				Str="红:仕"+ConvertDigit(8-nFromX)+"进"+ConvertDigit(8-nToX);
			else
				Str="红:仕"+ConvertDigit(8-nFromX)+"退"+ConvertDigit(8-nToX);
		break;

		//黑士
		case BLACK_Sl:
		case BLACK_Sr:	
			if( nToY<nFromY )
				Str.Format("黑:士%d进%d",nFromX+1,nToX+1);
			else
				Str.Format("黑:士%d退%d",nFromX+1,nToX+1);
		break;

		//红相
		case RED_Xl:
		case RED_Xr:
			if( nToY > nFromY )
				Str="红:相"+ConvertDigit(8-nFromX)+"进"+ConvertDigit(8-nToX);
			else
				Str="红:相"+ConvertDigit(8-nFromX)+"退"+ConvertDigit(8-nToX);
		break;

		//黑象
		case BLACK_Xl:
		case BLACK_Xr:
			if( nToY < nFromY )
				Str.Format("黑:象%d进%d",nFromX+1,nToX+1);
			else
				Str.Format("黑:象%d退%d",nFromX+1,nToX+1);
		break;


		//红炮
		case RED_Pl:
		case RED_Pr:
			if( RED_Pl == nSourceID )
			{
				nCur	= RED_Pl;
				nOther	= RED_Pr;
			}
			else
			{
				nCur	= RED_Pr;
				nOther	= RED_Pl;
			}

			if(ptChess[nCur].x == ptChess[nOther].x)
			{
				if(ptChess[nCur].y < ptChess[nOther].y)
				{
					if(nToY<nFromY)
					{
						Str="红:前炮退"+ConvertDigit(nFromY-nToY-1);
					}
					if(nToY>nFromY)
					{
						Str="红:前炮进"+ConvertDigit(nToY-nFromY-1);
					}
					if(nToY == nFromY)
					{
						Str="红:前炮平"+ConvertDigit(8-nToX);
					}
				}
				else
				{
					if(nToY<nFromY)
					{
						Str="红:后炮退"+ConvertDigit(nFromY-nToY-1);
					}
					if(nToY>nFromY)
					{
						Str="红:后炮进"+ConvertDigit(nToY-nFromY-1);
					}
					if(nToY == nFromY)
					{
						Str="红:后炮平"+ConvertDigit(8-nToX);
					}
				}
			}
			else
			{
				if(nToY<nFromY)
				{
					Str="红:炮"+ConvertDigit(8-nFromX)+"退"+ConvertDigit(nFromY-nToY-1);
				}
				if(nToY>nFromY)
				{
					Str="红:炮"+ConvertDigit(8-nFromX)+"进"+ConvertDigit(nToY-nFromY-1);
				}
				if(nToY == nFromY)
				{
					Str="红:炮"+ConvertDigit(8-nFromX)+"平"+ConvertDigit(8-nToX);
				}
			}
		break;

		//黑炮
		case BLACK_Pl:
		case BLACK_Pr:
			if( BLACK_Pl == nSourceID )
			{
				nCur	= BLACK_Pl;
				nOther	= BLACK_Pr;
			}
			else
			{
				nCur	= BLACK_Pr;
				nOther	= BLACK_Pl;
			}

			if(ptChess[nCur].x == ptChess[nOther].x)
			{
				if(ptChess[nCur].y > ptChess[nOther].y)
				{
					if(nToY<nFromY)
					{
						Str.Format("黑:前炮进%d",nFromY-nToY);
					}
					if(nToY>nFromY)
					{
						Str.Format("黑:前炮退%d",nToY-nFromY);
					}
					if(nToY == nFromY)
					{
						Str.Format("黑:前炮平%d",nToX+1);
					}
				}
				else
				{
					if(nToY<nFromY)
					{
						Str.Format("黑:后炮进%d",nFromY-nToY);
					}
					if(nToY>nFromY)
					{
						Str.Format("黑:后炮退%d",nToY-nFromY);
					}
					if(nToY == nFromY)
					{
						Str.Format("黑:后炮平%d",nToX+1);
					}
				}
			}
			else
			{
				if(nToY<nFromY)
				{
					Str.Format("黑:炮%d进%d",nFromX+1,nFromY-nToY);
				}
				if(nToY>nFromY)
				{
					Str.Format("黑:炮%d退%d",nFromX+1,nToY-nFromY);
				}
				if(nToY == nFromY)
				{
					Str.Format("黑:炮%d平%d",nFromX+1,nToX+1);
				}
			}
			break;
		
		//红马
		case RED_Ml:
		case RED_Mr:
			if( RED_Ml == nSourceID )
			{
				nCur	= RED_Ml;
				nOther	= RED_Mr;
			}
			else
			{
				nCur	= RED_Mr;
				nOther	= RED_Ml;
			}
			if(ptChess[nCur].x == ptChess[nOther].x)
			{
				if(ptChess[nCur].y < ptChess[nOther].y)
				{
					if( nToY<nFromY )
					{
						Str="红:前马退"+ConvertDigit(8-nToX);
					}
					if(nToY>nFromY)
					{
						Str="红:前马进"+ConvertDigit(8-nToX);
					}
				}
				else
				{
					if(nToY<nFromY)
					{
						Str="红:后马退"+ConvertDigit(8-nToX);
					}
					if(nToY>nFromY)
					{
						Str="红:后马进"+ConvertDigit(8-nToX);
					}
				}
			}
			else
			{
				if(nToY<nFromY)
				{
					Str="红:马"+ConvertDigit(8-nFromX)+"退"+ConvertDigit(8-nToX);
				}
				if(nToY>nFromY)
				{
					Str="红:马"+ConvertDigit(8-nFromX)+"进"+ConvertDigit(8-nToX);
				}
			}
			break;

		//黑马
		case BLACK_Ml:
		case BLACK_Mr:
			if( BLACK_Ml == nSourceID )
			{
				nCur	= BLACK_Ml;
				nOther = BLACK_Mr;
			}
			else
			{
				nCur	= BLACK_Mr;
				nOther= BLACK_Ml;
			}
			if(ptChess[nCur].x == ptChess[nOther].x)
			{
				if(ptChess[nCur].y > ptChess[nOther].y)
				{
					if(nToY<nFromY)
					{
						Str.Format("黑:前马进%d",nToX+1);
					}
					if(nToY>nFromY)
					{
						Str.Format("黑:前马退%d",nToX+1);
					}
				}
				else
				{
					if(nToY<nFromY)
					{
						Str.Format("黑:后马进%d",nToX+1);
					}
					if(nToY>nFromY)
					{
						Str.Format("黑:后马退%d",nToX+1);
					}
				}
			}
			else
			{
				if(nToY<nFromY)
				{
					Str.Format("黑:马%d进%d",nFromX+1,nToX+1);
				}
				if(nToY>nFromY)
				{
					Str.Format("黑:马%d退%d",nFromX+1,nToX+1);
				}
			}
			break;


		//红车
		case RED_Jl:
		case RED_Jr:
			if( RED_Jl == nSourceID )
			{
				nCur	= RED_Jl;
				nOther	= RED_Jr;
			}
			else
			{
				nCur	= RED_Jr;
				nOther	= RED_Jl;
			}

			if(ptChess[nCur].x == ptChess[nOther].x)
			{
				if(ptChess[nCur].y < ptChess[nOther].y)
				{
					if(nToY<nFromY)
					{
						Str="红:前车退"+ConvertDigit(nFromY-nToY-1);
					}
					if(nToY>nFromY)
					{
						Str="红:前车进"+ConvertDigit(nToY-nFromY-1);
					}
					if(nToY == nFromY)
					{
						Str="红:前车平"+ConvertDigit(8-nToX);
					}
				}
				else
				{
					if(nToY<nFromY)
					{
						Str="红:后车退"+ConvertDigit(nFromY-nToY-1);
					}
					if(nToY>nFromY)
					{
						Str="红:后车进"+ConvertDigit(nToY-nFromY-1);
					}
					if(nToY == nFromY)
					{
						Str="红:后车平"+ConvertDigit(8-nToX);
					}
				}
			}
			else
			{
				if(nToY<nFromY)
				{
					Str="红:车"+ConvertDigit(8-nFromX)+"退"+ConvertDigit(nFromY-nToY-1);
				}
				if(nToY>nFromY)
				{
					Str="红:车"+ConvertDigit(8-nFromX)+"进"+ConvertDigit(nToY-nFromY-1);
				}
				if(nToY == nFromY)
				{
					Str="红:车"+ConvertDigit(8-nFromX)+"平"+ConvertDigit(8-nToX);
				}
			}
			break;

		//黑车
		case BLACK_Jl:
		case BLACK_Jr:

			if( BLACK_Pl == nSourceID )
			{
				nCur	= BLACK_Jl;
				nOther	= BLACK_Jr;
			}
			else
			{
				nCur	= BLACK_Jr;
				nOther	= BLACK_Jl;
			}

			if(ptChess[nCur].x == ptChess[nOther].x)
			{
				if(ptChess[nCur].y > ptChess[nOther].y)
				{
					if(nToY<nFromY)
					{
						Str.Format("黑:前车进%d",nFromY-nToY);
					}
					if(nToY>nFromY)
					{
						Str.Format("黑:前车退%d",nToY-nFromY);
					}
					if(nToY == nFromY)
					{
						Str.Format("黑:前车平%d",nToX+1);
					}
				}
				else
				{
					if(nToY<nFromY)
					{
						Str.Format("黑:后车进%d",nFromY-nToY);
					}
					if(nToY>nFromY)
					{
						Str.Format("黑:后车退%d",nToY-nFromY);
					}
					if(nToY == nFromY)
					{
						Str.Format("黑:后车平%d",nToX+1);
					}
				}
			}
			else
			{
				if(nToY<nFromY)
				{
					Str.Format("黑:车%d进%d",nFromX+1,nFromY-nToY);
				}
				if(nToY>nFromY)
				{
					Str.Format("黑:车%d退%d",nFromX+1,nToY-nFromY);
				}
				if(nToY == nFromY)
				{
					Str.Format("黑:车%d平%d",nFromX+1,nToX+1);
				}
			}
			break;

			//红兵
		case RED_B1:
		case RED_B2:
		case RED_B3:
		case RED_B4:
		case RED_B5:
			if( RED_B1 == nSourceID )
			{
				nCur	= RED_B1;
				Other[0]= RED_B2;
				Other[1]= RED_B3;
				Other[2]= RED_B4;
				Other[3]= RED_B5;
			}
			if( RED_B2 == nSourceID )
			{
				nCur	= RED_B2;
				Other[0]= RED_B1;
				Other[1]= RED_B3;
				Other[2]= RED_B4;
				Other[3]= RED_B5;
			}
			if( RED_B3 == nSourceID )
			{
				nCur	= RED_B3;
				Other[0]= RED_B1;
				Other[1]= RED_B2;
				Other[2]= RED_B4;
				Other[3]= RED_B5;
			}
			if( RED_B4 == nSourceID )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -