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

📄 chessboard.java

📁 <Java编程精选集锦>随书源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		return true;
	}

	public boolean handleEvent(Event evt)
	{
		switch (evt.id)
		{
			case Event.MOUSE_DOWN : 
		  		if(!chessArray.change)
				{
				chessArray.information ("现在不能走棋;"+chessArray.information);
				return false;//如果此时不允许修改,则返回
				}
				if (judgePlace(evt.x,evt.y)&&evt.clickCount==1)
				{//如果点击点落在棋子范围内
				  if(chooseCh==false&&chessArray.chArray[numy][numx]!=0)
				  {//如果没有选中棋子,即处在选棋状态,并且点击点有棋子
					if(chessArray.chArray[numy][numx]<200)
					{
						chessArray.information ("请走您自己的子");
						return false;
					}
					chooseCh=true;
 					int ch=chessArray.chArray[numy][numx];
					numCh=judgeChoice(ch);
					numxBak=numx;
					numyBak=numy;
					chequer[numCh].chM(LcornerX+lengthX*numx-this.lengthMin/2,LcornerY+lengthY*numy-this.lengthMin/2,
										lengthMin-1,chString[ch/200][ch%100/10-1],chColor[ch/200],Color.lightGray);
					//将棋子颜色改为灰色说明此棋子已被选中
					chequer[numCh].repaint();
					chessArray.changeCount1 =numy*10+numx;
					return true;
				  }
				  if(chooseCh)
				  {//如果选中棋子,即处在走棋状态
					if(numxBak==numx&&numyBak==numy){//如果棋子的代码相同,则认为在同一位置点击两次,返回
						chooseCh=false;//变为允许选棋状态
						walkCh(false);
						return true;
					}
					if(!chRule())return false;//若不符合规则,返回
					walkCh(true);
					chooseCh=false;//变为允许选棋状态
					chessArray.change=false;//数据已改动,可以发送数据
					chessArray.readyOut=true;//数据已改动,可以发送数据
					chessArray.information("正在发送数据......");
					chessArray.changeCount2 =numy*10+numx;
					return true;
				  }
				}
				return true;
			default:
				return false;
		}	
	}
	public boolean chRule()
	{
		if(chessArray.chArray[numyBak][numxBak]/100==chessArray.chArray[numy][numx]/100&&chessArray.chArray[numy][numx]!=0)
	    {
			chessArray.information ("不能吃自家的子,请重走");
			return false;
		}
		int chCode=chessArray.chArray[numyBak][numxBak];
		if(chCode%200/10==1)
		{
			if(numx<3||numx>5)
			{
				chessArray.information ("帅不能出框,请重走");
				return false;
			}
			if(Math.abs (numx-numxBak)+Math.abs(numy-numyBak)!=1)
			{
				chessArray.information ("帅只能走一格,请重走");
				return false;
			}
		}
		
		
		if(chCode%200/10==2)
		{
			if(Math.abs (numx-numxBak)+Math.abs(numy-numyBak)==1)return true;
			if((numx-numxBak)*(numy-numyBak)!=0)
			{
				chessArray.information ("車走直路,请重走");
				return false;
			}
			int j;
			if(numy==numyBak)
			{
				j=Math.abs (numx-numxBak)/(numx-numxBak);
				for(int i=numxBak+j;i!=numx;i+=j)//横向判断
				{
					if(chessArray.chArray [numy][i]!=0)
					{
						chessArray.information ("車不能跃子,请重走");
						return false;
					}
				}
			}
			if(numx==numxBak)
			{
				j=Math.abs (numy-numyBak)/(numy-numyBak);
				for(int i=numyBak+j;i!=numy;i+=j)//纵向判断
				{
					if(chessArray.chArray [i][numx]!=0)
					{
						chessArray.information ("車不能跃子,请重走");
						return false;
					}
				}
			}
		}
		
		
		if(chCode%200/10==3)
		{
			if(Math.abs (numx-numxBak)+Math.abs(numy-numyBak)==1)return true;
			if((numx-numxBak)*(numy-numyBak)!=0)
			{
				chessArray.information ("炮走直路,请重走");
				return false;
			}
			if(chessArray.chArray [numy][numx]==0)
			{
			  if(numy==numyBak)
			  {
				int j=Math.abs (numx-numxBak)/(numx-numxBak);
				for(int i=numxBak+j;i!=numx;i+=j)//横向判断
				{
					if(chessArray.chArray [numy][i]!=0)
					{
						chessArray.information ("炮不吃子时不能跃子,请重走");
						return false;
					}
				}
			  }
			  if(numx==numxBak)
			  {
				int j=Math.abs (numy-numyBak)/(numy-numyBak);
				for(int i=numyBak+j;i!=numy;i+=j)//纵向判断
				{
					if(chessArray.chArray [i][numx]!=0)
					{
						chessArray.information ("炮不吃子时不能跃子,请重走");
						return false;
					}
				}
			  }
			}
			if(chessArray.chArray [numy][numx]!=0)
			{
			  if(numy==numyBak)
			  {
				if((numx-numxBak)>-3&&(numx-numxBak)<3)return true;
				int j=Math.abs (numx-numxBak)/(numx-numxBak);
				int k=0;
				for(int i=numxBak+j;i!=numx-j;i+=j)//横向判断
				{
					if(chessArray.chArray [numy][i]!=0)k++;
					if(k!=1&&i==numx-j)
					{
						chessArray.information ("炮吃子时能且只能跃一子,请重走");
						return false;
					}
				}
			  }
			  if(numx==numxBak)
			  {
				if((numy-numyBak)>-3&&(numy-numyBak)<3)return true;
				int j=Math.abs (numy-numyBak)/(numy-numyBak);
				int k=0;
				for(int i=numyBak+j;i!=numy-j;i+=j)//纵向判断
				{
					if(chessArray.chArray [i][numx]!=0)k++;
					if(k!=1&&i==numx-j)//
					{
						chessArray.information ("炮吃子时能且只能跃一子,请重走");
						return false;
					}
				}
			  }
			}
		}
		
		
		if(chCode%200/10==4)
		{
			if(Math.abs (numx-numxBak)*Math.abs(numy-numyBak)!=2)	
			{
				chessArray.information ("马走日字,请重走");
				return false;
			}
			if(Math.abs (numx-numxBak)==2&&chessArray.chArray [numyBak][numxBak+(numx-numxBak)/2]!=0)
			{
				chessArray.information ("别马腿,请重走");
				return false;
			}
			if(Math.abs (numy-numyBak)==2&&chessArray.chArray [numyBak+(numy-numyBak)/2][numxBak]!=0)
			{
				chessArray.information ("别马腿,请重走");
				return false;
			}
		}
		
		
		if(chCode%200/10==5)
		{
			if(numy<5)
			{
				chessArray.information ("相不能过界,请重走");
				return false;
			}
			if(Math.abs (numx-numxBak)!=2||Math.abs(numy-numyBak)!=2)	
			{
				chessArray.information ("相走田字,请重走");
				return false;
			}
			if(chessArray.chArray [numyBak+(numy-numyBak)/2][numxBak+(numx-numxBak)/2]!=0)
			{
				chessArray.information ("别相眼,请重走");
				return false;
			}
			
		}
		
		
		if(chCode%200/10==6)
		{
			if(numx<3||numx>5)
			{
				chessArray.information ("士不能出框,请重走");
				return false;
			}
			if(Math.abs (numx-numxBak)*Math.abs(numy-numyBak)!=1)	
			{
				chessArray.information ("士只能沿斜线走,请重走");
				return false;
			}
		}
		
		
		if(chCode%200/10==7)
		{
			if(numy>numyBak)
			{
				chessArray.information ("兵不能后退,请重走");
				return false;
			}
			if(Math.abs (numx-numxBak)+Math.abs(numy-numyBak)!=1)
			{
				chessArray.information ("兵只能走一格,请重走");
				return false;
			}
			if(numyBak>4&&numy==numyBak)
			{
				chessArray.information ("兵没过界不能横着走,请重走");
				return false;
			}
				
		}
		return true;
	}
}


⌨️ 快捷键说明

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