zoukankan      html  css  js  c++  java
  • 中国象棋(java)

       1 /*
       2  *中国象棋Java版V1.0
       3  * *源文件:Chess.java
       4  
       5  */
       6 
       7 import java.awt.*;
       8 import java.awt.event.*;
       9 import javax.swing.*;
      10 import java.util.*;
      11 import java.io.*;
      12 
      13 //主类
      14 public class Chess{
      15     public static void main(String args[]){
      16         new ChessMainFrame("中国象棋:观棋不语真君子,棋死无悔大丈夫");
      17     }
      18 }
      19 
      20 //主框架类
      21 class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{
      22     //玩家
      23     JLabel play[] = new JLabel[32];
      24     //棋盘
      25     JLabel image;    
      26     //窗格
      27     Container con;
      28     //工具栏
      29     JToolBar jmain;    
      30     //重新开始
      31     JButton anew;
      32     //悔棋
      33     JButton repent;
      34     //退出
      35     JButton exit;
      36     //当前信息
      37     JLabel text;
      38     
      39     //保存当前操作
      40     Vector Var;
      41     
      42     //规则类对象(使于调用方法)
      43     ChessRule rule;
      44     
      45     /**
      46     ** 单击棋子
      47     ** chessManClick = true 闪烁棋子 并给线程响应
      48     ** chessManClick = false 吃棋子 停止闪烁  并给线程响应
      49     */
      50     boolean chessManClick;
      51     
      52     /**
      53     ** 控制玩家走棋
      54     ** chessPlayClick=1 黑棋走棋
      55     ** chessPlayClick=2 红棋走棋 默认红棋
      56     ** chessPlayClick=3 双方都不能走棋
      57     */
      58     int chessPlayClick=2;
      59     
      60     //控制棋子闪烁的线程
      61     Thread tmain;
      62     //把第一次的单击棋子给线程响应
      63     static int Man,i;
      64     
      65     ChessMainFrame(){
      66         new ChessMainFrame("中国象棋");
      67     }
      68     
      69     /**
      70     ** 构造函数
      71     ** 初始化图形用户界面
      72     */
      73     ChessMainFrame(String Title){
      74         //获行客格引用
      75         con = this.getContentPane();
      76         con.setLayout(null);
      77         //实例化规则类
      78         rule = new ChessRule();
      79         Var = new Vector();
      80         
      81         //创建工具栏
      82         jmain = new JToolBar();
      83         text = new JLabel("欢迎使用象棋对弈系统");
      84         //当鼠标放上显示信息
      85         text.setToolTipText("信息提示");
      86         anew = new JButton(" 新 游 戏 ");
      87         anew.setToolTipText("重新开始新的一局");
      88         exit = new JButton(" 退  出 ");
      89         exit.setToolTipText("退出象棋程序程序");
      90         repent = new JButton(" 悔  棋 ");
      91         repent.setToolTipText("返回到上次走棋的位置");
      92 
      93         //把组件添加到工具栏
      94         jmain.setLayout(new GridLayout(0,4));
      95         jmain.add(anew);
      96         jmain.add(repent);
      97         jmain.add(exit);
      98         jmain.add(text);
      99         jmain.setBounds(0,0,558,30);
     100         con.add(jmain);
     101         
     102         //添加棋子标签
     103         drawChessMan();
     104 
     105         //注册按扭监听
     106         anew.addActionListener(this);
     107         repent.addActionListener(this);
     108         exit.addActionListener(this);        
     109                 
     110         //注册棋子移动监听
     111         for (int i=0;i<32;i++){
     112             con.add(play[i]);
     113             play[i].addMouseListener(this);
     114         }
     115         
     116         //添加棋盘标签
     117         con.add(image = new JLabel(new ImageIcon("image\\Main.GIF")));
     118         image.setBounds(0,30,558,620);
     119         image.addMouseListener(this);
     120         
     121         //注册窗体关闭监听
     122         this.addWindowListener(
     123             new WindowAdapter() {
     124                 public void windowClosing(WindowEvent we){
     125                     System.exit(0);
     126                 }
     127             }
     128         );
     129         
     130         //窗体居中
     131         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
     132         Dimension frameSize = this.getSize();
     133         
     134         if (frameSize.height > screenSize.height){
     135             frameSize.height = screenSize.height;
     136         }
     137         if (frameSize.width > screenSize.width){
     138             frameSize.width = screenSize.width;
     139         }
     140         
     141         this.setLocation((screenSize.width - frameSize.width) / 2 - 280 ,(screenSize.height - frameSize.height ) / 2 - 350);
     142     
     143         //设置
     144         this.setIconImage(new ImageIcon("image\\红将.GIF").getImage());
     145         this.setResizable(false);
     146         this.setTitle(Title);
     147         this.setSize(558,670);
     148         this.show();
     149     }
     150     
     151     /**
     152     ** 添加棋子方法
     153     */
     154     public void drawChessMan(){
     155         //流程控制
     156         int i,k;
     157         //图标
     158         Icon in;
     159                 
     160         //黑色棋子
     161         
     162         //
     163         in = new ImageIcon("image\\黑车.GIF");
     164         for (i=0,k=24;i<2;i++,k+=456){        
     165             play[i] = new JLabel(in);
     166             play[i].setBounds(k,56,55,55);    
     167             play[i].setName("车1");            
     168         }    
     169         
     170         //
     171         in = new ImageIcon("image\\黑马.GIF");
     172         for (i=4,k=81;i<6;i++,k+=342){    
     173             play[i] = new JLabel(in);
     174             play[i].setBounds(k,56,55,55);
     175             play[i].setName("马1");
     176         }
     177         
     178         //
     179         in = new ImageIcon("image\\黑象.GIF");
     180         for (i=8,k=138;i<10;i++,k+=228){    
     181             play[i] = new JLabel(in);
     182             play[i].setBounds(k,56,55,55);
     183             play[i].setName("象1");
     184         }
     185         
     186         //
     187         in = new ImageIcon("image\\黑士.GIF");
     188         for (i=12,k=195;i<14;i++,k+=114){
     189             play[i] = new JLabel(in);
     190             play[i].setBounds(k,56,55,55);
     191             play[i].setName("士1");
     192         }
     193         
     194         //
     195         in = new ImageIcon("image\\黑卒.GIF");
     196         for (i=16,k=24;i<21;i++,k+=114){
     197             play[i] = new JLabel(in);
     198             play[i].setBounds(k,227,55,55);
     199             play[i].setName("卒1" + i);
     200         }
     201         
     202         //
     203         in = new ImageIcon("image\\黑炮.GIF");            
     204         for (i=26,k=81;i<28;i++,k+=342){
     205             play[i] = new JLabel(in);
     206             play[i].setBounds(k,170,55,55);
     207             play[i].setName("炮1" + i);
     208         }
     209         
     210         //
     211         in = new ImageIcon("image\\黑将.GIF");
     212         play[30] = new JLabel(in);
     213         play[30].setBounds(252,56,55,55);
     214         play[30].setName("将1");
     215 
     216         //红色棋子
     217         //
     218         in = new ImageIcon("image\\红车.GIF");
     219         for (i=2,k=24;i<4;i++,k+=456){
     220             play[i] = new JLabel(in);
     221             play[i].setBounds(k,569,55,55);
     222             play[i].setName("车2");
     223         }
     224         
     225         //
     226         in = new ImageIcon("image\\红马.GIF");
     227         for (i=6,k=81;i<8;i++,k+=342){
     228             play[i] = new JLabel(in);
     229             play[i].setBounds(k,569,55,55);
     230             play[i].setName("马2");
     231         }
     232         
     233         //
     234         in = new ImageIcon("image\\红象.GIF");            
     235         for (i=10,k=138;i<12;i++,k+=228){
     236             play[i] = new JLabel(in);
     237             play[i].setBounds(k,569,55,55);
     238             play[i].setName("象2");
     239         }
     240         
     241         //
     242         in = new ImageIcon("image\\红士.GIF");
     243         for (i=14,k=195;i<16;i++,k+=114){
     244             play[i] = new JLabel(in);
     245             play[i].setBounds(k,569,55,55);
     246             play[i].setName("士2");
     247         }
     248         
     249         //
     250         in = new ImageIcon("image\\红卒.GIF");
     251         for (i=21,k=24;i<26;i++,k+=114){
     252             play[i] = new JLabel(in);
     253             play[i].setBounds(k,398,55,55);
     254             play[i].setName("卒2" + i);
     255         }
     256         
     257         //
     258         in = new ImageIcon("image\\红炮.GIF");
     259         for (i=28,k=81;i<30;i++,k+=342){
     260             play[i] = new JLabel(in);
     261             play[i].setBounds(k,455,55,55);
     262             play[i].setName("炮2" + i);
     263         }
     264         
     265         //
     266         in = new ImageIcon("image\\红将.GIF");            
     267         play[31] = new JLabel(in);
     268         play[31].setBounds(252,569,55,55);        
     269         play[31].setName("帅2");
     270     }
     271     
     272     /**
     273     ** 线程方法控制棋子闪烁
     274     */
     275     public void run(){
     276         while (true){
     277             //单击棋子第一下开始闪烁
     278             if (chessManClick){
     279                 play[Man].setVisible(false);
     280 
     281                 //时间控制
     282                 try{
     283                     tmain.sleep(200);
     284                 }
     285                 catch(Exception e){
     286                 }
     287                 
     288                 play[Man].setVisible(true);
     289             }
     290             
     291             //闪烁当前提示信息 以免用户看不见
     292             else {
     293                 text.setVisible(false);
     294                 
     295                 //时间控制
     296                 try{
     297                     tmain.sleep(250);
     298                 }
     299                 catch(Exception e){
     300                 }
     301                 
     302                 text.setVisible(true);
     303             }
     304             
     305             try{
     306                 tmain.sleep(350);
     307             }
     308             catch (Exception e){
     309             }
     310         }
     311     }
     312     
     313     /**
     314     ** 单击棋子方法
     315     */
     316     public void mouseClicked(MouseEvent me){
     317         System.out.println("Mouse");
     318         
     319         //当前坐标
     320         int Ex=0,Ey=0;
     321         
     322         //启动线程
     323         if (tmain == null){
     324             tmain = new Thread(this);
     325             tmain.start();
     326         }
     327         
     328         //单击棋盘(移动棋子)
     329         if (me.getSource().equals(image)){
     330             //该红棋走棋的时候
     331             if (chessPlayClick == 2 && play[Man].getName().charAt(1) == '2'){    
     332                 Ex = play[Man].getX();
     333                 Ey = play[Man].getY();
     334                 //移动卒、兵
     335                 if (Man > 15 && Man < 26){
     336                     rule.armsRule(Man,play[Man],me);
     337                 }            
     338                 
     339                 //移动炮
     340                 else if (Man > 25 && Man < 30){            
     341                     rule.cannonRule(play[Man],play,me);
     342                 }
     343                 
     344                 //移动车
     345                 else if (Man >=0 && Man < 4){
     346                     rule.cannonRule(play[Man],play,me);
     347                 }
     348                 
     349                 //移动马
     350                 else if (Man > 3 && Man < 8){
     351                     rule.horseRule(play[Man],play,me);
     352                 }
     353                 
     354                 //移动相、象
     355                 else if (Man > 7 && Man < 12){
     356                     rule.elephantRule(Man,play[Man],play,me);
     357                 }
     358                 
     359                 //移动仕、士
     360                 else if (Man > 11 && Man < 16){
     361                     rule.chapRule(Man,play[Man],play,me);
     362                 }
     363                 
     364                 //移动将、帅
     365                 else if (Man == 30 || Man == 31){                
     366                     rule.willRule(Man,play[Man],play,me);
     367                 }
     368                 
     369                 //是否走棋错误(是否在原地没有动)
     370                 if (Ex == play[Man].getX() && Ey == play[Man].getY()){
     371                     text.setText("               红棋走棋");
     372                     chessPlayClick=2;
     373                 }
     374                 
     375                 else {
     376                     text.setText("               黑棋走棋");
     377                     chessPlayClick=1;
     378                 }
     379                 
     380             }//if
     381             
     382             //该黑棋走棋的时候
     383             else if (chessPlayClick == 1 && play[Man].getName().charAt(1) == '1'){
     384                 Ex = play[Man].getX();
     385                 Ey = play[Man].getY();
     386 
     387                 //移动卒、兵
     388                 if (Man > 15 && Man < 26){
     389                     rule.armsRule(Man,play[Man],me);
     390                 }
     391                 
     392                 //移动炮
     393                 else if (Man > 25 && Man < 30){
     394                     rule.cannonRule(play[Man],play,me);
     395                 }
     396                 
     397                 //移动车
     398                 else if (Man >=0 && Man < 4){
     399                     rule.cannonRule(play[Man],play,me);
     400                 }
     401                 
     402                 //移动马
     403                 else if (Man > 3 && Man < 8){
     404                     rule.horseRule(play[Man],play,me);
     405                 }
     406                 
     407                 //移动相、象
     408                 else if (Man > 7 && Man < 12){
     409                     rule.elephantRule(Man,play[Man],play,me);
     410                 }
     411                 
     412                 //移动仕、士
     413                 else if (Man > 11 && Man < 16){
     414                     rule.chapRule(Man,play[Man],play,me);
     415                 }
     416                 
     417                 //移动将、帅
     418                 else if (Man == 30 || Man == 31){
     419                     rule.willRule(Man,play[Man],play,me);
     420                 }
     421                 
     422                 //是否走棋错误(是否在原地没有动)
     423                 if (Ex == play[Man].getX() && Ey == play[Man].getY()){
     424                     text.setText("               黑棋走棋");
     425                     chessPlayClick=1;
     426                 }
     427                 
     428                 else {
     429                     text.setText("               红棋走棋");
     430                     chessPlayClick=2;    
     431                 }
     432 
     433                             
     434             }//else if        
     435             
     436             //当前没有操作(停止闪烁)
     437             chessManClick=false;
     438             
     439         }//if
     440         
     441         //单击棋子
     442         else{
     443             //第一次单击棋子(闪烁棋子)
     444             if (!chessManClick){
     445                 for (int i=0;i<32;i++){
     446                     //被单击的棋子
     447                     if (me.getSource().equals(play[i])){
     448                         //告诉线程让该棋子闪烁
     449                         Man=i;
     450                         //开始闪烁
     451                         chessManClick=true;
     452                         break;
     453                     }
     454                 }//for
     455             }//if
     456             
     457             //第二次单击棋子(吃棋子)
     458             else if (chessManClick){
     459                 //当前没有操作(停止闪烁)
     460                 chessManClick=false;
     461                 
     462                 for (i=0;i<32;i++){
     463                     //找到被吃的棋子
     464                     if (me.getSource().equals(play[i])){
     465                         //该红棋吃棋的时候
     466                         if (chessPlayClick == 2 && play[Man].getName().charAt(1) == '2'){
     467                             Ex = play[Man].getX();
     468                             Ey = play[Man].getY();
     469                             
     470                             //卒、兵吃规则
     471                             if (Man > 15 && Man < 26){
     472                                 rule.armsRule(play[Man],play[i]);
     473                             }
     474                             
     475                             //炮吃规则
     476                             else if (Man > 25 && Man < 30){
     477                                 rule.cannonRule(0,play[Man],play[i],play,me);
     478                             }
     479                             
     480                             //车吃规则
     481                             else if (Man >=0 && Man < 4){
     482                                 rule.cannonRule(1,play[Man],play[i],play,me);
     483                             }
     484                             
     485                             //马吃规则
     486                             else if (Man > 3 && Man < 8){
     487                                 rule.horseRule(play[Man],play[i],play,me);    
     488                             }
     489                             
     490                             //相、象吃规则
     491                             else if (Man > 7 && Man < 12){
     492                                 rule.elephantRule(play[Man],play[i],play);
     493                             }
     494                             
     495                             //士、仕吃棋规则
     496                             else if (Man > 11 && Man < 16){
     497                                 rule.chapRule(Man,play[Man],play[i],play);
     498                             }
     499                             
     500                             //将、帅吃棋规则
     501                             else if (Man == 30 || Man == 31){
     502                                 rule.willRule(Man,play[Man],play[i],play);
     503                                 play[Man].setVisible(true);    
     504                             }
     505                             
     506                             //是否走棋错误(是否在原地没有动)
     507                             if (Ex == play[Man].getX() && Ey == play[Man].getY()){
     508                                 text.setText("               红棋走棋");
     509                                 chessPlayClick=2;
     510                                 break;
     511                             }
     512                                                         
     513                             else{
     514                                 text.setText("               黑棋走棋");
     515                                 chessPlayClick=1;
     516                                 break;
     517                             }    
     518                             
     519                         }//if
     520                         
     521                         //该黑棋吃棋的时候
     522                         else if (chessPlayClick == 1 && play[Man].getName().charAt(1) == '1'){
     523                             Ex = play[Man].getX();
     524                             Ey = play[Man].getY();
     525                                                     
     526                             //卒吃规则
     527                             if (Man > 15 && Man < 26){
     528                                 rule.armsRule(play[Man],play[i]);
     529                             }
     530                             
     531                             //炮吃规则
     532                             else if (Man > 25 && Man < 30){
     533                                 rule.cannonRule(0,play[Man],play[i],play,me);
     534                             }
     535                             
     536                             //车吃规则
     537                             else if (Man >=0 && Man < 4){
     538                                 rule.cannonRule(1,play[Man],play[i],play,me);    
     539                             }
     540                             
     541                             //马吃规则
     542                             else if (Man > 3 && Man < 8){
     543                                 rule.horseRule(play[Man],play[i],play,me);
     544                             }
     545                             
     546                             //相、象吃规则
     547                             else if (Man > 7 && Man < 12){
     548                                 rule.elephantRule(play[Man],play[i],play);
     549                             }
     550                             
     551                             //士、仕吃棋规则
     552                             else if (Man > 11 && Man < 16){
     553                                 rule.chapRule(Man,play[Man],play[i],play);
     554                             }
     555                             
     556                             //将、帅吃棋规则
     557                             else if (Man == 30 || Man == 31){
     558                                 rule.willRule(Man,play[Man],play[i],play);
     559                                 play[Man].setVisible(true);            
     560                             }
     561                             
     562                             //是否走棋错误(是否在原地没有动)
     563                             if (Ex == play[Man].getX() && Ey == play[Man].getY()){
     564                                 text.setText("               黑棋走棋");
     565                                 chessPlayClick=1;
     566                                 break;
     567                             }
     568                 
     569                             else {
     570                                 text.setText("               红棋走棋");
     571                                 chessPlayClick=2;    
     572                                 break;
     573                             }
     574                                                         
     575                         }//else if 
     576                         
     577                     }//if
     578                     
     579                 }//for
     580                 
     581                 
     582                 //是否胜利
     583                 if (!play[31].isVisible()){
     584                     JOptionPane.showConfirmDialog(
     585                         this,"黑棋胜利","玩家一胜利",
     586                         JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
     587                     //双方都不可以在走棋了
     588                     chessPlayClick=3;
     589                     text.setText("  黑棋胜利");
     590                     
     591                 }//if 
     592 
     593                 else if (!play[30].isVisible()){
     594                     JOptionPane.showConfirmDialog(
     595                         this,"红棋胜利","玩家二胜利",
     596                         JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
     597                     chessPlayClick=3;
     598                     text.setText("  红棋胜利");
     599                 }//else if    
     600                 
     601             }//else
     602             
     603         }//else
     604         
     605     }
     606     
     607     public void mousePressed(MouseEvent me){
     608     }
     609     public void mouseReleased(MouseEvent me){
     610     }
     611     public void mouseEntered(MouseEvent me){
     612     }
     613     public void mouseExited(MouseEvent me){
     614     }
     615     
     616     /**
     617     ** 定义按钮的事件响应
     618     */
     619     public void actionPerformed(ActionEvent ae) {
     620         //重新开始按钮
     621         if (ae.getSource().equals(anew)){
     622             int i,k;
     623             //重新排列每个棋子的位置
     624             //黑色棋子
     625         
     626             //
     627             for (i=0,k=24;i<2;i++,k+=456){        
     628                 play[i].setBounds(k,56,55,55);    
     629             }    
     630             
     631             //
     632             for (i=4,k=81;i<6;i++,k+=342){    
     633                 play[i].setBounds(k,56,55,55);
     634             }
     635             
     636             //
     637             for (i=8,k=138;i<10;i++,k+=228){    
     638                 play[i].setBounds(k,56,55,55);
     639             }
     640             
     641             //
     642             for (i=12,k=195;i<14;i++,k+=114){
     643                 play[i].setBounds(k,56,55,55);
     644             }
     645             
     646             //
     647             for (i=16,k=24;i<21;i++,k+=114){
     648                 play[i].setBounds(k,227,55,55);
     649             }
     650             
     651             //
     652             for (i=26,k=81;i<28;i++,k+=342){
     653                 play[i].setBounds(k,170,55,55);
     654             }
     655             
     656             //
     657             play[30].setBounds(252,56,55,55);
     658 
     659             //红色棋子
     660             //
     661             for (i=2,k=24;i<4;i++,k+=456){
     662                 play[i].setBounds(k,569,55,55);
     663             }
     664             
     665             //
     666             for (i=6,k=81;i<8;i++,k+=342){
     667                 play[i].setBounds(k,569,55,55);
     668             }
     669             
     670             //
     671             for (i=10,k=138;i<12;i++,k+=228){
     672                 play[i].setBounds(k,569,55,55);
     673             }
     674             
     675             //
     676             for (i=14,k=195;i<16;i++,k+=114){
     677                 play[i].setBounds(k,569,55,55);
     678             }
     679             
     680             //
     681             for (i=21,k=24;i<26;i++,k+=114){
     682                 play[i].setBounds(k,398,55,55);
     683             }
     684             
     685             //
     686             for (i=28,k=81;i<30;i++,k+=342){
     687                 play[i].setBounds(k,455,55,55);
     688             }
     689             
     690             //
     691             play[31].setBounds(252,569,55,55);        
     692     
     693             chessPlayClick = 2;
     694             text.setText("               红棋走棋");
     695             
     696             for (i=0;i<32;i++){
     697                 play[i].setVisible(true);
     698             }
     699             //清除Vector中的内容
     700             Var.clear();
     701             
     702         }    
     703         
     704         //悔棋按钮
     705         else if (ae.getSource().equals(repent)){
     706             try{
     707                 //获得setVisible属性值
     708                 String S = (String)Var.get(Var.size()-4);
     709                 //获得X坐标
     710                 int x = Integer.parseInt((String)Var.get(Var.size()-3));
     711                 //获得Y坐标
     712                 int y = Integer.parseInt((String)Var.get(Var.size()-2));
     713                 //获得索引
     714                 int M = Integer.parseInt((String)Var.get(Var.size()-1));            
     715         
     716                 //赋给棋子
     717                 play[M].setVisible(true);            
     718                 play[M].setBounds(x,y,55,55);
     719                 
     720                 if (play[M].getName().charAt(1) == '1'){
     721                     text.setText("               黑棋走棋");
     722                     chessPlayClick = 1;
     723                 } 
     724                 else{
     725                     text.setText("               红棋走棋");
     726                     chessPlayClick = 2;
     727                 }
     728                 
     729                 //删除用过的坐标
     730                 Var.remove(Var.size()-4);
     731                 Var.remove(Var.size()-3);
     732                 Var.remove(Var.size()-2);
     733                 Var.remove(Var.size()-1);
     734                 
     735                 //停止旗子闪烁
     736                 chessManClick=false;
     737             }
     738             
     739             catch(Exception e){
     740             }
     741         }
     742     
     743         //退出
     744         else if (ae.getSource().equals(exit)){
     745             int j=JOptionPane.showConfirmDialog(
     746                 this,"真的要退出吗?","退出",
     747                 JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
     748             
     749             if (j == JOptionPane.YES_OPTION){
     750                 System.exit(0);
     751             }
     752         }
     753     }
     754 
     755     /*定义中国象棋规则的类*/
     756     class ChessRule {
     757         /**卒子的移动规则*/
     758         public void armsRule(int Man,JLabel play,MouseEvent me){
     759             //黑卒向下
     760             if (Man < 21){
     761                 //向下移动、得到终点的坐标模糊成合法的坐标
     762                 if ((me.getY()-play.getY()) > 27 && (me.getY()-play.getY()) < 86 && (me.getX()-play.getX()) < 55 && (me.getX()-play.getX()) > 0){
     763                     
     764                     //当前记录添加到集合(用于悔棋)
     765                     Var.add(String.valueOf(play.isVisible()));
     766                     Var.add(String.valueOf(play.getX()));
     767                     Var.add(String.valueOf(play.getY()));
     768                     Var.add(String.valueOf(Man));
     769                     
     770                     play.setBounds(play.getX(),play.getY()+57,55,55);
     771                 }
     772                 
     773                 //向右移动、得到终点的坐标模糊成合法的坐标、必须过河                
     774                 else if (play.getY() > 284 && (me.getX() - play.getX()) >= 57 && (me.getX() - play.getX()) <= 112){
     775                     play.setBounds(play.getX()+57,play.getY(),55,55);    
     776                 }
     777                 
     778                 //向左移动、得到终点的坐标模糊成合法的坐标、必须过河
     779                 else if (play.getY() > 284 && (play.getX() - me.getX()) >= 2 && (play.getX() - me.getX()) <=58){
     780                     //模糊坐标
     781                     play.setBounds(play.getX()-57,play.getY(),55,55);
     782                 }
     783             }
     784             
     785             //红卒向上
     786             else{
     787                 //当前记录添加到集合(用于悔棋)
     788                 Var.add(String.valueOf(play.isVisible()));
     789                 Var.add(String.valueOf(play.getX()));
     790                 Var.add(String.valueOf(play.getY()));
     791                 Var.add(String.valueOf(Man));
     792                 
     793                 //向上移动、得到终点的坐标模糊成合法的坐标
     794                 if ((me.getX()-play.getX()) >= 0 && (me.getX()-play.getX()) <= 55 && (play.getY()-me.getY()) >27 && play.getY()-me.getY() < 86){
     795                     play.setBounds(play.getX(),play.getY()-57,55,55);
     796                 }
     797                 
     798                 //向右移动、得到终点的坐标模糊成合法的坐标、必须过河
     799                 else if (play.getY() <= 341 && (me.getX() - play.getX()) >= 57 && (me.getX() - play.getX()) <= 112){
     800                     play.setBounds(play.getX()+57,play.getY(),55,55);
     801                 }                
     802                 
     803                 //向左移动、得到终点的坐标模糊成合法的坐标、必须过河
     804                 else if (play.getY() <= 341 && (play.getX() - me.getX()) >= 3 && (play.getX() - me.getX()) <=58){
     805                     play.setBounds(play.getX()-57,play.getY(),55,55);
     806                 }
     807             }
     808         }//卒移动结束
     809 
     810         /**卒吃棋规则*/
     811         public void armsRule(JLabel play1,JLabel play2){
     812             //向右走
     813             if ((play2.getX() - play1.getX()) <= 112 && (play2.getX() - play1.getX()) >= 57 && (play1.getY() - play2.getY()) < 22 && (play1.getY() - play2.getY()) > -22 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1)){
     814                 //黑棋要过河才能右吃棋
     815                 if (play1.getName().charAt(1) == '1' && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){
     816 
     817                     play2.setVisible(false);
     818                     //把对方的位置给自己
     819                     play1.setBounds(play2.getX(),play2.getY(),55,55);
     820                 }
     821                 
     822                 //红棋要过河才左能吃棋
     823                 else if (play1.getName().charAt(1) == '2' && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){
     824                     play2.setVisible(false);
     825                     //把对方的位置给自己
     826                     play1.setBounds(play2.getX(),play2.getY(),55,55);                
     827                 }
     828             }
     829             
     830             //向左走
     831             else if ((play1.getX() - play2.getX()) <= 112 && (play1.getX() - play2.getX()) >= 57 && (play1.getY() - play2.getY()) < 22 && (play1.getY() - play2.getY()) > -22 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1)){
     832                 //黑棋要过河才能左吃棋
     833                 if (play1.getName().charAt(1) == '1' && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){
     834                     play2.setVisible(false);
     835                     //把对方的位置给自己
     836                     play1.setBounds(play2.getX(),play2.getY(),55,55);
     837                 }
     838                 
     839                 //红棋要过河才能右吃棋
     840                 else if (play1.getName().charAt(1) == '2' && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){
     841                     play2.setVisible(false);
     842                     //把对方的位置给自己
     843                     play1.setBounds(play2.getX(),play2.getY(),55,55);                
     844                 }
     845             }
     846             
     847             //向上走
     848             else if (play1.getX() - play2.getX() >= -22 && play1.getX() - play2.getX() <= 22 && play1.getY() - play2.getY() >= -112 && play1.getY() - play2.getY() <= 112){
     849                 //黑棋不能向上吃棋
     850                 if (play1.getName().charAt(1) == '1' && play1.getY() < play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){
     851                     play2.setVisible(false);
     852                     //把对方的位置给自己
     853                     play1.setBounds(play2.getX(),play2.getY(),55,55);
     854                 }
     855                 
     856                 //红棋不能向下吃棋
     857                 else if (play1.getName().charAt(1) == '2' && play1.getY() > play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){
     858                     play2.setVisible(false);
     859                     //把对方的位置给自己
     860                     play1.setBounds(play2.getX(),play2.getY(),55,55);
     861                 }            
     862             }
     863             
     864             //当前记录添加到集合(用于悔棋)
     865             Var.add(String.valueOf(play1.isVisible()));
     866             Var.add(String.valueOf(play1.getX()));
     867             Var.add(String.valueOf(play1.getY()));
     868             Var.add(String.valueOf(Man));
     869             
     870             //当前记录添加到集合(用于悔棋)
     871             Var.add(String.valueOf(play2.isVisible()));
     872             Var.add(String.valueOf(play2.getX()));
     873             Var.add(String.valueOf(play2.getY()));
     874             Var.add(String.valueOf(i));
     875 
     876         }//卒吃结束
     877         
     878         /**炮、车移动规则*/
     879         public void cannonRule(JLabel play,JLabel playQ[],MouseEvent me){
     880             //起点和终点之间是否有棋子
     881             int Count = 0;
     882             
     883             //上、下移动
     884             if (play.getX() - me.getX() <= 0 && play.getX() - me.getX() >= -55){
     885                 //指定所有模糊Y坐标
     886                 for (int i=56;i<=571;i+=57){
     887                     //移动的Y坐标是否有指定坐标相近的
     888                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
     889                         //所有的棋子
     890                         for (int j=0;j<32;j++){
     891                             //找出在同一条竖线的所有棋子、并不包括自己
     892                             if (playQ[j].getX() - play.getX() >= -27 && playQ[j].getX() - play.getX() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){
     893                                 //从起点到终点(从左到右)
     894                                 for (int k=play.getY()+57;k<i;k+=57){
     895                                     //大于起点、小于终点的坐标就可以知道中间是否有棋子
     896                                     if (playQ[j].getY() < i && playQ[j].getY() > play.getY()){
     897                                         //中间有一个棋子就不可以从这条竖线过去
     898                                         Count++;
     899                                         break;
     900                                     }
     901                                 }//for
     902                                 
     903                                 //从起点到终点(从右到左)
     904                                 for (int k=i+57;k<play.getY();k+=57){
     905                                     //找起点和终点的棋子
     906                                     if (playQ[j].getY() < play.getY() && playQ[j].getY() > i){
     907                                         Count++;
     908                                         break;
     909                                     }
     910                                 }//for
     911                             }//if
     912                         }//for
     913                         
     914                         //起点和终点没有棋子就可以移动了
     915                         if (Count == 0){
     916                             //当前记录添加到集合(用于悔棋)
     917                             Var.add(String.valueOf(play.isVisible()));
     918                             Var.add(String.valueOf(play.getX()));
     919                             Var.add(String.valueOf(play.getY()));
     920                             Var.add(String.valueOf(Man));
     921                             play.setBounds(play.getX(),i,55,55);
     922                             break;
     923                         }
     924                     }//if
     925                 }//for
     926             }//if
     927 
     928             //左、右移动
     929             else if (play.getY() - me.getY() >=-27 && play.getY() - me.getY() <= 27){
     930                 //指定所有模糊X坐标
     931                 for (int i=24;i<=480;i+=57){
     932                     //移动的X坐标是否有指定坐标相近的
     933                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
     934                         //所有的棋子
     935                         for (int j=0;j<32;j++){
     936                             //找出在同一条横线的所有棋子、并不包括自己
     937                             if (playQ[j].getY() - play.getY() >= -27 && playQ[j].getY() - play.getY() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){
     938                                 //从起点到终点(从上到下)                
     939                                 for (int k=play.getX()+57;k<i;k+=57){
     940                                     //大于起点、小于终点的坐标就可以知道中间是否有棋子
     941                                     if (playQ[j].getX() < i && playQ[j].getX() > play.getX()){
     942                                         //中间有一个棋子就不可以从这条横线过去
     943                                         Count++;
     944                                         break;
     945                                     }
     946                                 }//for
     947                                 
     948                                 //从起点到终点(从下到上)
     949                                 for (int k=i+57;k<play.getX();k+=57){
     950                                     //找起点和终点的棋子
     951                                     if (playQ[j].getX() < play.getX() && playQ[j].getX() > i){
     952                                         Count++;
     953                                         break;
     954                                     }
     955                                 }//for
     956                             }//if
     957                         }//for
     958                         
     959                         //起点和终点没有棋子
     960                         if (Count == 0){
     961                             //当前记录添加到集合(用于悔棋)
     962                             Var.add(String.valueOf(play.isVisible()));
     963                             Var.add(String.valueOf(play.getX()));
     964                             Var.add(String.valueOf(play.getY()));
     965                             Var.add(String.valueOf(Man));
     966                             
     967                             play.setBounds(i,play.getY(),55,55);
     968                             break;
     969                         }
     970                     }//if
     971                 }//for
     972             }//else
     973             
     974         }//炮、车移动方法结束
     975 
     976 
     977         /**炮、车吃棋规则*/
     978         public void cannonRule(int Chess,JLabel play,JLabel playTake,JLabel playQ[],MouseEvent me){
     979             //起点和终点之间是否有棋子
     980             int Count = 0;
     981 
     982 
     983             //所有的棋子
     984             for (int j=0;j<32;j++){
     985                 //找出在同一条竖线的所有棋子、并不包括自己
     986                 if (playQ[j].getX() - play.getX() >= -27 && playQ[j].getX() - play.getX() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){
     987 
     988                     //自己是起点被吃的是终点(从上到下)
     989                     for (int k=play.getY()+57;k<playTake.getY();k+=57){
     990                         //大于起点、小于终点的坐标就可以知道中间是否有棋子
     991                         if (playQ[j].getY() < playTake.getY() && playQ[j].getY() > play.getY()){
     992                                 //计算起点和终点的棋子个数
     993                                 Count++;            
     994                                 break;                            
     995                         }
     996                     }//for
     997                                 
     998                     //自己是起点被吃的是终点(从下到上)
     999                     for (int k=playTake.getY();k<play.getY();k+=57){
    1000                         //找起点和终点的棋子
    1001                         if (playQ[j].getY() < play.getY() && playQ[j].getY() > playTake.getY()){
    1002                                 Count++;    
    1003                                 break;
    1004                         }
    1005                     }//for
    1006                 }//if
    1007                             
    1008                 //找出在同一条竖线的所有棋子、并不包括自己
    1009                 else if (playQ[j].getY() - play.getY() >= -10 && playQ[j].getY() - play.getY() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){
    1010                     //自己是起点被吃的是终点(从左到右)
    1011                     for (int k=play.getX()+50;k<playTake.getX();k+=57){
    1012                         //大于起点、小于终点的坐标就可以知道中间是否有棋子                        
    1013                         if (playQ[j].getX() < playTake.getX() && playQ[j].getX() > play.getX()){
    1014                             Count++;            
    1015                             break;    
    1016                         }
    1017                     }//for
    1018                                 
    1019                     //自己是起点被吃的是终点(从右到左)
    1020                     for (int k=playTake.getX();k<play.getX();k+=57){
    1021                         //找起点和终点的棋子
    1022                         if (playQ[j].getX() < play.getX() && playQ[j].getX() > playTake.getX()){
    1023                                 Count++;
    1024                                 break;
    1025                         }
    1026                     }//for
    1027                 }//if
    1028             }//for
    1029                         
    1030             //起点和终点之间要一个棋子是炮的规则、并不能吃自己的棋子
    1031             if (Count == 1 && Chess == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){
    1032                 //当前记录添加到集合(用于悔棋)
    1033                 Var.add(String.valueOf(play.isVisible()));
    1034                 Var.add(String.valueOf(play.getX()));
    1035                 Var.add(String.valueOf(play.getY()));
    1036                 Var.add(String.valueOf(Man));
    1037                 
    1038                 //当前记录添加到集合(用于悔棋)
    1039                 Var.add(String.valueOf(playTake.isVisible()));
    1040                 Var.add(String.valueOf(playTake.getX()));                                    
    1041                 Var.add(String.valueOf(playTake.getY()));
    1042                 Var.add(String.valueOf(i));
    1043                 
    1044                 playTake.setVisible(false);
    1045                 play.setBounds(playTake.getX(),playTake.getY(),55,55);
    1046             }
    1047             
    1048             //起点和终点之间没有棋子是车的规则、并不能吃自己的棋子            
    1049             else if (Count ==0  && Chess == 1 && playTake.getName().charAt(1) != play.getName().charAt(1)){
    1050                 
    1051                 //当前记录添加到集合(用于悔棋)
    1052                 Var.add(String.valueOf(play.isVisible()));
    1053                 Var.add(String.valueOf(play.getX()));                                    
    1054                 Var.add(String.valueOf(play.getY()));
    1055                 Var.add(String.valueOf(Man));
    1056                 
    1057                 //当前记录添加到集合(用于悔棋)
    1058                 Var.add(String.valueOf(playTake.isVisible()));
    1059                 Var.add(String.valueOf(playTake.getX()));                                    
    1060                 Var.add(String.valueOf(playTake.getY()));
    1061                 Var.add(String.valueOf(i));
    1062                 
    1063                 playTake.setVisible(false);
    1064                 play.setBounds(playTake.getX(),playTake.getY(),55,55);
    1065             }
    1066             
    1067         }//炮、车吃棋方法结束
    1068         
    1069         /**马移动规则*/
    1070         public void horseRule(JLabel play,JLabel playQ[],MouseEvent me){
    1071             //保存坐标和障碍
    1072             int Ex=0,Ey=0,Move=0;            
    1073             
    1074             //上移、左边
    1075             if (play.getX() - me.getX() >= 2 && play.getX() - me.getX() <= 57 && play.getY() - me.getY() >= 87 && play.getY() - me.getY() <= 141){
    1076                 //合法的Y坐标
    1077                 for (int i=56;i<=571;i+=57){
    1078                     //移动的Y坐标是否有指定坐标相近的
    1079                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1080                         Ey = i;
    1081                         break;
    1082                     }
    1083                 }
    1084                 
    1085                 //合法的X坐标
    1086                 for (int i=24;i<=480;i+=57){
    1087                     //移动的X坐标是否有指定坐标相近的
    1088                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
    1089                         Ex = i;
    1090                         break;
    1091                     }
    1092                 }
    1093                 
    1094                 //正前方是否有别的棋子
    1095                 for (int i=0;i<32;i++){
    1096                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0  && play.getY() - playQ[i].getY() == 57 ){
    1097                         Move = 1;
    1098                         break;
    1099                     }    
    1100                 }
    1101                 
    1102                 //可以移动该棋子
    1103                 if (Move == 0){
    1104                     //当前记录添加到集合(用于悔棋)
    1105                     Var.add(String.valueOf(play.isVisible()));
    1106                     Var.add(String.valueOf(play.getX()));
    1107                     Var.add(String.valueOf(play.getY()));
    1108                     Var.add(String.valueOf(Man));
    1109                                     
    1110                     play.setBounds(Ex,Ey,55,55);
    1111                 }
    1112                 
    1113             }//if
    1114             
    1115             //左移、上边
    1116             else if (play.getY() - me.getY() >= 27 && play.getY() - me.getY() <= 86 && play.getX() - me.getX() >= 70 && play.getX() - me.getX() <= 130){
    1117                 //Y
    1118                 for (int i=56;i<=571;i+=57){
    1119                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1120                         Ey = i;
    1121                     }
    1122                 }
    1123                 
    1124                 //X
    1125                 for (int i=24;i<=480;i+=57){
    1126                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
    1127                         Ex = i;
    1128                     }
    1129                 }
    1130                 
    1131                 //正左方是否有别的棋子
    1132                 for (int i=0;i<32;i++){
    1133                     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57 ){
    1134                         Move = 1;
    1135                         break;
    1136                     }
    1137                 }
    1138                 
    1139                 if (Move == 0){
    1140                     //当前记录添加到集合(用于悔棋)
    1141                     Var.add(String.valueOf(play.isVisible()));
    1142                     Var.add(String.valueOf(play.getX()));
    1143                     Var.add(String.valueOf(play.getY()));
    1144                     Var.add(String.valueOf(Man));
    1145                     
    1146                     play.setBounds(Ex,Ey,55,55);
    1147                 }
    1148             }//else
    1149             
    1150             //下移、右边
    1151             else if (me.getY() - play.getY() >= 87 && me.getY() - play.getY() <= 141 && me.getX() - play.getX() <= 87 && me.getX() - play.getX() >= 2 ){    
    1152                 //Y        
    1153                 for (int i=56;i<=571;i+=57){
    1154                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1155                         Ey = i;
    1156                     }
    1157                 }
    1158                 
    1159                 //X
    1160                 for (int i=24;i<=480;i+=57){
    1161                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
    1162                         Ex = i;
    1163                     }
    1164                 }
    1165                 
    1166                 //正下方是否有别的棋子
    1167                 for (int i=0;i<32;i++){
    1168                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0  && playQ[i].getY() - play.getY() == 57 ){
    1169                         Move = 1;
    1170                         break;
    1171                     }
    1172                 }
    1173                 
    1174                 if (Move == 0){
    1175                     //当前记录添加到集合(用于悔棋)
    1176                     Var.add(String.valueOf(play.isVisible()));
    1177                     Var.add(String.valueOf(play.getX()));
    1178                     Var.add(String.valueOf(play.getY()));
    1179                     Var.add(String.valueOf(Man));
    1180                     
    1181                     play.setBounds(Ex,Ey,55,55);
    1182                 }
    1183             }//else
    1184             
    1185             //上移、右边
    1186             else if (play.getY() - me.getY() >= 87 && play.getY() - me.getY() <= 141 && me.getX() - play.getX() <= 87 && me.getX() - play.getX() >= 30 ){
    1187                 //合法的Y坐标
    1188                 for (int i=56;i<=571;i+=57){
    1189                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1190                         Ey = i;
    1191                         break;
    1192                     }
    1193                 }
    1194                 
    1195                 //合法的X坐标
    1196                 for (int i=24;i<=480;i+=57){
    1197                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
    1198                         Ex = i;
    1199                         break;
    1200                     }
    1201                 }
    1202                 
    1203                 //正前方是否有别的棋子
    1204                 for (int i=0;i<32;i++){
    1205                     System.out.println(i+"playQ[i].getX()="+playQ[i].getX());
    1206                     //System.out.println("play.getX()="+play.getX());
    1207                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57 ){
    1208                         Move = 1;
    1209                         //System.out.println("play.getY()="+play.getY());
    1210                         //System.out.println("playQ[i].getY()="+playQ[i].getY());
    1211                         break;
    1212                     }
    1213                 }
    1214                 
    1215                 //可以移动该棋子
    1216                 if (Move == 0){
    1217                     //当前记录添加到集合(用于悔棋)
    1218                     Var.add(String.valueOf(play.isVisible()));
    1219                     Var.add(String.valueOf(play.getX()));    
    1220                     Var.add(String.valueOf(play.getY()));
    1221                     Var.add(String.valueOf(Man));
    1222                     
    1223                     play.setBounds(Ex,Ey,55,55);
    1224                 }
    1225             }//else 
    1226             
    1227             //下移、左边
    1228             else if (me.getY() - play.getY() >= 87 && me.getY() - play.getY() <= 141 && play.getX() - me.getX() <= 87 && play.getX() - me.getX() >= 10 ){
    1229                 //合法的Y坐标
    1230                 for (int i=56;i<=571;i+=57){
    1231                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1232                         Ey = i;
    1233                         break;
    1234                     }
    1235                 }
    1236                 
    1237                 //合法的X坐标
    1238                 for (int i=24;i<=480;i+=57){
    1239                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
    1240                         Ex = i;
    1241                         break;
    1242                     }
    1243                 }
    1244                 
    1245                 //正下方是否有别的棋子
    1246                 for (int i=0;i<32;i++){
    1247                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57 ){
    1248                         Move = 1;
    1249                         break;
    1250                     }
    1251                 }
    1252                 
    1253                 //可以移动该棋子
    1254                 if (Move == 0){
    1255                     //当前记录添加到集合(用于悔棋)
    1256                     Var.add(String.valueOf(play.isVisible()));
    1257                     Var.add(String.valueOf(play.getX()));
    1258                     Var.add(String.valueOf(play.getY()));
    1259                     Var.add(String.valueOf(Man));
    1260                     
    1261                     play.setBounds(Ex,Ey,55,55);
    1262                 }
    1263             }//else
    1264             
    1265             //右移、上边
    1266             else if (play.getY() - me.getY() >= 30 && play.getY() - me.getY() <= 87 && me.getX() - play.getX() <= 141 && me.getX() - play.getX() >= 87 ){
    1267                 //Y        
    1268                 for (int i=56;i<=571;i+=57){
    1269                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1270                         Ey = i;
    1271                     }
    1272                 }
    1273                 
    1274                 //X
    1275                 for (int i=24;i<=480;i+=57){
    1276                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
    1277                         Ex = i;
    1278                     }
    1279                 }
    1280                 
    1281                 //正右方是否有别的棋子
    1282                 for (int i=0;i<32;i++){
    1283                     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57 ){
    1284                         Move = 1;
    1285                         break;
    1286                     }
    1287                 }
    1288                 
    1289                 if (Move == 0){
    1290                     //当前记录添加到集合(用于悔棋)
    1291                     Var.add(String.valueOf(play.isVisible()));
    1292                     Var.add(String.valueOf(play.getX()));
    1293                     Var.add(String.valueOf(play.getY()));
    1294                     Var.add(String.valueOf(Man));
    1295                     
    1296                     play.setBounds(Ex,Ey,55,55);
    1297                 }
    1298             }//else
    1299             
    1300             //右移、下边
    1301             else if (me.getY() - play.getY() >= 30 && me.getY() - play.getY() <= 87 && me.getX() - play.getX() <= 141 && me.getX() - play.getX() >= 87 ){
    1302                 //Y        
    1303                 for (int i=56;i<=571;i+=57){
    1304                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1305                         Ey = i;
    1306                     }
    1307                 }
    1308                 
    1309                 //X
    1310                 for (int i=24;i<=480;i+=57){
    1311                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
    1312                         Ex = i;
    1313                     }
    1314                 }
    1315                 
    1316                 //正右方是否有别的棋子
    1317                 for (int i=0;i<32;i++){
    1318                     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57 ){
    1319                         Move = 1;
    1320                         break;
    1321                     }
    1322                 }
    1323                 
    1324                 if (Move == 0){
    1325                     //当前记录添加到集合(用于悔棋)
    1326                     Var.add(String.valueOf(play.isVisible()));
    1327                     Var.add(String.valueOf(play.getX()));
    1328                     Var.add(String.valueOf(play.getY()));
    1329                     Var.add(String.valueOf(Man));
    1330                     
    1331                     play.setBounds(Ex,Ey,55,55);
    1332                 }
    1333             }//else
    1334             
    1335             //左移、下边
    1336             else if (me.getY() - play.getY() >= 30 && me.getY() - play.getY() <= 87 && play.getX() - me.getX() <= 141 && play.getX() - me.getX() >= 87 ){
    1337                 //Y        
    1338                 for (int i=56;i<=571;i+=57){
    1339                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1340                         Ey = i;
    1341                     }
    1342                 }
    1343                 
    1344                 //X
    1345                 for (int i=24;i<=480;i+=57){
    1346                     if (i - me.getX() >= -55 && i-me.getX() <= 0){
    1347                         Ex = i;
    1348                     }
    1349                 }
    1350                 
    1351                 //正左方是否有别的棋子
    1352                 for (int i=0;i<32;i++){
    1353                     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57 ){
    1354                         Move = 1;
    1355                         break;
    1356                     }
    1357                 }
    1358                 
    1359                 if (Move == 0){
    1360                     //当前记录添加到集合(用于悔棋)
    1361                     Var.add(String.valueOf(play.isVisible()));
    1362                     Var.add(String.valueOf(play.getX()));
    1363                     Var.add(String.valueOf(play.getY()));
    1364                     Var.add(String.valueOf(Man));
    1365                 
    1366                     play.setBounds(Ex,Ey,55,55);
    1367                 }
    1368                 
    1369             }//else
    1370             
    1371         }//马移动结束
    1372 
    1373         /**马吃棋规则*/
    1374         public void horseRule(JLabel play,JLabel playTake ,JLabel playQ[],MouseEvent me){
    1375             //障碍
    1376             int Move=0;
    1377             boolean Chess=false;
    1378             
    1379             //上移、左吃
    1380             if (play.getName().charAt(1)!=playTake.getName().charAt(1) && play.getX() - playTake.getX() == 57 && play.getY() - playTake.getY() == 114 ){
    1381                 //正前方是否有别的棋子
    1382                 for (int i=0;i<32;i++){
    1383                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57){
    1384                         Move = 1;
    1385                         break;
    1386                     }
    1387                 }//for
    1388                 
    1389                 Chess = true;
    1390                 
    1391             }//if
    1392             
    1393             //上移、右吃
    1394             else if (play.getY() - playTake.getY() == 114 && playTake.getX() - play.getX() == 57 ){
    1395                 //正前方是否有别的棋子
    1396                 for (int i=0;i<32;i++){
    1397                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57){
    1398                         Move = 1;
    1399                         break;
    1400                     }
    1401                 }//for        
    1402                 
    1403                 Chess = true;
    1404                 
    1405             }//else
    1406             
    1407             //左移、上吃
    1408             else if (play.getY() - playTake.getY() == 57 && play.getX() - playTake.getX() == 114 ){
    1409                 //正左方是否有别的棋子
    1410                 for (int i=0;i<32;i++){
    1411                     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57){
    1412                         Move = 1;
    1413                         break;
    1414                     }
    1415                 }//for
    1416                 
    1417                 Chess = true;
    1418                 
    1419             }//else
    1420             
    1421             //左移、下吃
    1422             else if (playTake.getY() - play.getY() == 57 && play.getX() - playTake.getX() == 114 ){
    1423                 //正左方是否有别的棋子
    1424                 for (int i=0;i<32;i++){
    1425                     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57){
    1426                         Move = 1;
    1427                         break;
    1428                     }
    1429                 }//for
    1430                 
    1431                 Chess = true;
    1432                 
    1433             }//else
    1434             
    1435             //右移、上吃
    1436             else if (play.getY() - playTake.getY() == 57 && playTake.getX() - play.getX() == 114 ){
    1437                 //正右方是否有别的棋子
    1438                 for (int i=0;i<32;i++){
    1439                     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57){
    1440                         Move = 1;
    1441                         break;
    1442                     }
    1443                 }//for
    1444                 
    1445                 Chess = true;
    1446                 
    1447             }//else
    1448             
    1449             //右移、下吃
    1450             else if (playTake.getY() - play.getY() == 57  && playTake.getX() - play.getX() == 114 ){
    1451                 //正右方是否有别的棋子
    1452                 for (int i=0;i<32;i++){
    1453                     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57){
    1454                         Move = 1;
    1455                         break;
    1456                     }
    1457                 }//for
    1458                 
    1459                 Chess = true;
    1460                 
    1461             }//else
    1462             
    1463             //下移、左吃
    1464             else if (playTake.getY() - play.getY() == 114 && play.getX() - playTake.getX() == 57 ){
    1465                 //正下方是否有别的棋子
    1466                 for (int i=0;i<32;i++){
    1467                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == -57 ){
    1468                         Move = 1;
    1469                         break;
    1470                         
    1471                     }
    1472                 }//for
    1473                 
    1474                 Chess = true;
    1475                 
    1476             }//else 
    1477             
    1478             //下移、右吃
    1479             else if (playTake.getY() - play.getY() == 114 && playTake.getX() - play.getX() == 57){
    1480                 //正下方是否有别的棋子
    1481                 for (int i=0;i<32;i++){
    1482                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == -57 ){
    1483                         Move = 1;
    1484                         break;
    1485                     }
    1486                 }//for
    1487                 
    1488                 Chess = true;
    1489                 
    1490             }//else  
    1491             
    1492             //没有障碍、并可以吃棋、不能吃自己颜色
    1493             if (Chess && Move == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){
    1494                 //当前记录添加到集合(用于悔棋)
    1495                 Var.add(String.valueOf(play.isVisible()));
    1496                 Var.add(String.valueOf(play.getX()));
    1497                 Var.add(String.valueOf(play.getY()));
    1498                 Var.add(String.valueOf(Man));
    1499                 
    1500                 //当前记录添加到集合(用于悔棋)
    1501                 Var.add(String.valueOf(playTake.isVisible()));
    1502                 Var.add(String.valueOf(playTake.getX()));
    1503                 Var.add(String.valueOf(playTake.getY()));
    1504                 Var.add(String.valueOf(i));            
    1505                 
    1506                 playTake.setVisible(false);
    1507                 play.setBounds(playTake.getX(),playTake.getY(),55,55);
    1508             }
    1509         }
    1510         
    1511         /**相移动规则*/
    1512         public void elephantRule(int Man,JLabel play,JLabel playQ[],MouseEvent me){
    1513             //坐标和障碍
    1514             int Ex=0,Ey=0,Move=0;
    1515             
    1516             //上左
    1517             if (play.getX() - me.getX() <= 141 && play.getX() - me.getX() >= 87 && play.getY() - me.getY() <= 141 && play.getY() - me.getY() >= 87){
    1518                 //合法的Y坐标
    1519                 for (int i=56;i<=571;i+=57){
    1520                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1521                         Ey = i;
    1522                         break;
    1523                     }
    1524                 }
    1525                 
    1526                 //合法的X坐标
    1527                 for (int i=24;i<=480;i+=57){
    1528                     if (i - me.getX() >= -27 && i-me.getX() <= 27){
    1529                         Ex = i;
    1530                         break;
    1531                     }
    1532                 }
    1533                 
    1534                 //左上方是否有棋子
    1535                 for (int i=0;i<32;i++){
    1536                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == 57){
    1537                         Move++;
    1538                         break;
    1539                     }
    1540                 }
    1541                 
    1542                 //红旗不能过楚河
    1543                 if (Move == 0 && Ey >= 341 && Man > 9){
    1544                     //当前记录添加到集合(用于悔棋)
    1545                     Var.add(String.valueOf(play.isVisible()));
    1546                     Var.add(String.valueOf(play.getX()));
    1547                     Var.add(String.valueOf(play.getY()));
    1548                     Var.add(String.valueOf(Man));
    1549                                 
    1550                                 System.out.println("Ex="+Ex);
    1551                                 System.out.println("Ey="+Ey);
    1552                     play.setBounds(Ex,Ey,55,55);
    1553                 }
    1554                 
    1555                 //黑旗不能过汉界
    1556                 else if (Move == 0 && Ey <= 284 && Man < 10){
    1557                     //当前记录添加到集合(用于悔棋)
    1558                     Var.add(String.valueOf(play.isVisible()));
    1559                     Var.add(String.valueOf(play.getX()));
    1560                     Var.add(String.valueOf(play.getY()));
    1561                     Var.add(String.valueOf(Man));
    1562                     
    1563                     play.setBounds(Ex,Ey,55,55);    
    1564                 }
    1565             }//if
    1566             
    1567             //上右
    1568             else if (play.getY() - me.getY() <= 141 && play.getY() - me.getY() >= 87 &&  me.getX() - play.getX() >= 87 && me.getX() - play.getX() <= 141){
    1569                 //合法的Y坐标
    1570                 for (int i=56;i<=571;i+=57){
    1571                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1572                         Ey = i;
    1573                         break;
    1574                     }
    1575                 }
    1576                 
    1577                 //合法的X坐标
    1578                 for (int i=24;i<=480;i+=57){
    1579                     if (i - me.getX() >= -27 && i-me.getX() <= 27){
    1580                         Ex = i;
    1581                         break;
    1582                     }
    1583                 }
    1584                 
    1585                 //右上方是否有棋子
    1586                 for (int i=0;i<32;i++){
    1587                     if (playQ[i].isVisible() &&  playQ[i].getX() - play.getX() == 57 && play.getY() - playQ[i].getY() == 57){
    1588                         Move++;
    1589                         break;
    1590                     }
    1591                 }
    1592                 
    1593                 //相、象规则
    1594                 if (Move == 0 && Ey >= 341 && Man > 9){
    1595                     //当前记录添加到集合(用于悔棋)
    1596                     Var.add(String.valueOf(play.isVisible()));
    1597                     Var.add(String.valueOf(play.getX()));
    1598                     Var.add(String.valueOf(play.getY()));
    1599                     Var.add(String.valueOf(Man));
    1600                     
    1601                     play.setBounds(Ex,Ey,55,55);
    1602                 }
    1603                 
    1604                 else if (Move == 0 && Ey <= 284 && Man < 10){
    1605                     //当前记录添加到集合(用于悔棋)
    1606                     Var.add(String.valueOf(play.isVisible()));
    1607                     Var.add(String.valueOf(play.getX()));
    1608                     Var.add(String.valueOf(play.getY()));
    1609                     Var.add(String.valueOf(Man));
    1610                     
    1611                     play.setBounds(Ex,Ey,55,55);
    1612                 }
    1613                 
    1614             }// else if 
    1615             
    1616             //下左
    1617             else if (play.getX() - me.getX() <= 141 && play.getX() - me.getX() >= 87 && me.getY() - play.getY() <= 141 && me.getY() - play.getY() >= 87){
    1618                 //合法的Y坐标
    1619                 for (int i=56;i<=571;i+=57){
    1620                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1621                         Ey = i;
    1622                         break;
    1623                     }
    1624                 }
    1625                 
    1626                 //合法的X坐标
    1627                 for (int i=24;i<=480;i+=57){
    1628                     if (i - me.getX() >= -27 && i-me.getX() <= 27){
    1629                         Ex = i;
    1630                         break;
    1631                     }
    1632                 }
    1633                 
    1634                 //下左方是否有棋子
    1635                 for (int i=0;i<32;i++){
    1636                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == -57){
    1637                         Move++;
    1638                         break;
    1639                     }
    1640                 }            
    1641                 
    1642                 //相、象规则
    1643                 
    1644                 if (Move == 0 && Ey >= 341 && Man > 9){
    1645                     //当前记录添加到集合(用于悔棋)
    1646                     Var.add(String.valueOf(play.isVisible()));
    1647                     Var.add(String.valueOf(play.getX()));
    1648                     Var.add(String.valueOf(play.getY()));
    1649                     Var.add(String.valueOf(Man));
    1650                                     
    1651                     play.setBounds(Ex,Ey,55,55);
    1652                 }
    1653                 
    1654                 else if (Move == 0 && Ey <= 284 && Man < 10)
    1655                 {
    1656                     //当前记录添加到集合(用于悔棋)
    1657                     Var.add(String.valueOf(play.isVisible()));
    1658                     Var.add(String.valueOf(play.getX()));
    1659                     Var.add(String.valueOf(play.getY()));
    1660                     Var.add(String.valueOf(Man));
    1661                     
    1662                     play.setBounds(Ex,Ey,55,55);
    1663                 }
    1664             }//else if 
    1665             
    1666             //下右
    1667             else if (me.getX() - play.getX() >= 87 &&  me.getX() - play.getX() <= 141 && me.getY() - play.getY() >= 87 && me.getY() - play.getY() <= 141){
    1668                 //Y        
    1669                 for (int i=56;i<=571;i+=57){
    1670                     if (i - me.getY() >= -27 && i - me.getY() <= 27){
    1671                         Ey = i;
    1672                     }
    1673                 }
    1674                 
    1675                 //X
    1676                 for (int i=24;i<=480;i+=57){
    1677                     if (i - me.getX() >= -27 && i-me.getX() <= 27){
    1678                         Ex = i;
    1679                     }
    1680                 }
    1681                 
    1682                 //下右方是否有棋子
    1683                 for (int i=0;i<32;i++){
    1684                     if (playQ[i].isVisible() && playQ[i].getX() - play.getX() == 57 && playQ[i].getY() - play.getY() == 57){
    1685                         Move = 1;
    1686                         break;
    1687                     }
    1688                 }
    1689                 
    1690                 //相、象规则
    1691                 if (Move == 0 && Ey >= 341 && Man > 9){
    1692                     //当前记录添加到集合(用于悔棋)
    1693                     Var.add(String.valueOf(play.isVisible()));
    1694                     Var.add(String.valueOf(play.getX()));
    1695                     Var.add(String.valueOf(play.getY()));
    1696                     Var.add(String.valueOf(Man));
    1697                     
    1698                     play.setBounds(Ex,Ey,55,55);
    1699                 }
    1700                 
    1701                 else if (Move == 0 && Ey <= 284 && Man < 10){
    1702                     //当前记录添加到集合(用于悔棋)
    1703                     Var.add(String.valueOf(play.isVisible()));
    1704                     Var.add(String.valueOf(play.getX()));                                    
    1705                     Var.add(String.valueOf(play.getY()));
    1706                     Var.add(String.valueOf(Man));
    1707                     
    1708                     play.setBounds(Ex,Ey,55,55);
    1709                 }
    1710                 
    1711             }//else
    1712             
    1713         }//相移动规则吉束
    1714 
    1715         /**相、象吃棋规则*/
    1716         public void elephantRule(JLabel play,JLabel playTake,JLabel playQ[]){
    1717             //障碍
    1718             int Move=0;
    1719             boolean Chess=false;
    1720             
    1721             //吃左上方的棋子
    1722             if (play.getX() - playTake.getX() >= 87 && play.getX() - playTake.getX() <= 141 && play.getY() - playTake.getY() >= 87 && play.getY() - playTake.getY() <= 141){
    1723                 //左上方是否有棋子
    1724                 for (int i=0;i<32;i++){
    1725                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == 57){
    1726                         Move++;
    1727                         break;
    1728                     }
    1729                 }//for
    1730 
    1731                 Chess=true;
    1732                 
    1733             }//if
    1734             
    1735             //吃右上方的棋子
    1736             else if (playTake.getX() - play.getX() >= 87 && playTake.getX() - play.getX() <= 141 && play.getY() - playTake.getY() >= 87 && play.getY() - playTake.getY() <= 141 ){
    1737                 //右上方是否有棋子
    1738                 for (int i=0;i<32;i++){
    1739                     if (playQ[i].isVisible() &&  playQ[i].getX() - play.getX() == 57 && play.getY() - playQ[i].getY() == 57 ){
    1740                         Move++;
    1741                         break;
    1742                     }
    1743                 }//for    
    1744                 
    1745                 Chess=true;
    1746             }//else
    1747             
    1748             //吃下左方的棋子
    1749             else if (play.getX() - playTake.getX() >= 87 && play.getX() - playTake.getX() <= 141 && playTake.getY() - play.getY() >= 87 && playTake.getY() - play.getY() <= 141){
    1750                 //下左方是否有棋子
    1751                 for (int i=0;i<32;i++){
    1752                     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == -57 ){
    1753                         Move++;
    1754                         break;
    1755                     }
    1756                 }//for
    1757                 
    1758                 Chess=true;
    1759             }//else
    1760             
    1761             //吃下右放的棋子
    1762             else if (playTake.getX() - play.getX() >= 87 && playTake.getX() - play.getX() <= 141 && playTake.getY() - play.getY() >= 87 && playTake.getY() - play.getY() <= 141){
    1763                 //下右方是否有棋子
    1764                 for (int i=0;i<32;i++){
    1765                     if (playQ[i].isVisible() && playQ[i].getX() - play.getX() == 57 && playQ[i].getY() - play.getY() == 57 ){
    1766                         Move = 1;
    1767                         break;
    1768                     }
    1769                 }//for        
    1770 
    1771                 Chess=true;
    1772                 
    1773             }//else
    1774             
    1775             //没有障碍、并不能吃自己的棋子
    1776             if (Chess && Move == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){
    1777                 //当前记录添加到集合(用于悔棋)
    1778                 Var.add(String.valueOf(play.isVisible()));
    1779                 Var.add(String.valueOf(play.getX()));
    1780                 Var.add(String.valueOf(play.getY()));
    1781                 Var.add(String.valueOf(Man));
    1782                 
    1783                 //当前记录添加到集合(用于悔棋)
    1784                 Var.add(String.valueOf(playTake.isVisible()));
    1785                 Var.add(String.valueOf(playTake.getX()));
    1786                 Var.add(String.valueOf(playTake.getY()));
    1787                 Var.add(String.valueOf(i));
    1788                 
    1789                 playTake.setVisible(false);
    1790                 play.setBounds(playTake.getX(),playTake.getY(),55,55);
    1791             }
    1792             
    1793         }//相、象吃棋规则结束
    1794         
    1795         /**士、仕移动方法*/
    1796         public void chapRule(int Man,JLabel play,JLabel playQ[],MouseEvent me){
    1797             //上、右
    1798             if (me.getX() - play.getX() >= 29 && me.getX() - play.getX() <= 114 && play.getY() - me.getY() >= 25 && play.getY() - me.getY() <= 90){
    1799                 //士不能超过自己的界限
    1800                 if (Man < 14 && (play.getX()+57) >= 195 && (play.getX()+57) <= 309 && (play.getY()-57) <= 170){
    1801                     //当前记录添加到集合(用于悔棋)
    1802                     Var.add(String.valueOf(play.isVisible()));
    1803                     Var.add(String.valueOf(play.getX()));
    1804                     Var.add(String.valueOf(play.getY()));
    1805                     Var.add(String.valueOf(Man));
    1806                     
    1807                     play.setBounds(play.getX()+57,play.getY()-57,55,55);
    1808                 }    
    1809                 
    1810                 //仕不能超过自己的界限
    1811                 else if (Man > 13 && (play.getY()-57) >= 455 && (play.getX()+57)  >= 195 && (play.getX()+57) <= 309){
    1812                     //当前记录添加到集合(用于悔棋)
    1813                     Var.add(String.valueOf(play.isVisible()));
    1814                     Var.add(String.valueOf(play.getX()));
    1815                     Var.add(String.valueOf(play.getY()));
    1816                     Var.add(String.valueOf(Man));
    1817                     
    1818                     play.setBounds(play.getX()+57,play.getY()-57,55,55);
    1819                 }    
    1820             }// else if 
    1821             
    1822             //上、左
    1823             else if (play.getX() - me.getX() <= 114 && play.getX() - me.getX() >= 25 && play.getY() - me.getY() >= 20 && play.getY() - me.getY() <= 95){
    1824                 //士不能超过自己的界限
    1825                 if (Man < 14 &&  (play.getX()-57) >= 195 && (play.getX()-57) <= 309 && (play.getY()-57) <= 170  ){
    1826                     //当前记录添加到集合(用于悔棋)
    1827                     Var.add(String.valueOf(play.isVisible()));
    1828                     Var.add(String.valueOf(play.getX()));
    1829                     Var.add(String.valueOf(play.getY()));
    1830                     Var.add(String.valueOf(Man));
    1831                     
    1832                     play.setBounds(play.getX()-57,play.getY()-57,55,55);
    1833                 }    
    1834                 
    1835                 //仕不能超过自己的界限
    1836                 else if (Man > 13 &&(play.getY()-57) >= 455 && (play.getX()-57)  >= 195 && (play.getX()-57) <= 309){
    1837                     //当前记录添加到集合(用于悔棋)
    1838                     Var.add(String.valueOf(play.isVisible()));
    1839                     Var.add(String.valueOf(play.getX()));
    1840                     Var.add(String.valueOf(play.getY()));
    1841                     Var.add(String.valueOf(Man));
    1842                     
    1843                     play.setBounds(play.getX()-57,play.getY()-57,55,55);
    1844                 }    
    1845             }// else if 
    1846             
    1847             //下、左
    1848             else if (play.getX() - me.getX() <= 114 && play.getX() - me.getX() >= 20 && me.getY() - play.getY() >= 2 && me.getY() - play.getY() <= 87){
    1849                 //士不能超过自己的界限
    1850                 if (Man < 14 && (play.getX()-57) >= 195 && (play.getX()-57) <= 309 && (play.getY()+57) <= 170 ){
    1851                     //当前记录添加到集合(用于悔棋)
    1852                     Var.add(String.valueOf(play.isVisible()));
    1853                     Var.add(String.valueOf(play.getX()));
    1854                     Var.add(String.valueOf(play.getY()));
    1855                     Var.add(String.valueOf(Man));
    1856                     
    1857                     play.setBounds(play.getX()-57,play.getY()+57,55,55);
    1858                 }    
    1859                 
    1860                 //仕不能超过自己的界限
    1861                 else if (Man > 13 && (play.getY()+57) >= 455 && (play.getX()-57)  >= 195 && (play.getX()-57) <= 309){
    1862                     //当前记录添加到集合(用于悔棋)
    1863                     Var.add(String.valueOf(play.isVisible()));
    1864                     Var.add(String.valueOf(play.getX()));
    1865                     Var.add(String.valueOf(play.getY()));
    1866                     Var.add(String.valueOf(Man));
    1867                     
    1868                     play.setBounds(play.getX()-57,play.getY()+57,55,55);
    1869                 }
    1870                 
    1871             }// else if 
    1872             
    1873             
    1874             //下、右
    1875             else if (me.getX() - play.getX() >= 27 && me.getX() - play.getX() <= 114 && me.getY() - play.getY() >= 2 && me.getY() - play.getY() <= 87){
    1876                 //士不能超过自己的界限
    1877                 if (Man < 14 && (play.getX()+57) >= 195 && (play.getX()+57) <= 309 && (play.getY()+57) <= 170){
    1878                     //当前记录添加到集合(用于悔棋)
    1879                     Var.add(String.valueOf(play.isVisible()));
    1880                     Var.add(String.valueOf(play.getX()));
    1881                     Var.add(String.valueOf(play.getY()));
    1882                     Var.add(String.valueOf(Man));
    1883                     
    1884                     play.setBounds(play.getX()+57,play.getY()+57,55,55);
    1885                 }
    1886                 
    1887                 //仕不能超过自己的界限
    1888                 else if (Man > 13 &&(play.getY()+57) >= 455 && (play.getX()+57)  >= 195 && (play.getX()+57) <= 309){
    1889                     //当前记录添加到集合(用于悔棋)
    1890                     Var.add(String.valueOf(play.isVisible()));
    1891                     Var.add(String.valueOf(play.getX()));
    1892                     Var.add(String.valueOf(play.getY()));
    1893                     Var.add(String.valueOf(Man));
    1894                     
    1895                     play.setBounds(play.getX()+57,play.getY()+57,55,55);
    1896                 }
    1897             }//else if 
    1898             
    1899         }//士、仕移动规则结束
    1900 
    1901 
    1902         /**士、仕吃棋规则*/
    1903         public void chapRule(int Man ,JLabel play,JLabel playTake,JLabel playQ[]){
    1904             //当前状态
    1905             boolean Chap = false;    
    1906             
    1907             //上、右
    1908             if (playTake.getX() - play.getX() >= 20 && playTake.getX() - play.getX() <= 114 && play.getY() - playTake.getY() >= 2 && play.getY() - playTake.getY() <= 87){
    1909                 //被吃的棋子是否和当前士相近
    1910                 if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){
    1911                     Chap = true;
    1912                 }
    1913                 
    1914                 //被吃的棋子是否和当前仕相近
    1915                 else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){
    1916                     Chap = true;
    1917                 }
    1918             }//if
    1919             
    1920             //上、左
    1921             else if (play.getX() - playTake.getX() <= 114 && play.getX() - playTake.getX() >= 25 && play.getY() - playTake.getY() >= 2 && play.getY() - playTake.getY() <= 87){
    1922                 //被吃的棋子是否和当前士相近
    1923                 if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){
    1924                     Chap = true;
    1925                 }
    1926                 
    1927                 //被吃的棋子是否和当前仕相近
    1928                 else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){
    1929                     Chap = true;
    1930                 }
    1931             }// else if 
    1932             
    1933             //下、左
    1934             else if (play.getX() - playTake.getX() <= 114 && play.getX() - playTake.getX() >= 25 && playTake.getY() - play.getY() >= 2 && playTake.getY() - play.getY() <= 87){
    1935                 //被吃的棋子是否和当前士相近
    1936                 if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){
    1937                     Chap = true;
    1938                 }
    1939                 
    1940                 //被吃的棋子是否和当前仕相近
    1941                 else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){
    1942                     Chap = true;
    1943                 }
    1944             }// else if 
    1945             
    1946             //下、右
    1947             else if (playTake.getX() - play.getX() >= 25 && playTake.getX() - play.getX() <= 114 && playTake.getY() - play.getY() >= 2 && playTake.getY() - play.getY() <= 87){
    1948                 //被吃的棋子是否和当前士相近
    1949                 if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){
    1950                     Chap = true;
    1951                 }
    1952                 
    1953                 //被吃的棋子是否和当前仕相近
    1954                 else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){
    1955                     Chap = true;
    1956                 }
    1957             }//else if 
    1958             
    1959             //可移动、并不能吃自己的棋子
    1960             if (Chap && playTake.getName().charAt(1) != play.getName().charAt(1)){
    1961                 //当前记录添加到集合(用于悔棋)
    1962                 Var.add(String.valueOf(play.isVisible()));
    1963                 Var.add(String.valueOf(play.getX()));
    1964                 Var.add(String.valueOf(play.getY()));
    1965                 Var.add(String.valueOf(Man));
    1966                 
    1967                 //当前记录添加到集合(用于悔棋)
    1968                 Var.add(String.valueOf(playTake.isVisible()));
    1969                 Var.add(String.valueOf(playTake.getX()));
    1970                 Var.add(String.valueOf(playTake.getY()));
    1971                 Var.add(String.valueOf(i));
    1972                 
    1973                 playTake.setVisible(false);
    1974                 play.setBounds(playTake.getX(),playTake.getY(),55,55);
    1975             }
    1976             
    1977         }//士、仕吃棋规则结束
    1978         
    1979         /**将移动规则*/
    1980         public void willRule(int Man,JLabel play,JLabel playQ[],MouseEvent me){
    1981             //向上
    1982             if ((me.getX()-play.getX()) >= 0 && (me.getX()-play.getX()) <= 55 && (play.getY()-me.getY()) >=2 && play.getY()-me.getY() <= 87){
    1983                 //将是否超过自己的界限
    1984                 if (Man == 30 && me.getX() >= 195 && me.getX() <= 359 && me.getY() <= 170){
    1985                     //当前记录添加到集合(用于悔棋)
    1986                     Var.add(String.valueOf(play.isVisible()));
    1987                     Var.add(String.valueOf(play.getX()));
    1988                     Var.add(String.valueOf(play.getY()));
    1989                     Var.add(String.valueOf(Man));
    1990                     
    1991                     play.setBounds(play.getX(),play.getY()-57,55,55);    
    1992                 }    
    1993                 
    1994                 //帅是否超过自己的界限
    1995                 else if (Man == 31 && me.getY() >= 455 && me.getX() >= 195 && me.getX() <= 359){
    1996                     //当前记录添加到集合(用于悔棋)
    1997                     Var.add(String.valueOf(play.isVisible()));
    1998                     Var.add(String.valueOf(play.getX()));
    1999                     Var.add(String.valueOf(play.getY()));
    2000                     Var.add(String.valueOf(Man));
    2001                     
    2002                     play.setBounds(play.getX(),play.getY()-57,55,55);
    2003                 }
    2004             }//if
    2005             
    2006             //向左
    2007             else if (play.getX() - me.getX() >= 2 && play.getX() - me.getX() <= 57 && me.getY() - play.getY() <= 27 && me.getY() - play.getY() >= -27){
    2008                 //将是否超过自己的界限
    2009                 if (Man == 30 && me.getX() >= 195 && me.getX() <= 359 && me.getY() <= 170){
    2010                     //当前记录添加到集合(用于悔棋)
    2011                     Var.add(String.valueOf(play.isVisible()));
    2012                     Var.add(String.valueOf(play.getX()));
    2013                     Var.add(String.valueOf(play.getY()));
    2014                     Var.add(String.valueOf(Man));
    2015                     
    2016                     play.setBounds(play.getX()-57,play.getY(),55,55);
    2017                 }
    2018                 
    2019                 //帅是否超过自己的界限
    2020                 else if (Man == 31 && me.getY() >= 455 && me.getX() >= 195 && me.getX() <= 359){
    2021                     //当前记录添加到集合(用于悔棋)
    2022                     Var.add(String.valueOf(play.isVisible()));
    2023                     Var.add(String.valueOf(play.getX()));
    2024                     Var.add(String.valueOf(play.getY()));
    2025                     Var.add(String.valueOf(Man));
    2026                     
    2027                     play.setBounds(play.getX()-57,play.getY(),55,55);
    2028                 }
    2029             }//else if 
    2030             
    2031             //向右
    2032             else if (me.getX() - play.getX() >= 57 && me.getX() - play.getX() <= 112 && me.getY() - play.getY() <= 27 && me.getY() - play.getY() >= -27){
    2033                 //将、帅规则
    2034                 if (Man == 30 && me.getX() >= 195 && me.getX() <= 359 && me.getY() <= 170){
    2035                     //当前记录添加到集合(用于悔棋)
    2036                     Var.add(String.valueOf(play.isVisible()));
    2037                     Var.add(String.valueOf(play.getX()));
    2038                     Var.add(String.valueOf(play.getY()));
    2039                     Var.add(String.valueOf(Man));
    2040                     
    2041                     play.setBounds(play.getX()+57,play.getY(),55,55);    
    2042                 }    
    2043                 
    2044                 else if (Man == 31 && me.getY() >= 455 && me.getX() >= 195 && me.getX() <= 359){
    2045                     //当前记录添加到集合(用于悔棋)
    2046                     Var.add(String.valueOf(play.isVisible()));
    2047                     Var.add(String.valueOf(play.getX()));    
    2048                     Var.add(String.valueOf(play.getY()));
    2049                     Var.add(String.valueOf(Man));
    2050                     
    2051                     play.setBounds(play.getX()+57,play.getY(),55,55);
    2052                 }
    2053             }//else if 
    2054             
    2055             //向下
    2056             else if (me.getX() - play.getX() >= 0 && me.getX() - play.getX() <= 55 && me.getY() - play.getY() <= 87 && me.getY() - play.getY() >= 27){
    2057                 //将、帅规则
    2058                 if (Man == 30 && me.getX() >= 195 && me.getX() <= 359 && me.getY() <= 170){
    2059                     //当前记录添加到集合(用于悔棋)
    2060                     Var.add(String.valueOf(play.isVisible()));
    2061                     Var.add(String.valueOf(play.getX()));
    2062                     Var.add(String.valueOf(play.getY()));
    2063                     Var.add(String.valueOf(Man));
    2064                     
    2065                     play.setBounds(play.getX(),play.getY()+57,55,55);
    2066                 }
    2067                 
    2068                 else if (Man == 31 && me.getY() >= 455 && me.getX() >= 195 && me.getX() <= 359){
    2069                     //当前记录添加到集合(用于悔棋)
    2070                     Var.add(String.valueOf(play.isVisible()));
    2071                     Var.add(String.valueOf(play.getX()));
    2072                     Var.add(String.valueOf(play.getY()));
    2073                     Var.add(String.valueOf(Man));
    2074                 
    2075                     play.setBounds(play.getX(),play.getY()+57,55,55);
    2076                 }
    2077 
    2078             }//else if
    2079             
    2080         }//将、帅移动规则结束
    2081 
    2082         public void willRule(int Man ,JLabel play,JLabel playTake ,JLabel playQ[]){
    2083             //当前状态
    2084             boolean will = false;
    2085             
    2086             //向上吃
    2087             if (play.getX() - playTake.getX() >= 0 && play.getX() - playTake.getX() <= 55 && play.getY() - playTake.getY() >= 27 && play.getY() - playTake.getY() <= 87 && playTake.isVisible()){
    2088                 //被吃的棋子是否和当前将相近
    2089                 if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){
    2090                     will = true;
    2091                 }
    2092                 
    2093                 //被吃的棋子是否和当前帅相近
    2094                 else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){
    2095                     will = true; 
    2096                 }
    2097             }
    2098             
    2099             //向左吃
    2100             else if (play.getX() - playTake.getX() >= 2 && play.getX() - playTake.getX() <= 57 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= -27 && playTake.isVisible()){
    2101                 //被吃的棋子是否和当前将相近
    2102                 if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){
    2103                     will = true;
    2104                 }
    2105                 
    2106                 //被吃的棋子是否和当前帅相近
    2107                 else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){
    2108                     will = true; 
    2109                 }
    2110             }
    2111             
    2112             //向右吃
    2113             else if (playTake.getX() - play.getX() >= 2 && playTake.getX() - play.getX() <= 57 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= -27 && playTake.isVisible()){
    2114                 //被吃的棋子是否和当前将相近
    2115                 if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){
    2116                     will = true;
    2117                 }
    2118                 
    2119                 //被吃的棋子是否和当前帅相近
    2120                 else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){
    2121                     will = true; 
    2122                 }
    2123             }
    2124             
    2125             //向下
    2126             else if (playTake.getX() - play.getX() >= 0 && playTake.getX() - play.getX() <= 87 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= 40 && playTake.isVisible()){
    2127                 //被吃的棋子是否和当前将相近
    2128                 if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){
    2129                     will = true;
    2130                 }
    2131                 
    2132                 //被吃的棋子是否和当前帅相近
    2133                 else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){
    2134                     will = true; 
    2135                 }
    2136             }
    2137                 
    2138             //不能吃自己的棋子、符合当前要求    
    2139             if (playTake.getName().charAt(1) != play.getName().charAt(1) && will){
    2140                 //当前记录添加到集合(用于悔棋)
    2141                 Var.add(String.valueOf(play.isVisible()));
    2142                 Var.add(String.valueOf(play.getX()));
    2143                 Var.add(String.valueOf(play.getY()));
    2144                 Var.add(String.valueOf(Man));
    2145                 
    2146                 //当前记录添加到集合(用于悔棋)
    2147                 Var.add(String.valueOf(playTake.isVisible()));
    2148                 Var.add(String.valueOf(playTake.getX()));
    2149                 Var.add(String.valueOf(playTake.getY()));
    2150                 Var.add(String.valueOf(i));
    2151 
    2152                 playTake.setVisible(false);
    2153                 play.setBounds(playTake.getX(),playTake.getY(),55,55);
    2154             }            
    2155             
    2156         }//将、帅吃规则结束
    2157         
    2158     }//规则类
    2159     
    2160 }//主框架类
    View Code
  • 相关阅读:
    爬过的第一个坑
    Ecshop后台邮件群发
    ECShop 首页调用积分商城里面的的商品
    隐藏select右边的箭头按钮
    让IE6支持PNG透明图片
    PHP替换函数,一些正则!
    php判断终端是手机还是电脑访问网站代码
    ECshop在文章列表页调用文章简介
    Ecshop删除no_license点击查看 云登陆失败,您未有license
    Ecshop商品相册鼠标经过小图切换显示大图
  • 原文地址:https://www.cnblogs.com/lyunyu/p/3104283.html
Copyright © 2011-2022 走看看