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

📄 chessman.cpp

📁 一个用MFC做的象棋游戏,可以联网双人对下,
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		else if (uRow-1>=uOldI&&uRow<=9&&uCol==uOldJ)
		{
			if (uRow==uOldI+1&&!theArr.Find(uRow,uCol))
			{

				ResetPos(uOldJ,uOldI);
				return true;
			}
			int nBetween=theArr.FindBetween(uCol,uOldI,uRow,0);
			if ((1==nBetween&&theArr.Find(uRow,uCol)==1)||(0==nBetween&&theArr.Find(uRow,uCol)==0))
			{
				ResetPos(uOldJ,uOldI);
				return true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}

		}
		else if (uCol+1<=uOldJ&&uCol>=0&&uRow==uOldI)
		{
			if (uCol==uOldJ-1&&!theArr.Find(uRow,uCol))
			{

				ResetPos(uOldJ,uOldI);
				return true;
			}
			int nBetween=theArr.FindBetween(uRow,uCol,uOldJ,1);
			if ((1==nBetween&&theArr.Find(uRow,uCol)==1)||(0==nBetween&&theArr.Find(uRow,uCol)==0))
			{
				ResetPos(uOldJ,uOldI);
				return true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uCol-1>=uOldJ&&uCol<=8&&uRow==uOldI)
		{
			if (uCol==uOldJ+1&&!theArr.Find(uRow,uCol))
			{

				ResetPos(uOldJ,uOldI);
				return true;
			}
			int nBetween=theArr.FindBetween(uRow,uOldJ,uCol,1);
			if ((1==nBetween&&theArr.Find(uRow,uCol)==1)||(0==nBetween&&theArr.Find(uRow,uCol)==0))
			{
				ResetPos(uOldJ,uOldI);
				return true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
	}
	ResetPos(uOldJ,uOldI);
    return false;
}
////////////////////////////
//////////////////////////////////////////////////////////////////////////
////////////////////////下面是将
bool CHead::IfNextPosLegal(POINT nextPos)
{
	UINT uOldI=uRow;
	UINT uOldJ=uCol;
	ResetPos(nextPos);
	if (m_uRoleID>16&&m_uRoleID<=32)//表示是A方的
	{
		if (uRow<=2&&uRow>=0&&uCol>=3&&uCol<=5)
		{
			if ((uRow==uOldI+1&&uCol==uOldJ)||(uRow==uOldI-1&&uCol==uOldJ))
			{
				ResetPos(uOldJ,uOldI);
				return true;
			}
			else if ((uCol==uOldJ+1&&uRow==uOldI)||(uCol==uOldJ-1&&uRow==uOldI))
			{
				ResetPos(uOldJ,uOldI);
				return true;
			}
			/*
			else if ((uRow==uOldI+1&&uCol==uOldJ+1)||(uRow==uOldI-1&&uCol==uOldJ-1)||(uRow==uOldI+1&&uCol==uOldJ-1)||(uRow==uOldI-1&&uCol==uOldJ+1))
						{
							ResetPos(uOldJ,uOldI);
							return false;
						}*/
			
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else
		{
			ResetPos(uOldJ,uOldI);
			return false;
		}
	} 
	else if(m_uRoleID<=16)//表示是B方的
	{
		if (uRow<=9&&uRow>=7&&uCol>=3&&uCol<=5)
		{
			if ((uRow==uOldI+1&&uCol==uOldJ)||(uRow==uOldI-1&&uCol==uOldJ))
			{
				ResetPos(uOldJ,uOldI);
				return true;
			}
			else if ((uCol==uOldJ+1&&uRow==uOldI)||(uCol==uOldJ-1&&uRow==uOldI))
			{
				ResetPos(uOldJ,uOldI);
				return true;
			}
			/*
			else if ((uRow=uOldI+1&&uCol==uOldJ+1)||(uRow=uOldI-1&&uCol==uOldJ-1)||(uRow=uOldI+1&&uCol==uOldJ-1)||(uRow=uOldI-1&&uCol==uOldJ+1))
						{
							ResetPos(uOldJ,uOldI);
							return false;
						}*/
			
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else
		{
			ResetPos(uOldJ,uOldI);
			return false;
		}
	}

	ResetPos(uOldJ,uOldI);
	return false;
}

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
/////////////下面是车
bool CVehicle::IfNextPosLegal(POINT nextPos)
{
	UINT uOldI=uRow,uOldJ=uCol; //保存原有位置
	ResetPos(nextPos); 
	if (uRow>9||uCol>8||uRow<0||uCol<0)  //越界
	{
		ResetPos(uOldJ,uOldI);
		return false;
	}
	else if (uOldI==uRow||uOldJ==uCol)  //可能是自己
	{
		// 这里没有讨论前面是否有棋子
       /*
        if(m_uRoleID<=16)//表示是A方的
       		{*/
       
             if (uRow<uOldI&&uCol==uOldJ)
             {
				 if (uRow==uOldI-1)
				 {
					 ResetPos(uOldJ,uOldI);
					 return true;
				 }
				 if (!theArr.FindBetween(uCol,uRow,uOldI,0))
				 {
					 ResetPos(uOldJ,uOldI);
					 return true;
				 }
				 else
				 {
					 ResetPos(uOldJ,uOldI);
					 return false;
				 }
             }
			 else if (uRow==uOldI&&uCol<uOldJ)
			 {
				 if (uCol==uOldJ-1)
				 {
					 ResetPos(uOldJ,uOldI);
					 return true;
				 }
				 if (!theArr.FindBetween(uRow,uCol,uOldJ,1))
				 {
					 ResetPos(uOldJ,uOldI);
					 return true;
				 }
				 else
				 {
					 ResetPos(uOldJ,uOldI);
					 return false;
				 }
				
			 }
			 else if (uRow>uOldI&&uCol==uOldJ)
			 {
				 if (uRow==uOldI+1)
				 {
					 ResetPos(uOldJ,uOldI);
					 return true;
				 }
				 if (!theArr.FindBetween(uCol,uOldI,uRow,0))
				 {
					 ResetPos(uOldJ,uOldI);
					 return true;
				 }
				 else
				 {
					 ResetPos(uOldJ,uOldI);
					 return false;
				 }
			 }
			 else if (uRow==uOldI&&uCol>uOldJ)
			 {
				 if (uCol==uOldJ+1)
				 {
					 ResetPos(uOldJ,uOldI);
					 return true;
				 }
				 if (!theArr.FindBetween(uRow,uOldJ,uCol,1))
				 {
					 ResetPos(uOldJ,uOldI);
					 return true;
				 }
				 else
				 {
					 ResetPos(uOldJ,uOldI);
					 return false;
				 }
			 }
			 else
			 {
				 ResetPos(uOldJ,uOldI);
				 return false;
			 }
		//}
		ResetPos(uOldJ,uOldI);
		return false;
	}
	else 
	{
		ResetPos(uOldJ,uOldI);
		return false;
	}
}

///////////////////////////////
//////////////////////////////////////////////////////////////////////////
////下,面是仕

bool COfficial::IfNextPosLegal(POINT nextPos)
{
	UINT uOldI= uRow;
	UINT uOldJ =uCol;
	ResetPos(nextPos);
	if (m_uRoleID>16&&m_uRoleID<=32)  //是红方的士
	{
		if (uOldI==0&&uOldJ==3)
		{
			if ((uRow==uOldI+1)&&(uCol==uOldJ+1))
			{
				//AfxMessageBox(L"DownRight!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uOldI==0&&uOldJ==5)
		{
			if ((uRow==uOldI+1)&&(uCol==uOldJ-1))
			{
				//AfxMessageBox(L"DownLeft!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uOldI==2&&uOldJ==3)
		{
			if ((uRow==uOldI-1)&&(uCol==uOldJ+1))
			{
				//AfxMessageBox(L"UpRight!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uOldI==2&&uOldJ==5)
		{
			if ((uRow==uOldI-1)&&(uCol==uOldJ-1))
			{
				//AfxMessageBox(L"UpLeft!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uOldI==1&&uOldJ==4)
		{
			if ((uRow==uOldI+1)&&(uCol==uOldJ+1))
			{
				//AfxMessageBox(L"DownRight!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else if ((uRow==uOldI+1)&&(uCol==uOldJ-1))
			{
				//AfxMessageBox(L"DownLeft!");
				ResetPos(uOldJ,uOldI);
				return true;
			}
			else if ((uRow==uOldI-1)&&(uCol==uOldJ+1))
			{
				//AfxMessageBox(L"UpRight!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else if ((uRow==uOldI-1)&&(uCol==uOldJ-1))
			{
				//AfxMessageBox(L"UpLeft!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				//AfxMessageBox(L"ErrorStep!");
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else
		{
			ResetPos(uOldJ,uOldI);
			return false;
		}
	} 
	else if (m_uRoleID<=16) ///////如果是黒士
	{
		if (uOldI==7&&uOldJ==3)
		{
			if ((uRow==uOldI+1)&&(uCol==uOldJ+1))
			{
				//AfxMessageBox(L"DownRight!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uOldI==7&&uOldJ==5)
		{
			if ((uRow==uOldI+1)&&(uCol==uOldJ-1))
			{
				//AfxMessageBox(L"DownLeft!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uOldI==9&&uOldJ==3)
		{
			if ((uRow==uOldI-1)&&(uCol==uOldJ+1))
			{
				//AfxMessageBox(L"UpRight!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uOldI==9&&uOldJ==5)
		{
			if ((uRow==uOldI-1)&&(uCol==uOldJ-1))
			{
				//AfxMessageBox(L"UpLeft!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else if (uOldI==8&&uOldJ==4)
		{
			if ((uRow==uOldI+1)&&(uCol==uOldJ+1))
			{
				//AfxMessageBox(L"DownRight!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else if ((uRow==uOldI+1)&&(uCol==uOldJ-1))
			{
				//AfxMessageBox(L"DownLeft!");
				ResetPos(uOldJ,uOldI);
				return true;
			}
			else if ((uRow==uOldI-1)&&(uCol==uOldJ+1))
			{
				//AfxMessageBox(L"UpRight!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else if ((uRow==uOldI-1)&&(uCol==uOldJ-1))
			{
				//AfxMessageBox(L"UpLeft!");
				ResetPos(uOldJ,uOldI);
				return  true;
			}
			else
			{
				//AfxMessageBox(L"ErrorStep!");
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else
		{
			ResetPos(uOldJ,uOldI);
			return false;
		}
	}

	else
	{
		ResetPos(uOldJ,uOldI);
		return false;
	}
}

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
////////下面是象
bool CXiang::IfNextPosLegal(POINT nextPos)
{
	UINT uOldI=uRow;
	UINT uOldJ=uCol;
	ResetPos(nextPos);
	if (m_uRoleID>16&&m_uRoleID<=32)//表示A方的
	{
		if (uRow<=4)//象不允许过河
		{
			if (uRow==uOldI+2&&uCol==uOldJ+2)
			{
				if (!theArr.Find(uOldI+1,uOldJ+1))//(uOldI+1,uOldJ+1)这个点当中没有棋子
				{
					ResetPos(uOldJ,uOldI);
					return true;
				}
				else
				{
					ResetPos(uOldJ,uOldI);
					return false;
				}
			}
			else if (uRow==uOldI-2&&uCol==uOldJ-2)
			{
				if (!theArr.Find(uOldI-1,uOldJ-1))//(uOldI-1,uOldJ-1)这个点当中没有棋子
				{
					ResetPos(uOldJ,uOldI);
					return true;
				}
				else
				{
					ResetPos(uOldJ,uOldI);
					return false;
				}
			}
			else if (uRow==uOldI+2&&uCol==uOldJ-2)
			{
				if (!theArr.Find(uOldI+1,uOldJ-1))//(uOldI+1,uOldJ-1)这个点当中没有棋子
				{
					ResetPos(uOldJ,uOldI);
					return true;
				}
				else
				{
					ResetPos(uOldJ,uOldI);
					return false;
				}
			}
			else if (uRow==uOldI-2&&uCol==uOldJ+2)
			{
				if (!theArr.Find(uOldI-1,uOldJ+1))//(uOldI-1,uOldJ+1)这个点当中没有棋子
				{
					ResetPos(uOldJ,uOldI);
					return true;
				}
				else
				{
					ResetPos(uOldJ,uOldI);
					return false;
				}
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else
		{
			ResetPos(uOldJ,uOldI);
			return false;
		}
	} 
	else if(m_uRoleID<=16)//表示B方的
	{
		if (uRow>=5)//象不允许过河
		{
			if (uRow==uOldI+2&&uCol==uOldJ+2)
			{
				if (!theArr.Find(uOldI+1,uOldJ+1))//(uOldI+1,uOldJ+1)这个点当中没有棋子
				{
					ResetPos(uOldJ,uOldI);
					return true;
				}
				else
				{
					ResetPos(uOldJ,uOldI);
					return false;
				}
			}
			else if (uRow==uOldI-2&&uCol==uOldJ-2)
			{
				if (!theArr.Find(uOldI-1,uOldJ-1))//(uOldI-1,uOldJ-1)这个点当中没有棋子
				{
					ResetPos(uOldJ,uOldI);
					return true;
				}
				else
				{
					ResetPos(uOldJ,uOldI);
					return false;
				}
			}
			else if (uRow==uOldI+2&&uCol==uOldJ-2)
			{
				if (!theArr.Find(uOldI+1,uOldJ-1))//(uOldI+1,uOldJ-1)这个点当中没有棋子
				{
					ResetPos(uOldJ,uOldI);
					return true;
				}
				else
				{
					ResetPos(uOldJ,uOldI);
					return false;
				}
			}
			else if (uRow==uOldI-2&&uCol==uOldJ+2)
			{
				if (!theArr.Find(uOldI-1,uOldJ+1))//(uOldI-1,uOldJ+1)这个点当中没有棋子
				{
					ResetPos(uOldJ,uOldI);
					return true;
				}
				else
				{
					ResetPos(uOldJ,uOldI);
					return false;
				}
			}
			else
			{
				ResetPos(uOldJ,uOldI);
				return false;
			}
		}
		else
		{
			ResetPos(uOldJ,uOldI);
			return false;
		}
	}
	ResetPos(uOldJ,uOldI);
	return false;
}

⌨️ 快捷键说明

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