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

📄 setchess.cpp

📁 一个简单的象棋游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	int nChessID;
	//bool flag;
	int i,j;
	m_nMoveCount=0;
	for(j=0;j<9;j++)
		for(i=0;i<10;i++)
		{
			if(ChessBoard[i][j]!=NOCHESS)
			{
				nChessID=ChessBoard[i][j];
				if(!nSide&&IsRed(nChessID))
					continue;
				if(nSide&&IsBlack(nChessID))
					continue;
				//if(nChessID==R_CANON||nChessID==B_CANON)
				//{
				switch(nChessID)
				{
				case R_KING:
				case B_KING:
					Gen_KingMove(ChessBoard,i,j,nPly);
					break;
				case R_BISHOP:
					Gen_RBishopMove(ChessBoard,i,j,nPly);
					break;
				case B_BISHOP:
					Gen_BBishopMove(ChessBoard,i,j,nPly);
					break;
				case R_ELEPHANT:
				case B_ELEPHANT:
					Gen_ElephantMove(ChessBoard,i,j,nPly);
					break;
				case R_HORSE:
				case B_HORSE:
					Gen_HorseMove(ChessBoard,i,j,nPly);
					break;
				case R_CAR:
				case B_CAR:
					Gen_CarMove(ChessBoard,i,j,nPly);
					break;
				case R_PAWN:
					Gen_RPawnMove(ChessBoard,i,j,nPly);
					break;
				case B_PAWN:
					Gen_BRawnMove(ChessBoard,i,j,nPly);
					break;
				case B_CANON:
				case R_CANON:
					Gen_CanonMove(ChessBoard,i,j,nPly);
					break;
				default:
					break;
				}//end of switch
				//}
			}
		}
	return m_nMoveCount;

}
//i是纵坐标,j是横坐标
void SetChess::Gen_BRawnMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	int x,y;
	int nChessID;
	nChessID=ChessBoard[i][j];
	x=j;
	y=i+1;//向前
	if(y<10&&!lsSameSide(nChessID,ChessBoard[y][x]))
		AddMove(j,x,i,y,nPly);
	//是否过河
	if(i>4)
	{
		y=i;
		x=j+1;//右边
		if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
			AddMove(j,x,i,y,nPly);
		x=j-1;
		if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
			AddMove(j,x,i,y,nPly);
	}

}

void SetChess::Gen_RPawnMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	int x,y;
	int nChessID;
	nChessID=ChessBoard[i][j];
	x=j;
	y=i-1;//向前
	if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
		AddMove(j,x,i,y,nPly);
	//是否过河
	if(i<5)
	{
		y=i;
		x=j+1;//右边
		if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
			AddMove(j,x,i,y,nPly);
		x=j-1;
		if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
			AddMove(j,x,i,y,nPly);
	}

}

void SetChess::Gen_CarMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	int x,y;
	int nChessID;
	nChessID=ChessBoard[i][j];
	//插入右边可走位置
	x=j+1;
	y=i;
	while(x<9)
	{
		if(ChessBoard[y][x]==NOCHESS)
		AddMove(j,x,i,y,nPly);
		else
		{
			if(!lsSameSide(nChessID,ChessBoard[y][x]))
				AddMove(j,x,i,y,nPly);
			break;
		}
		x++;
	}
	x=j-1;
	y=i;
	while(x>=0)
	{
		if(ChessBoard[y][x]==NOCHESS)
		AddMove(j,x,i,y,nPly);
		else
		{
			if(!lsSameSide(nChessID,ChessBoard[y][x]))
				AddMove(j,x,i,y,nPly);
			break;
		}
		x--;
	}
	x=j;
	y=i+1;
	while(y<10)
	{
		if(ChessBoard[y][x]==NOCHESS)
		AddMove(j,x,i,y,nPly);
		else
		{
			if(!lsSameSide(nChessID,ChessBoard[y][x]))
				AddMove(j,x,i,y,nPly);
			break;
		}
		y++;
	}
	x=j;
	y=i-1;
	while(y>=0)
	{
		if(ChessBoard[y][x]==NOCHESS)
		AddMove(j,x,i,y,nPly);
		else
		{
			if(!lsSameSide(nChessID,ChessBoard[y][x]))
				AddMove(j,x,i,y,nPly);
			break;
		}
		y--;
	}


}

void SetChess::Gen_HorseMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	int x,y;
	//右二下一
	x=j+2;
	y=i+1;
	int ID;
	CPoint s,s1;
	s.x=j*35+20;s.y=i*35+20;
	ID=FindChess(s,NULL);
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j+2;
	y=i-1;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j-2;
	y=i+1;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j-2;
	y=i-1;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j+1;
	y=i+2;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j+1;
	y=i-2;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j-1;
	y=i-2;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j-1;
	y=i+2;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);

}

void SetChess::Gen_ElephantMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	int x,y;
	//插入右下方的有效走法
	x=j+2;
	y=i+2;
	int ID;
	CPoint s,s1;
	s.x=j*35+20;s.y=i*35+20;
	ID=FindChess(s,NULL);
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j+2;
	y=i-2;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j-2;
	y=i+2;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);
	x=j-2;
	y=i-2;
	s.x=x*35+20;s.y=y*35+20;
	if(x<9&&y<10&&CanMove(s,ID,true))
		AddMove(j,x,i,y,nPly);

}

void SetChess::Gen_BBishopMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	int x,y,ID;
	CPoint s,s1;
	s.x=j*35+20;s.y=i*35+20;
	ID=FindChess(s,NULL);
	for(y=0;y<3;y++)
	{
		for(x=3;x<6;x++)
		{
			s.x=x*35+20;s.y=y*35+20;
			if(CanMove(s,ID,true))
			{
				AddMove(j,x,i,y,nPly);
			}
		}
	}

}

void SetChess::Gen_RBishopMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	int x,y,ID;
	CPoint s,s1;
	s.x=j*35+20;s.y=i*35+20;
	ID=FindChess(s,NULL);
	for(y=7;y<10;y++)
	{
		for(x=3;x<6;x++)
		{
			s.x=x*35+20;s.y=y*35+20;
			if(CanMove(s,ID,true))
			{
				AddMove(j,x,i,y,nPly);
			}
		}
	}

}

void SetChess::Gen_KingMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	
	int x,y,ID;
	CPoint s,s1;
	s.x=j*35+20;s.y=i*35+20;
	ID=FindChess(s,NULL);
	for(y=0;y<3;y++)
	{
		for(x=3;x<6;x++)
		{
			s.x=x*35+20;s.y=y*35+20;
			if(CanMove(s,ID,true))
			{
				AddMove(j,x,i,y,nPly);
			}
		}
	}
	for(y=7;y<10;y++)
	{
		for(x=3;x<6;x++)
		{
			s.x=x*35+20;s.y=y*35+20;
			if(CanMove(s,ID,true))
				AddMove(j,x,i,y,nPly);
		}
	}
}

void SetChess::Gen_CanonMove(int ChessBoard[10][9], int i, int j, int nPly)
{
	int x,y;
	bool flag;
	int nChessID;
	nChessID=ChessBoard[i][j];
	//插入向右方向的可走步法
	x=j+1;
	y=i;
	flag=false;
	while(x<9)
	{
		if(ChessBoard[y][x]==NOCHESS)
		{
			if(!flag)//是否隔着棋子
				AddMove(j,x,i,y,nPly);
		}
		else
		{
			if(!flag)
				flag=true;
			else
			{
				if(!lsSameSide(nChessID,ChessBoard[y][x]))
					AddMove(j,x,i,y,nPly);
				break;
			}
		}
		x++;
	}
	x=j-1;
	y=i;
	flag=false;
	while(x>=0)
	{
		if(ChessBoard[y][x]==NOCHESS)
		{
			if(!flag)//是否隔着棋子
				AddMove(j,x,i,y,nPly);
		}
		else
		{
			if(!flag)
				flag=true;
			else
			{
				if(!lsSameSide(nChessID,ChessBoard[y][x]))
					AddMove(j,x,i,y,nPly);
				break;
			}
		}
		x--;
	}
	x=j;
	y=i+1;
	flag=false;
	while(y<10)
	{
		if(ChessBoard[y][x]==NOCHESS)
		{
			if(!flag)//是否隔着棋子
				AddMove(j,x,i,y,nPly);
		}
		else
		{
			if(!flag)
				flag=true;
			else
			{
				if(!lsSameSide(nChessID,ChessBoard[y][x]))
					AddMove(j,x,i,y,nPly);
				break;
			}
		}
		y++;
	}
	x=j;
	y=i-1;
	flag=false;
	while(y>=0)
	{
		if(ChessBoard[y][x]==NOCHESS)
		{
			if(!flag)//是否隔着棋子
				AddMove(j,x,i,y,nPly);
		}
		else
		{
			if(!flag)
				flag=true;
			else
			{
				if(!lsSameSide(nChessID,ChessBoard[y][x]))
					AddMove(j,x,i,y,nPly);
				break;
			}
		}
		y--;
	}
}

void SetChess::init()
{
	site[0].x=10+140;site[0].y=10;
	site[0].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BKING);
	site[1].x=10+105;site[1].y=10;
    site[1].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BSHOP);
	site[2].x=10+175;site[2].y=10;
	site[2].hIcon=site[1].hIcon;
	site[3].x=10+70;site[3].y=10;
	site[3].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BELEPHANT);
	site[4].x=10+210;site[4].y=10;
	site[4].hIcon=site[3].hIcon;
	site[5].x=10+35;site[5].y=10;
	site[5].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BHORSE);
	site[6].x=10+245;site[6].y=10;
	site[6].hIcon=site[5].hIcon;
	site[7].x=10;site[7].y=10;
	site[7].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BCAR);
	site[8].x=10+280;site[8].y=10;
	site[8].hIcon=site[7].hIcon;
	site[9].x=10+35;site[9].y=10+70;
	site[9].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BCANON);
	site[10].x=10+245;site[10].y=10+70;
	site[10].hIcon=site[9].hIcon;
	site[11].x=10;site[11].y=10+105;
	site[11].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BPAWN);
	site[12].x=10+70;site[12].y=10+105;
	site[12].hIcon=site[11].hIcon;
	site[13].x=10+140;site[13].y=10+105;
	site[13].hIcon=site[11].hIcon;
    site[14].x=10+210;site[14].y=10+105;
	site[14].hIcon=site[11].hIcon;
	site[15].x=10+280;site[15].y=10+105;
	site[15].hIcon=site[11].hIcon;
	///////////
	site[16].x=10+140;site[16].y=10+315;
	site[16].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RKING);
	site[17].x=10+105;site[17].y=10+315;
    site[17].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RSHOP);
	site[18].x=10+175;site[18].y=10+315;
	site[18].hIcon=site[17].hIcon;
	site[19].x=10+70;site[19].y=10+315;
	site[19].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RELEPHANT);
	site[20].x=10+210;site[20].y=10+315;
	site[20].hIcon=site[19].hIcon;
	site[21].x=10+35;site[21].y=10+315;
	site[21].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RHORSE);
	site[22].x=10+245;site[22].y=10+315;
	site[22].hIcon=site[21].hIcon;
	site[23].x=10;site[23].y=10+315;
	site[23].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RCAR);
	site[24].x=10+280;site[24].y=10+315;
	site[24].hIcon=site[23].hIcon;
	site[25].x=10+35;site[25].y=10+245;
	site[25].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RCANON);
	site[26].x=10+245;site[26].y=10+245;
	site[26].hIcon=site[25].hIcon;
	site[27].x=10;site[27].y=10+210;
	site[27].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RPAWN);
	site[28].x=10+70;site[28].y=10+210;
	site[28].hIcon=site[27].hIcon;
	site[29].x=10+140;site[29].y=10+210;
	site[29].hIcon=site[27].hIcon;
    site[30].x=10+210;site[30].y=10+210;
	site[30].hIcon=site[27].hIcon;
	site[31].x=10+280;site[31].y=10+210;
	site[31].hIcon=site[27].hIcon;
/////////
	site[32].x=10;site[32].y=10;
	site[32].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BEGIN);
	///////
	for(int i=0;i<10;i++)
	 for(int j=0;j<9;j++)
	board.ChessBoard[i][j]=ChessB[i][j];
	 for(int i1=0;i1<33;i1++)
		 site[i1].flag=true;

}

⌨️ 快捷键说明

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