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 }//主框架类