chinesechess.java

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

JAVA
1,165
字号
	    	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==current.getY()-60)||(X==current.getX()&&Y==current.getY()+60)||(Y==current.getY()&&X==current.getX()+60)||(Y==current.getY()&&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()&&chessman[j].getY()==current.getY()-60)||(chessman[j].getX()==current.getX()&&chessman[j].getY()==current.getY()+60)||(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()+60)||(chessman[j].getY()==current.getY()&&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))||(j==32-i&&face)))//点击到棋子
			 { 
				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 cannonmove(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,Xmaxnext=485,Ymaxnext=545,Xminnext=5,Yminnext=5,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();
		 }
		 for(j=0;j<=31;j++)
		 {
		 	if(chessman[j].getX()>Xminnext&&chessman[j].getX()<Xmin&&chessman[j].getY()==current.getY())
			Xminnext=chessman[j].getX();
			if(chessman[j].getX()<Xmaxnext&&chessman[j].getX()>Xmax&&chessman[j].getY()==current.getY())
			Xmaxnext=chessman[j].getX();
			if(chessman[j].getY()>Yminnext&&chessman[j].getY()<Ymin&&chessman[j].getX()==current.getX())
			Yminnext=chessman[j].getY();
			if(chessman[j].getY()<Ymaxnext&&chessman[j].getY()>Ymax&&chessman[j].getX()==current.getX())
			Ymaxnext=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()==Ymaxnext||chessman[j].getY()==Yminnext))||(chessman[j].getY()==current.getY()&&(chessman[j].getX()==Xmaxnext||chessman[j].getX()==Xminnext))))//点击到棋子
			{ 
				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 soldiermove(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()&&Y==current.getY()-60&&i>=16&&Y>=305)||(X==current.getX()&&Y==current.getY()+60&&i<=15&&Y<=245)||(((Y==current.getY()&&X==current.getX()+60)||(Y==current.getY()&&X==current.getX()-60)||(Y==current.getY()-60&&X==current.getX()))&&i>=16&&Y<=245)||(((Y==current.getY()&&X==current.getX()+60)||(Y==current.getY()&&X==current.getX()-60)||(Y==current.getY()+60&&X==current.getX()))&&i<=15&&Y>=305)))
					{
						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()==current.getY()-60&&i>=16&&chessman[j].getY()>=305)||(chessman[j].getX()==current.getX()&&chessman[j].getY()==current.getY()+60&&i<=15&&chessman[j].getY()<=245)||(((chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()+60)||(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()-60)||(chessman[j].getY()==current.getY()-60&&chessman[j].getX()==current.getX()))&&i>=16&&chessman[j].getY()<=245)||(((chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()+60)||(chessman[j].getY()==current.getY()&&chessman[j].getX()==current.getX()-60)||(chessman[j].getY()==current.getY()+60&&chessman[j].getX()==current.getX()))&&i<=15&&chessman[j].getY()>=305))))//点击到棋子
			 { 
				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 boolean winlost(JLabel chessman[])//判断输赢
	    {
	    	 if(chessman[8].getX()==0||chessman[24].getX()==0)
         return false;
         else
         return true;
	    }
}
class serverbuildThread extends Thread//建立主机线程类 
{   
	  public serverbuildThread() 
	 {}
	 public void run()
	 {
	 	try{
	 		ChineseChess.server=new ServerSocket(5000);
	 		ChineseChess.s=ChineseChess.server.accept();
	 		  ChineseChess.built[0]=false;
      ChineseChess.info.append("已有玩家进入,请按开始键准备\n");
      ChineseChess.putchessman();
       }
       catch(Exception e)
       {ChineseChess.info.append("已断开连接\n");e.printStackTrace();ChineseChess.built[0]=true;}
       }
}
class clientjoinThread extends Thread//客户端加入线程类
{
	 public clientjoinThread()
	 {}
	 public void run()
	 {
	 try{
	 	String a=JOptionPane.showInputDialog(null,"请输入主机名称","localhost");
	 	ChineseChess.info.setText("正在寻找主机\n");
	 	ChineseChess.s=new Socket(a,5000);
	 	ChineseChess.info.append("已加入主机,你将执黑棋,请按开始键准备\n");
	 	ChineseChess.putchessman();
	 	ChineseChess.built[0]=false;
	    }
	    catch(Exception e)
      {ChineseChess.info.append("未找到主机,已断开连接\n");e.printStackTrace();ChineseChess.built[0]=true;}
   }
}
class receiveThread extends Thread//接受信息线程类
  {
  	 public receiveThread()
  	 {}
     public void run()
     {
     	while(true)
     	while(!ChineseChess.built[0])
     	{
   	 try{
   		int netX,netY,netman,j;
   		ChineseChess.m_input=new DataInputStream(ChineseChess.s.getInputStream());
   		netman=ChineseChess.m_input.readInt();netX=ChineseChess.m_input.readInt();netY=ChineseChess.m_input.readInt();//读取信息前3位整数
   		if(netman==800){ChineseChess.readythere=true;
                    if(ChineseChess.player[0]==1)ChineseChess.blackready.setVisible(true);
                    else ChineseChess.redready.setVisible(true);
                    if(ChineseChess.readyhere&&ChineseChess.readythere)
                     {
                     	if(ChineseChess.sound)ChineseChess.begin.play();
                     	ChineseChess.blackready.setVisible(false);
                    	ChineseChess.matchbegin.setVisible(true);
                    	ChineseChess.peaceable.setVisible(true);
                    	ChineseChess.peaceunable.setVisible(false);
                    	ChineseChess.giveinready.setVisible(true);
                    	ChineseChess.givein.setVisible(false);
                    	ChineseChess.regret.setVisible(false);
                    	ChineseChess.regretready.setVisible(true);
                    	}
                    	}
      else if(netman==795)//求和代码
      {
      	j=JOptionPane.showConfirmDialog(null,"对方发出求和请求,是否接受","求和",JOptionPane.YES_NO_OPTION);
      	if(j==0)
      	{ChineseChess.endgame();ChineseChess.m_output=new DataOutputStream(ChineseChess.s.getOutputStream());
      		ChineseChess.m_output.writeInt(796);ChineseChess.m_output.writeInt(796);ChineseChess.m_output.writeInt(796);
      	}
      	else
      	{ 
      		ChineseChess.m_output=new DataOutputStream(ChineseChess.s.getOutputStream());
      		ChineseChess.m_output.writeInt(797);ChineseChess.m_output.writeInt(797);ChineseChess.m_output.writeInt(797);
      	}
      }
      else if(netman==796)//接受求和代码
      {
      	JOptionPane.showMessageDialog(null,"对方已接受求和请求,比赛以平局结束");ChineseChess.endgame();
      }
      else if(netman==797)//拒绝求和代码
      {
      	JOptionPane.showMessageDialog(null,"对方拒绝了求和请求");ChineseChess.peaceable.setVisible(true);
      	ChineseChess.peaceunable.setVisible(false);
      	ChineseChess.giveinready.setVisible(true);
		    ChineseChess.givein.setVisible(false);
      }
      else if(netman==798)//接受认输代码
      {
      	JOptionPane.showMessageDialog(null,"恭喜您获胜了");ChineseChess.gamewin.play();ChineseChess.endgame();
      }
      else if(netman==799)//接收悔棋信息代码
      {
      	j=JOptionPane.showConfirmDialog(null,"对方发出悔棋请求,是否接受","悔棋",JOptionPane.YES_NO_OPTION);
      	if(j==0)
      	{
      		ChineseChess.reputreceive();
      		ChineseChess.m_output=new DataOutputStream(ChineseChess.s.getOutputStream());
      		ChineseChess.m_output.writeInt(794);ChineseChess.m_output.writeInt(794);ChineseChess.m_output.writeInt(794);
      	}
      	else
      	{
      	ChineseChess.m_output=new DataOutputStream(ChineseChess.s.getOutputStream());
      	ChineseChess.m_output.writeInt(802);ChineseChess.m_output.writeInt(802);ChineseChess.m_output.writeInt(802);
        }	
      }
      else if(netman==794)//接受悔棋代码
      {
      	JOptionPane.showMessageDialog(null,"对方接受悔棋请求");
      	ChineseChess.reputsend();
      	ChineseChess.regretready.setVisible(true);
      	ChineseChess.regret.setVisible(false);
      }
      else if(netman==802)//拒绝悔棋代码
      {
      	JOptionPane.showMessageDialog(null,"对方拒绝了悔棋请求");      	ChineseChess.regretready.setVisible(true);
      	ChineseChess.regret.setVisible(false);
      }
      else if(netman==911)//聊天代码
      {
      	try{ChineseChess.chart.append(ChineseChess.m_input.readUTF()+"\n");}
      	catch(Exception e){}
      }//走棋代码
   		else{
   		if(ChineseChess.player[0]==3){ChineseChess.redready.setVisible(false);ChineseChess.blackready.setVisible(true);}else {ChineseChess.redready.setVisible(true);ChineseChess.blackready.setVisible(false);}
   		ChineseChess.recent.setBounds(ChineseChess.chessman[netman].getX(),ChineseChess.chessman[netman].getY(),41,41);ChineseChess.recent.setVisible(true);
   		for(j=0;j<=31;j++)
      {
    	if(ChineseChess.chessman[j].getX()==netX&&ChineseChess.chessman[j].getY()==netY&&j!=netman)
    	{
    	ChineseChess.chessman[j].setBounds(0,0,0,0);if(ChineseChess.sound)ChineseChess.dead.play();
      ChineseChess.chessman[j].setVisible(false);
      }
      }
      ChineseChess.chessman[netman].setBounds(netX,netY,40,40);
      ChineseChess.save();
      ChineseChess.selected.setVisible(true);
      ChineseChess.selected.setBounds(netX,netY,41,41);if(ChineseChess.sound)ChineseChess.go.play();
      ChineseChess.player[0]=3-ChineseChess.player[0];
      if(ChineseChess.chessman[8].getX()==0||ChineseChess.chessman[24].getX()==0)
	    	 {
	    	 JOptionPane.showMessageDialog(null,"很遗憾您输了");if(ChineseChess.sound)ChineseChess.gameover.play();
	    	 ChineseChess.endgame();
         }
         }
         }
        catch(Exception e)
        {   ChineseChess.info.append("已断开连接\n");e.printStackTrace();ChineseChess.built[0]=true;
             ChineseChess.endgame();
        	   try{ChineseChess.server.close();
        		ChineseChess.s.close();
        		ChineseChess.m_input.close();}
        	  catch(Exception f){}}
     }
     }
   }
   

⌨️ 快捷键说明

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