chinesechess.java

来自「可联机对战的中国象棋java源代码 包括服务器文件和客户端文件」· Java 代码 · 共 1,165 行 · 第 1/4 页

JAVA
1,165
字号
	    	 if(host)player[0]=1;else player[0]=3;
}
public static void save()//储存已走的部分
{
	
	for(int i=0;i<=31;i++)
	{
		savechessman[num%10][2*i]=chessman[i].getX();savechessman[num%10][2*i+1]=chessman[i].getY();
	}
	num++;
}
public static void reputsend()//发送请求方的悔棋方法
{ 
	if(player[0]==3||player[0]==2)
	{
		if(num==1)
		{
			putchessman();player[0]=3-player[0];selected.setVisible(false);recent.setVisible(false);num--;
		if(player[0]==3)
		{blackready.setVisible(true);redready.setVisible(false);}else{blackready.setVisible(false);redready.setVisible(true);}
		}
		if(num>1)
		{
	for(int i=0;i<=31;i++)
	{ 
		if(savechessman[(num-2)%10][2*i]!=0)
		{
			chessman[i].setBounds(savechessman[(num-2)%10][2*i],savechessman[(num-2)%10][2*i+1],40,40);chessman[i].setVisible(true);
		}
	}
	num--;selected.setVisible(false);player[0]=3-player[0];recent.setVisible(false);
	if(!host){blackready.setVisible(true);redready.setVisible(false);}else{blackready.setVisible(false);redready.setVisible(true);}
  }
  }
  else
  { 
  	if(num==2){putchessman();selected.setVisible(false);recent.setVisible(false);num=num-2;}
  	if(num>2)
  	{
  	for(int i=0;i<=31;i++)
	{ 
		if(savechessman[(num-3)%10][2*i]!=0)
		{
			chessman[i].setBounds(savechessman[(num-3)%10][2*i],savechessman[(num-3)%10][2*i+1],40,40);chessman[i].setVisible(true);
		}
	}
	num=num-2;selected.setVisible(false);recent.setVisible(false);
  }
  }
}
public static void reputreceive()//接受请求方的悔棋方法
{ 
	if(player[0]==1||player[0]==0)
	{
		if(num==1){putchessman();player[0]=3-player[0];selected.setVisible(false);recent.setVisible(false);num--;
			if(!host)
			{blackready.setVisible(false);redready.setVisible(true);}else{blackready.setVisible(true);redready.setVisible(false);}}
		if(num>1)
		{
	for(int i=0;i<=31;i++)
	{ 
		if(savechessman[(num-2)%10][2*i]!=0)
		{
			chessman[i].setBounds(savechessman[(num-2)%10][2*i],savechessman[(num-2)%10][2*i+1],40,40);chessman[i].setVisible(true);
		}
		
	}
	num--;player[0]=3-player[0];selected.setVisible(false);recent.setVisible(false);
	if(!host)
	{blackready.setVisible(false);redready.setVisible(true);}
	else{blackready.setVisible(true);redready.setVisible(false);}
  }
  }
  else
  {
  	if(num==2){putchessman();selected.setVisible(false);recent.setVisible(false);num=num-2;}
  	if(num>2)
  	{
  	for(int i=0;i<=31;i++)
	{ 
		if(savechessman[(num-3)%10][2*i]!=0)
		{
			chessman[i].setBounds(savechessman[(num-3)%10][2*i],savechessman[(num-3)%10][2*i+1],40,40);chessman[i].setVisible(true);
			recent.setVisible(false);
		}
	}
	num=num-2;selected.setVisible(false);recent.setVisible(false);
  }
}
}
public static void main(String args[])
{
new ChineseChess();
}
}
class rule//规则类
{
	//车规则开始 
	public static void vehiclemove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
	{
		int Xmin=5,Xmax=485,Ymin=5,Ymax=545,j,k;
		for(j=0;j<=31;j++)//获得移动范围
		{ 
			if(chessman[j].getX()>Xmin&&chessman[j].getX()<current.getX()&&chessman[j].getY()==current.getY())
			Xmin=chessman[j].getX();
			if(chessman[j].getX()<Xmax&&chessman[j].getX()>current.getX()&&chessman[j].getY()==current.getY())
			Xmax=chessman[j].getX();
			if(chessman[j].getY()>Ymin&&chessman[j].getY()<current.getY()&&chessman[j].getX()==current.getX())
			Ymin=chessman[j].getY();
			if(chessman[j].getY()<Ymax&&chessman[j].getY()>current.getY()&&chessman[j].getX()==current.getX())
			Ymax=chessman[j].getY();
		}
		if(e.getSource().equals(background))//点击到棋盘移动
	  {
		    selected.setVisible(false);
		    for(int X=5;X<620;X+=60)
		    for(int Y=5;Y<620;Y+=60)
				{
					if(Math.abs(X+20-e.getX())<30&&Math.abs(Y+20-e.getY())<30&&((X==current.getX()&&Y<=Ymax&&Y>=Ymin)||(Y==current.getY()&&X<=Xmax&&X>=Xmin)))
					{
						current.setBounds(X,Y,40,40);
						clicked[0]=true;
						player[0]=3-player[0];
					  break;
					}
				}
	  }
	 for(j=0;j<=31;j++)//吃掉被单击的棋子
	 {
		if(e.getSource().equals(chessman[j])&&((j<=15&&i>=16)||(j>=16&&i<=15))&&((chessman[j].getX()==current.getX()&&chessman[j].getY()<=Ymax&&chessman[j].getY()>=Ymin)||(chessman[j].getY()==current.getY()&&chessman[j].getX()<=Xmax&&chessman[j].getX()>=Xmin)))//点击到棋子
			{ 
				selected.setVisible(false);
        current.setBounds(chessman[j].getX(),chessman[j].getY(),40,40);
        clicked[0]=true;
        chessman[j].setVisible(false);
        chessman[j].setBounds(0,0,0,0);
        player[0]=3-player[0];
        break;
			}
	 }
	 clicked[0]=true;
	 selected.setVisible(false);
   }//车规则结束
   //马规则开始
	 public static void horsemove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
	 { 
		int j;
		boolean north=true,south=true,east=true,west=true;
		for(j=0;j<=31;j++)//确认是否蹩脚
		{
			if(chessman[j].getX()==current.getX()&&chessman[j].getY()==current.getY()-60)
			north=false;
		  if(chessman[j].getX()==current.getX()&&chessman[j].getY()==current.getY()+60)
			south=false;
	    if(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()-60)
			west=false;
      if(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()+60)
			east=false;
    }
    if(e.getSource().equals(background))//走日字
    {
    	  selected.setVisible(false);
		    for(int X=5;X<620;X+=60)
		    for(int Y=5;Y<620;Y+=60)
				{
					if(Math.abs(X+20-e.getX())<30&&Math.abs(Y+20-e.getY())<30&&(((X==current.getX()-60||X==current.getX()+60)&&Y==current.getY()-120&&north)||((X==current.getX()-60||X==current.getX()+60)&&Y==current.getY()+120&&south)||((Y==current.getY()-60||Y==current.getY()+60)&&X==current.getX()-120&&west)||((Y==current.getY()-60||Y==current.getY()+60)&&X==current.getX()+120&&east)))
					{
						current.setBounds(X,Y,40,40);
						clicked[0]=true;
						player[0]=3-player[0];
					  break;
					}
				}
	  }
	  for(j=0;j<=31;j++)//吃掉被单击的棋子
	  {
		if(e.getSource().equals(chessman[j])&&((j<=15&&i>=16)||(j>=16&&i<=15))&&(((chessman[j].getX()==current.getX()-60||chessman[j].getX()==current.getX()+60)&&chessman[j].getY()==current.getY()-120&&north)||((chessman[j].getX()==current.getX()-60||chessman[j].getX()==current.getX()+60)&&chessman[j].getY()==current.getY()+120&&south)||((chessman[j].getY()==current.getY()-60||chessman[j].getY()==current.getY()+60)&&chessman[j].getX()==current.getX()-120&&west)||((chessman[j].getY()==current.getY()-60||chessman[j].getY()==current.getY()+60)&&chessman[j].getX()==current.getX()+120&&east)))//点击到棋子
			{ 
				selected.setVisible(false);
        current.setBounds(chessman[j].getX(),chessman[j].getY(),40,40);
        clicked[0]=true;
        chessman[j].setVisible(false);
        chessman[j].setBounds(0,0,0,0);
        player[0]=3-player[0];
        break;
			}
	  }
	  clicked[0]=true;
	  selected.setVisible(false);
    }//马规则结束
    //相规则开始
    public static void ministermove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
    {
    	int j;
    	boolean leftup=true,leftdown=true,rightup=true,rightdown=true;
    	for(j=0;j<=31;j++)//确认是否蹩脚
		  {
			if(chessman[j].getX()==current.getX()-60&&chessman[j].getY()==current.getY()-60)
			leftup=false;
		  if(chessman[j].getX()==current.getX()-60&&chessman[j].getY()==current.getY()+60)
			leftdown=false;
	    if(chessman[j].getY()==current.getY()+60&&chessman[j].getX()==current.getX()+60)
			rightdown=false;
      if(chessman[j].getY()==current.getY()-60&&chessman[j].getX()==current.getX()+60)
			rightup=false;
      }
      if(e.getSource().equals(background))//走田字
      {
    	  selected.setVisible(false);
		    for(int X=5;X<620;X+=60)
		    for(int Y=5;Y<620;Y+=60)
				{
					if(Math.abs(X+20-e.getX())<30&&Math.abs(Y+20-e.getY())<30&&((X==current.getX()-120&&Y==current.getY()-120&&leftup)||(X==current.getX()-120&&Y==current.getY()+120&&leftdown)||(Y==current.getY()-120&&X==current.getX()+120&&rightup)||(Y==current.getY()+120&&X==current.getX()+120&&rightdown))&&((Y<=245&&i<=15)||(Y>=305&&i>=16)))
					{
						current.setBounds(X,Y,40,40);
						clicked[0]=true;
						player[0]=3-player[0];
					  break;
					}
				}
	     }
	     for(j=0;j<=31;j++)//吃掉被单击的棋子
	     {
		   if(e.getSource().equals(chessman[j])&&((j<=15&&i>=16)||(j>=16&&i<=15))&&((chessman[j].getX()==current.getX()-120&&chessman[j].getY()==current.getY()-120&&leftup)||(chessman[j].getX()==current.getX()-120&&chessman[j].getY()==current.getY()+120&&leftdown)||(chessman[j].getY()==current.getY()-120&&chessman[j].getX()==current.getX()+120&&rightup)||(chessman[j].getY()==current.getY()+120&&chessman[j].getX()==current.getX()+120&&rightdown))&&((chessman[j].getY()<=245&&i<=15)||(chessman[j].getY()>=305&&i>=16)))//点击到棋子
			 { 
				selected.setVisible(false);
        current.setBounds(chessman[j].getX(),chessman[j].getY(),40,40);
        clicked[0]=true;
        chessman[j].setVisible(false);
        chessman[j].setBounds(0,0,0,0);
        player[0]=3-player[0];
        break;
			 }
	     }
	     clicked[0]=true;
	     selected.setVisible(false);
	    }//相规则结束
	    //士规则开始
	    public static void bodyguardmove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
	    {
	    	int j;
	    	if(e.getSource().equals(background))//移动
        {
    	  selected.setVisible(false);
		    for(int X=5;X<620;X+=60)
		    for(int Y=5;Y<620;Y+=60)
				{
					if(Math.abs(X+20-e.getX())<30&&Math.abs(Y+20-e.getY())<30&&((X==current.getX()-60&&Y==current.getY()-60)||(X==current.getX()-60&&Y==current.getY()+60)||(Y==current.getY()-60&&X==current.getX()+60)||(Y==current.getY()+60&&X==current.getX()+60))&&((Y<=125&&X<=305&&X>=185&&i<=15)||(Y>=425&&X<=305&&X>=185&&i>=16)))
					{
						current.setBounds(X,Y,40,40);
						clicked[0]=true;
						player[0]=3-player[0];
					  break;
					}
				}
	      }
	     for(j=0;j<=31;j++)//吃掉被单击的棋子
	     {
		   if(e.getSource().equals(chessman[j])&&((j<=15&&i>=16)||(j>=16&&i<=15))&&((chessman[j].getX()==current.getX()-60&&chessman[j].getY()==current.getY()-60)||(chessman[j].getX()==current.getX()-60&&chessman[j].getY()==current.getY()+60)||(chessman[j].getY()==current.getY()-60&&chessman[j].getX()==current.getX()+60)||(chessman[j].getY()==current.getY()+60&&chessman[j].getX()==current.getX()+60))&&((chessman[j].getY()<=125&&chessman[j].getX()<=305&&chessman[j].getX()>=185&&i<=15)||(chessman[j].getY()>=425&&chessman[j].getX()<=305&&chessman[j].getX()>=185&&i>=16)))//点击到棋子
			 { 
				selected.setVisible(false);
        current.setBounds(chessman[j].getX(),chessman[j].getY(),40,40);
        clicked[0]=true;
        chessman[j].setVisible(false);
        chessman[j].setBounds(0,0,0,0);
        player[0]=3-player[0];
        break;
			 }
	     }
	     clicked[0]=true;
	     selected.setVisible(false);
	    }//士规则结束
	    //将规则开始
	    public static void bodymove(JLabel current,JLabel chessman[],JLabel background,int i,MouseEvent e,JLabel selected,boolean clicked[],int player[])
	    { 
	    	int j,max,min;
	    	if(current.getY()>chessman[32-i].getY())
	    	{
	    		max=current.getY();min=chessman[32-i].getY();
	    	}
	    	else
	    	{
	    		max=chessman[32-i].getY();min=current.getY();
	    	}
	    	boolean face=true;//将帅是否相对
	    	if(current.getX()!=chessman[32-i].getX())
	    	face=false;
	    	for(j=0;j<=31;j++)
	    	{
	    		if(chessman[j].getX()==current.getX()&&chessman[j].getY()>min&&chessman[j].getY()<max)
	    		face=false;
	    	}

⌨️ 快捷键说明

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