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