java實現象棋小游戲
本文實例為大家分享了java實現象棋小游戲的具體代碼,供大家參考,具體內容如下
用Eclipse編寫 java環境1.8jdk
代碼如下
package xiangqi象棋;/** *中國象棋Java版V3.0 *源文件:Chess.java *添加功能:實現了當前棋局的保存 **/import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.io.*;//主類public class Chess{ public static void main(String args[]){ new ChessMainFrame('中國象棋,楚漢兩界,有 死有生'); }}//主框架類class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{ //玩家 JLabel play[] = new JLabel[32]; //棋盤 JLabel image; //窗格 Container con; //工具欄 JToolBar jmain; //重新開始 JButton anew; //悔棋 JButton repent; //退出 JButton exit; //當前信息 JLabel text; //保存當前操作 Vector<String> Var; //規則類對象(使于調用方法) ChessRule rule; /** ** 單擊棋子 ** chessManClick = true 閃爍棋子 并給線程響應 ** chessManClick = false 吃棋子 停止閃爍 并給線程響應 */ boolean chessManClick; /** ** 控制玩家走棋 ** chessPlayClick=1 黑棋走棋 ** chessPlayClick=2 紅棋走棋 默認紅棋 ** chessPlayClick=3 雙方都不能走棋 */ int chessPlayClick=2; //控制棋子閃爍的線程 Thread tmain; //把第一次的單擊棋子給線程響應 static int Man,i; ChessMainFrame(){ new ChessMainFrame('中國象棋'); } /** ** 構造函數 ** 初始化圖形用戶界面 */ ChessMainFrame(String Title){ //改變系統默認字體 Font font = new Font('Dialog', Font.PLAIN, 12); java.util.Enumeration keys = UIManager.getDefaults().keys(); while (keys.hasMoreElements()) { Object key = keys.nextElement(); Object value = UIManager.get(key); if (value instanceof javax.swing.plaf.FontUIResource) { UIManager.put(key, font); } } //獲行客格引用 con = this.getContentPane(); con.setLayout(null); //實例化規則類 rule = new ChessRule(); Var = new Vector(); //創建工具欄 jmain = new JToolBar(); text = new JLabel('歡迎使用象棋對弈系統'); //當鼠標放上顯示信息 text.setToolTipText('信息提示'); anew = new JButton(' 新 游 戲 '); anew.setToolTipText('重新開始新的一局'); exit = new JButton(' 退 出 '); exit.setToolTipText('退出象棋程序程序'); repent = new JButton(' 悔 棋 '); repent.setToolTipText('返回到上次走棋的位置'); //把組件添加到工具欄 jmain.setLayout(new GridLayout(0,4)); jmain.add(anew); jmain.add(repent); jmain.add(exit); jmain.add(text); jmain.setBounds(0,0,558,30); con.add(jmain); //添加棋子標簽 drawChessMan(); //注冊按扭監聽 anew.addActionListener(this); repent.addActionListener(this); exit.addActionListener(this); //注冊棋子移動監聽 for (int i=0;i<32;i++){ con.add(play[i]); play[i].addMouseListener(this); } //添加棋盤標簽 con.add(image = new JLabel(new ImageIcon('imageMain.GIF'))); image.setBounds(0,30,558,620); image.addMouseListener(this); //注冊窗體關閉監聽 this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent we){ System.exit(0); } } ); //窗體居中 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = this.getSize(); if (frameSize.height > screenSize.height){ frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width){ frameSize.width = screenSize.width; } this.setLocation((screenSize.width - frameSize.width) / 2 - 280 ,(screenSize.height - frameSize.height ) / 2 - 350); //設置 this.setIconImage(new ImageIcon('image紅將.GIF').getImage()); this.setResizable(false); this.setTitle(Title); this.setSize(558,670); this.show(); } /** ** 添加棋子方法 */ public void drawChessMan(){ //流程控制 int i,k; //圖標 Icon in; //黑色棋子 //車 in = new ImageIcon('image黑車.GIF'); for (i=0,k=24;i<2;i++,k+=456){ play[i] = new JLabel(in); play[i].setBounds(k,56,55,55); play[i].setName('車1'); } //馬 in = new ImageIcon('image黑馬.GIF'); for (i=4,k=81;i<6;i++,k+=342){ play[i] = new JLabel(in); play[i].setBounds(k,56,55,55); play[i].setName('馬1'); } //相 in = new ImageIcon('image黑象.GIF'); for (i=8,k=138;i<10;i++,k+=228){ play[i] = new JLabel(in); play[i].setBounds(k,56,55,55); play[i].setName('象1'); } //士 in = new ImageIcon('image黑士.GIF'); for (i=12,k=195;i<14;i++,k+=114){ play[i] = new JLabel(in); play[i].setBounds(k,56,55,55); play[i].setName('士1'); } //卒 in = new ImageIcon('image黑卒.GIF'); for (i=16,k=24;i<21;i++,k+=114){ play[i] = new JLabel(in); play[i].setBounds(k,227,55,55); play[i].setName('卒1' + i); } //炮 in = new ImageIcon('image黑炮.GIF'); for (i=26,k=81;i<28;i++,k+=342){ play[i] = new JLabel(in); play[i].setBounds(k,170,55,55); play[i].setName('炮1' + i); } //將 in = new ImageIcon('image黑將.GIF'); play[30] = new JLabel(in); play[30].setBounds(252,56,55,55); play[30].setName('將1'); //紅色棋子 //車 in = new ImageIcon('image紅車.GIF'); for (i=2,k=24;i<4;i++,k+=456){ play[i] = new JLabel(in); play[i].setBounds(k,569,55,55); play[i].setName('車2'); } //馬 in = new ImageIcon('image紅馬.GIF'); for (i=6,k=81;i<8;i++,k+=342){ play[i] = new JLabel(in); play[i].setBounds(k,569,55,55); play[i].setName('馬2'); } //相 in = new ImageIcon('image紅象.GIF'); for (i=10,k=138;i<12;i++,k+=228){ play[i] = new JLabel(in); play[i].setBounds(k,569,55,55); play[i].setName('象2'); } //士 in = new ImageIcon('image紅士.GIF'); for (i=14,k=195;i<16;i++,k+=114){ play[i] = new JLabel(in); play[i].setBounds(k,569,55,55); play[i].setName('士2'); } //兵 in = new ImageIcon('image紅卒.GIF'); for (i=21,k=24;i<26;i++,k+=114){ play[i] = new JLabel(in); play[i].setBounds(k,398,55,55); play[i].setName('卒2' + i); } //炮 in = new ImageIcon('image紅炮.GIF'); for (i=28,k=81;i<30;i++,k+=342){ play[i] = new JLabel(in); play[i].setBounds(k,455,55,55); play[i].setName('炮2' + i); } //帥 in = new ImageIcon('image紅將.GIF'); play[31] = new JLabel(in); play[31].setBounds(252,569,55,55); play[31].setName('帥2'); } /** ** 線程方法控制棋子閃爍 */ public void run(){ while (true){ //單擊棋子第一下開始閃爍 if (chessManClick){ play[Man].setVisible(false); //時間控制 try{ tmain.sleep(200); } catch(Exception e){ } play[Man].setVisible(true); } //閃爍當前提示信息 以免用戶看不見 else { text.setVisible(false); //時間控制 try{ tmain.sleep(250); } catch(Exception e){ } text.setVisible(true); } try{ tmain.sleep(350); } catch (Exception e){ } } } /** ** 單擊棋子方法 */ public void mouseClicked(MouseEvent me){ System.out.println('Mouse'); //當前坐標 int Ex=0,Ey=0; //啟動線程 if (tmain == null){ tmain = new Thread(this); tmain.start(); } //單擊棋盤(移動棋子) if (me.getSource().equals(image)){ //該紅棋走棋的時候 if (chessPlayClick == 2 && play[Man].getName().charAt(1) == ’2’){ Ex = play[Man].getX(); Ey = play[Man].getY(); //移動卒、兵 if (Man > 15 && Man < 26){ rule.armsRule(Man,play[Man],me); } //移動炮 else if (Man > 25 && Man < 30){ rule.cannonRule(play[Man],play,me); } //移動車 else if (Man >=0 && Man < 4){ rule.cannonRule(play[Man],play,me); } //移動馬 else if (Man > 3 && Man < 8){ rule.horseRule(play[Man],play,me); } //移動相、象 else if (Man > 7 && Man < 12){ rule.elephantRule(Man,play[Man],play,me); } //移動仕、士 else if (Man > 11 && Man < 16){ rule.chapRule(Man,play[Man],play,me); } //移動將、帥 else if (Man == 30 || Man == 31){ rule.willRule(Man,play[Man],play,me); } //是否走棋錯誤(是否在原地沒有動) if (Ex == play[Man].getX() && Ey == play[Man].getY()){ text.setText(' 紅棋走棋'); chessPlayClick=2; } else { text.setText(' 黑棋走棋'); chessPlayClick=1; } }//if //該黑棋走棋的時候 else if (chessPlayClick == 1 && play[Man].getName().charAt(1) == ’1’){ Ex = play[Man].getX(); Ey = play[Man].getY(); //移動卒、兵 if (Man > 15 && Man < 26){ rule.armsRule(Man,play[Man],me); } //移動炮 else if (Man > 25 && Man < 30){ rule.cannonRule(play[Man],play,me); } //移動車 else if (Man >=0 && Man < 4){ rule.cannonRule(play[Man],play,me); } //移動馬 else if (Man > 3 && Man < 8){ rule.horseRule(play[Man],play,me); } //移動相、象 else if (Man > 7 && Man < 12){ rule.elephantRule(Man,play[Man],play,me); } //移動仕、士 else if (Man > 11 && Man < 16){ rule.chapRule(Man,play[Man],play,me); } //移動將、帥 else if (Man == 30 || Man == 31){ rule.willRule(Man,play[Man],play,me); } //是否走棋錯誤(是否在原地沒有動) if (Ex == play[Man].getX() && Ey == play[Man].getY()){ text.setText(' 黑棋走棋'); chessPlayClick=1; } else { text.setText(' 紅棋走棋'); chessPlayClick=2; } }//else if //當前沒有操作(停止閃爍) chessManClick=false; }//if //單擊棋子 else{ //第一次單擊棋子(閃爍棋子) if (!chessManClick){ for (int i=0;i<32;i++){ //被單擊的棋子 if (me.getSource().equals(play[i])){ //告訴線程讓該棋子閃爍 Man=i; //開始閃爍 chessManClick=true; break; } }//for }//if //第二次單擊棋子(吃棋子) else if (chessManClick){ //當前沒有操作(停止閃爍) chessManClick=false; for (i=0;i<32;i++){ //找到被吃的棋子 if (me.getSource().equals(play[i])){ //該紅棋吃棋的時候 if (chessPlayClick == 2 && play[Man].getName().charAt(1) == ’2’){ Ex = play[Man].getX(); Ey = play[Man].getY(); //卒、兵吃規則 if (Man > 15 && Man < 26){ rule.armsRule(play[Man],play[i]); } //炮吃規則 else if (Man > 25 && Man < 30){ rule.cannonRule(0,play[Man],play[i],play,me); } //車吃規則 else if (Man >=0 && Man < 4){ rule.cannonRule(1,play[Man],play[i],play,me); } //馬吃規則 else if (Man > 3 && Man < 8){ rule.horseRule(play[Man],play[i],play,me); } //相、象吃規則 else if (Man > 7 && Man < 12){ rule.elephantRule(play[Man],play[i],play); } //士、仕吃棋規則 else if (Man > 11 && Man < 16){ rule.chapRule(Man,play[Man],play[i],play); } //將、帥吃棋規則 else if (Man == 30 || Man == 31){ rule.willRule(Man,play[Man],play[i],play); play[Man].setVisible(true); } //是否走棋錯誤(是否在原地沒有動) if (Ex == play[Man].getX() && Ey == play[Man].getY()){ text.setText(' 紅棋走棋'); chessPlayClick=2; break; } else{ text.setText(' 黑棋走棋'); chessPlayClick=1; break; } }//if //該黑棋吃棋的時候 else if (chessPlayClick == 1 && play[Man].getName().charAt(1) == ’1’){ Ex = play[Man].getX(); Ey = play[Man].getY(); //卒吃規則 if (Man > 15 && Man < 26){ rule.armsRule(play[Man],play[i]); } //炮吃規則 else if (Man > 25 && Man < 30){ rule.cannonRule(0,play[Man],play[i],play,me); } //車吃規則 else if (Man >=0 && Man < 4){ rule.cannonRule(1,play[Man],play[i],play,me); } //馬吃規則 else if (Man > 3 && Man < 8){ rule.horseRule(play[Man],play[i],play,me); } //相、象吃規則 else if (Man > 7 && Man < 12){ rule.elephantRule(play[Man],play[i],play); } //士、仕吃棋規則 else if (Man > 11 && Man < 16){ rule.chapRule(Man,play[Man],play[i],play); } //將、帥吃棋規則 else if (Man == 30 || Man == 31){ rule.willRule(Man,play[Man],play[i],play); play[Man].setVisible(true); } //是否走棋錯誤(是否在原地沒有動) if (Ex == play[Man].getX() && Ey == play[Man].getY()){ text.setText(' 黑棋走棋'); chessPlayClick=1; break; } else { text.setText(' 紅棋走棋'); chessPlayClick=2; break; } }//else if }//if }//for //是否勝利 if (!play[31].isVisible()){ JOptionPane.showConfirmDialog( this,'黑棋勝利','玩家一勝利', JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE); //雙方都不可以在走棋了 chessPlayClick=3; text.setText(' 黑棋勝利'); }//if else if (!play[30].isVisible()){ JOptionPane.showConfirmDialog( this,'紅棋勝利','玩家二勝利', JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE); chessPlayClick=3; text.setText(' 紅棋勝利'); }//else if }//else }//else } public void mousePressed(MouseEvent me){ } public void mouseReleased(MouseEvent me){ } public void mouseEntered(MouseEvent me){ } public void mouseExited(MouseEvent me){ } /** ** 定義按鈕的事件響應 */ public void actionPerformed(ActionEvent ae) { //重新開始按鈕 if (ae.getSource().equals(anew)){ int i,k; //重新排列每個棋子的位置 //黑色棋子 //車 for (i=0,k=24;i<2;i++,k+=456){ play[i].setBounds(k,56,55,55); } //馬 for (i=4,k=81;i<6;i++,k+=342){ play[i].setBounds(k,56,55,55); } //相 for (i=8,k=138;i<10;i++,k+=228){ play[i].setBounds(k,56,55,55); } //士 for (i=12,k=195;i<14;i++,k+=114){ play[i].setBounds(k,56,55,55); } //卒 for (i=16,k=24;i<21;i++,k+=114){ play[i].setBounds(k,227,55,55); } //炮 for (i=26,k=81;i<28;i++,k+=342){ play[i].setBounds(k,170,55,55); } //將 play[30].setBounds(252,56,55,55); //紅色棋子 //車 for (i=2,k=24;i<4;i++,k+=456){ play[i].setBounds(k,569,55,55); } //馬 for (i=6,k=81;i<8;i++,k+=342){ play[i].setBounds(k,569,55,55); } //相 for (i=10,k=138;i<12;i++,k+=228){ play[i].setBounds(k,569,55,55); } //士 for (i=14,k=195;i<16;i++,k+=114){ play[i].setBounds(k,569,55,55); } //兵 for (i=21,k=24;i<26;i++,k+=114){ play[i].setBounds(k,398,55,55); } //炮 for (i=28,k=81;i<30;i++,k+=342){ play[i].setBounds(k,455,55,55); } //帥 play[31].setBounds(252,569,55,55); chessPlayClick = 2; text.setText(' 紅棋走棋'); for (i=0;i<32;i++){ play[i].setVisible(true); } //清除Vector中的內容 Var.clear(); } //悔棋按鈕 else if (ae.getSource().equals(repent)){ try{ //獲得setVisible屬性值 String S = (String)Var.get(Var.size()-4); //獲得X坐標 int x = Integer.parseInt((String)Var.get(Var.size()-3)); //獲得Y坐標 int y = Integer.parseInt((String)Var.get(Var.size()-2)); //獲得索引 int M = Integer.parseInt((String)Var.get(Var.size()-1)); //賦給棋子 play[M].setVisible(true); play[M].setBounds(x,y,55,55); if (play[M].getName().charAt(1) == ’1’){ text.setText(' 黑棋走棋'); chessPlayClick = 1; } else{ text.setText(' 紅棋走棋'); chessPlayClick = 2; } //刪除用過的坐標 Var.remove(Var.size()-4); Var.remove(Var.size()-3); Var.remove(Var.size()-2); Var.remove(Var.size()-1); //停止旗子閃爍 chessManClick=false; } catch(Exception e){ } } //退出 else if (ae.getSource().equals(exit)){ int j=JOptionPane.showConfirmDialog( this,'真的要退出嗎?','退出', JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE); if (j == JOptionPane.YES_OPTION){ System.exit(0); } } } /** *定義中國象棋規則的類 **/ class ChessRule { /**卒子的移動規則*/ public void armsRule(int Man,JLabel play,MouseEvent me){ //黑卒向下 if (Man < 21){ //向下移動、得到終點的坐標模糊成合法的坐標 if ((me.getY()-play.getY()) > 27 && (me.getY()-play.getY()) < 86 && (me.getX()-play.getX()) < 55 && (me.getX()-play.getX()) > 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX(),play.getY()+57,55,55); } //向右移動、得到終點的坐標模糊成合法的坐標、必須過河 else if (play.getY() > 284 && (me.getX() - play.getX()) >= 57 && (me.getX() - play.getX()) <= 112){ play.setBounds(play.getX()+57,play.getY(),55,55); } //向左移動、得到終點的坐標模糊成合法的坐標、必須過河 else if (play.getY() > 284 && (play.getX() - me.getX()) >= 2 && (play.getX() - me.getX()) <=58){ //模糊坐標 play.setBounds(play.getX()-57,play.getY(),55,55); } } //紅卒向上 else{ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); //向上移動、得到終點的坐標模糊成合法的坐標 if ((me.getX()-play.getX()) >= 0 && (me.getX()-play.getX()) <= 55 && (play.getY()-me.getY()) >27 && play.getY()-me.getY() < 86){ play.setBounds(play.getX(),play.getY()-57,55,55); } //向右移動、得到終點的坐標模糊成合法的坐標、必須過河 else if (play.getY() <= 341 && (me.getX() - play.getX()) >= 57 && (me.getX() - play.getX()) <= 112){ play.setBounds(play.getX()+57,play.getY(),55,55); } //向左移動、得到終點的坐標模糊成合法的坐標、必須過河 else if (play.getY() <= 341 && (play.getX() - me.getX()) >= 3 && (play.getX() - me.getX()) <=58){ play.setBounds(play.getX()-57,play.getY(),55,55); } } }//卒移動結束 /**卒吃棋規則*/ public void armsRule(JLabel play1,JLabel play2){ //向右走 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)){ //黑棋要過河才能右吃棋 if (play1.getName().charAt(1) == ’1’ && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){ play2.setVisible(false); //把對方的位置給自己 play1.setBounds(play2.getX(),play2.getY(),55,55); } //紅棋要過河才左能吃棋 else if (play1.getName().charAt(1) == ’2’ && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){ play2.setVisible(false); //把對方的位置給自己 play1.setBounds(play2.getX(),play2.getY(),55,55); } } //向左走 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)){ //黑棋要過河才能左吃棋 if (play1.getName().charAt(1) == ’1’ && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){ play2.setVisible(false); //把對方的位置給自己 play1.setBounds(play2.getX(),play2.getY(),55,55); } //紅棋要過河才能右吃棋 else if (play1.getName().charAt(1) == ’2’ && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){ play2.setVisible(false); //把對方的位置給自己 play1.setBounds(play2.getX(),play2.getY(),55,55); } } //向上走 else if (play1.getX() - play2.getX() >= -22 && play1.getX() - play2.getX() <= 22 && play1.getY() - play2.getY() >= -112 && play1.getY() - play2.getY() <= 112){ //黑棋不能向上吃棋 if (play1.getName().charAt(1) == ’1’ && play1.getY() < play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){ play2.setVisible(false); //把對方的位置給自己 play1.setBounds(play2.getX(),play2.getY(),55,55); } //紅棋不能向下吃棋 else if (play1.getName().charAt(1) == ’2’ && play1.getY() > play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){ play2.setVisible(false); //把對方的位置給自己 play1.setBounds(play2.getX(),play2.getY(),55,55); } } //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play1.isVisible())); Var.add(String.valueOf(play1.getX())); Var.add(String.valueOf(play1.getY())); Var.add(String.valueOf(Man)); //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play2.isVisible())); Var.add(String.valueOf(play2.getX())); Var.add(String.valueOf(play2.getY())); Var.add(String.valueOf(i)); }//卒吃結束 /**炮、車移動規則*/ public void cannonRule(JLabel play,JLabel playQ[],MouseEvent me){ //起點和終點之間是否有棋子 int Count = 0; //上、下移動 if (play.getX() - me.getX() <= 0 && play.getX() - me.getX() >= -55){ //指定所有模糊Y坐標 for (int i=56;i<=571;i+=57){ //移動的Y坐標是否有指定坐標相近的 if (i - me.getY() >= -27 && i - me.getY() <= 27){ //所有的棋子 for (int j=0;j<32;j++){ //找出在同一條豎線的所有棋子、并不包括自己 if (playQ[j].getX() - play.getX() >= -27 && playQ[j].getX() - play.getX() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){ //從起點到終點(從左到右) for (int k=play.getY()+57;k<i;k+=57){ //大于起點、小于終點的坐標就可以知道中間是否有棋子 if (playQ[j].getY() < i && playQ[j].getY() > play.getY()){ //中間有一個棋子就不可以從這條豎線過去 Count++; break; } }//for //從起點到終點(從右到左) for (int k=i+57;k<play.getY();k+=57){ //找起點和終點的棋子 if (playQ[j].getY() < play.getY() && playQ[j].getY() > i){ Count++; break; } }//for }//if }//for //起點和終點沒有棋子就可以移動了 if (Count == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX(),i,55,55); break; } }//if }//for }//if //左、右移動 else if (play.getY() - me.getY() >=-27 && play.getY() - me.getY() <= 27){ //指定所有模糊X坐標 for (int i=24;i<=480;i+=57){ //移動的X坐標是否有指定坐標相近的 if (i - me.getX() >= -55 && i-me.getX() <= 0){ //所有的棋子 for (int j=0;j<32;j++){ //找出在同一條橫線的所有棋子、并不包括自己 if (playQ[j].getY() - play.getY() >= -27 && playQ[j].getY() - play.getY() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){ //從起點到終點(從上到下) for (int k=play.getX()+57;k<i;k+=57){ //大于起點、小于終點的坐標就可以知道中間是否有棋子 if (playQ[j].getX() < i && playQ[j].getX() > play.getX()){ //中間有一個棋子就不可以從這條橫線過去 Count++; break; } }//for //從起點到終點(從下到上) for (int k=i+57;k<play.getX();k+=57){ //找起點和終點的棋子 if (playQ[j].getX() < play.getX() && playQ[j].getX() > i){ Count++; break; } }//for }//if }//for //起點和終點沒有棋子 if (Count == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(i,play.getY(),55,55); break; } }//if }//for }//else }//炮、車移動方法結束 /**炮、車吃棋規則*/ public void cannonRule(int Chess,JLabel play,JLabel playTake,JLabel playQ[],MouseEvent me){ //起點和終點之間是否有棋子 int Count = 0; //所有的棋子 for (int j=0;j<32;j++){ //找出在同一條豎線的所有棋子、并不包括自己 if (playQ[j].getX() - play.getX() >= -27 && playQ[j].getX() - play.getX() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){ //自己是起點被吃的是終點(從上到下) for (int k=play.getY()+57;k<playTake.getY();k+=57){ //大于起點、小于終點的坐標就可以知道中間是否有棋子 if (playQ[j].getY() < playTake.getY() && playQ[j].getY() > play.getY()){ //計算起點和終點的棋子個數 Count++; break; } }//for //自己是起點被吃的是終點(從下到上) for (int k=playTake.getY();k<play.getY();k+=57){ //找起點和終點的棋子 if (playQ[j].getY() < play.getY() && playQ[j].getY() > playTake.getY()){ Count++; break; } }//for }//if //找出在同一條豎線的所有棋子、并不包括自己 else if (playQ[j].getY() - play.getY() >= -10 && playQ[j].getY() - play.getY() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){ //自己是起點被吃的是終點(從左到右) for (int k=play.getX()+50;k<playTake.getX();k+=57){ //大于起點、小于終點的坐標就可以知道中間是否有棋子 if (playQ[j].getX() < playTake.getX() && playQ[j].getX() > play.getX()){ Count++; break; } }//for //自己是起點被吃的是終點(從右到左) for (int k=playTake.getX();k<play.getX();k+=57){ //找起點和終點的棋子 if (playQ[j].getX() < play.getX() && playQ[j].getX() > playTake.getX()){ Count++; break; } }//for }//if }//for //起點和終點之間要一個棋子是炮的規則、并不能吃自己的棋子 if (Count == 1 && Chess == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(playTake.isVisible())); Var.add(String.valueOf(playTake.getX())); Var.add(String.valueOf(playTake.getY())); Var.add(String.valueOf(i)); playTake.setVisible(false); play.setBounds(playTake.getX(),playTake.getY(),55,55); } //起點和終點之間沒有棋子是車的規則、并不能吃自己的棋子 else if (Count ==0 && Chess == 1 && playTake.getName().charAt(1) != play.getName().charAt(1)){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(playTake.isVisible())); Var.add(String.valueOf(playTake.getX())); Var.add(String.valueOf(playTake.getY())); Var.add(String.valueOf(i)); playTake.setVisible(false); play.setBounds(playTake.getX(),playTake.getY(),55,55); } }//炮、車吃棋方法結束 /**馬移動規則*/ public void horseRule(JLabel play,JLabel playQ[],MouseEvent me){ //保存坐標和障礙 int Ex=0,Ey=0,Move=0; //上移、左邊 if (play.getX() - me.getX() >= 2 && play.getX() - me.getX() <= 57 && play.getY() - me.getY() >= 87 && play.getY() - me.getY() <= 141){ //合法的Y坐標 for (int i=56;i<=571;i+=57){ //移動的Y坐標是否有指定坐標相近的 if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; break; } } //合法的X坐標 for (int i=24;i<=480;i+=57){ //移動的X坐標是否有指定坐標相近的 if (i - me.getX() >= -55 && i-me.getX() <= 0){ Ex = i; break; } } //正前方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57 ){ Move = 1; break; } } //可以移動該棋子 if (Move == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//if //左移、上邊 else if (play.getY() - me.getY() >= 27 && play.getY() - me.getY() <= 86 && play.getX() - me.getX() >= 70 && play.getX() - me.getX() <= 130){ //Y for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; } } //X for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -55 && i-me.getX() <= 0){ Ex = i; } } //正左方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57 ){ Move = 1; break; } } if (Move == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else //下移、右邊 else if (me.getY() - play.getY() >= 87 && me.getY() - play.getY() <= 141 && me.getX() - play.getX() <= 87 && me.getX() - play.getX() >= 2 ){ //Y for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; } } //X for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -55 && i-me.getX() <= 0){ Ex = i; } } //正下方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && playQ[i].getY() - play.getY() == 57 ){ Move = 1; break; } } if (Move == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else //上移、右邊 else if (play.getY() - me.getY() >= 87 && play.getY() - me.getY() <= 141 && me.getX() - play.getX() <= 87 && me.getX() - play.getX() >= 30 ){ //合法的Y坐標 for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; break; } } //合法的X坐標 for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -55 && i-me.getX() <= 0){ Ex = i; break; } } //正前方是否有別的棋子 for (int i=0;i<32;i++){ System.out.println(i+'playQ[i].getX()='+playQ[i].getX()); //System.out.println('play.getX()='+play.getX()); if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57 ){ Move = 1; //System.out.println('play.getY()='+play.getY()); //System.out.println('playQ[i].getY()='+playQ[i].getY()); break; } } //可以移動該棋子 if (Move == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else //下移、左邊 else if (me.getY() - play.getY() >= 87 && me.getY() - play.getY() <= 141 && play.getX() - me.getX() <= 87 && play.getX() - me.getX() >= 10 ){ //合法的Y坐標 for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; break; } } //合法的X坐標 for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -55 && i-me.getX() <= 0){ Ex = i; break; } } //正下方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57 ){ Move = 1; break; } } //可以移動該棋子 if (Move == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else //右移、上邊 else if (play.getY() - me.getY() >= 30 && play.getY() - me.getY() <= 87 && me.getX() - play.getX() <= 141 && me.getX() - play.getX() >= 87 ){ //Y for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; } } //X for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -55 && i-me.getX() <= 0){ Ex = i; } } //正右方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57 ){ Move = 1; break; } } if (Move == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else //右移、下邊 else if (me.getY() - play.getY() >= 30 && me.getY() - play.getY() <= 87 && me.getX() - play.getX() <= 141 && me.getX() - play.getX() >= 87 ){ //Y for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; } } //X for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -55 && i-me.getX() <= 0){ Ex = i; } } //正右方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57 ){ Move = 1; break; } } if (Move == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else //左移、下邊 else if (me.getY() - play.getY() >= 30 && me.getY() - play.getY() <= 87 && play.getX() - me.getX() <= 141 && play.getX() - me.getX() >= 87 ){ //Y for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; } } //X for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -55 && i-me.getX() <= 0){ Ex = i; } } //正左方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57 ){ Move = 1; break; } } if (Move == 0){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else }//馬移動結束 /**馬吃棋規則*/ public void horseRule(JLabel play,JLabel playTake ,JLabel playQ[],MouseEvent me){ //障礙 int Move=0; boolean Chess=false; //上移、左吃 if (play.getName().charAt(1)!=playTake.getName().charAt(1) && play.getX() - playTake.getX() == 57 && play.getY() - playTake.getY() == 114 ){ //正前方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57){ Move = 1; break; } }//for Chess = true; }//if //上移、右吃 else if (play.getY() - playTake.getY() == 114 && playTake.getX() - play.getX() == 57 ){ //正前方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57){ Move = 1; break; } }//for Chess = true; }//else //左移、上吃 else if (play.getY() - playTake.getY() == 57 && play.getX() - playTake.getX() == 114 ){ //正左方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57){ Move = 1; break; } }//for Chess = true; }//else //左移、下吃 else if (playTake.getY() - play.getY() == 57 && play.getX() - playTake.getX() == 114 ){ //正左方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57){ Move = 1; break; } }//for Chess = true; }//else //右移、上吃 else if (play.getY() - playTake.getY() == 57 && playTake.getX() - play.getX() == 114 ){ //正右方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57){ Move = 1; break; } }//for Chess = true; }//else //右移、下吃 else if (playTake.getY() - play.getY() == 57 && playTake.getX() - play.getX() == 114 ){ //正右方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57){ Move = 1; break; } }//for Chess = true; }//else //下移、左吃 else if (playTake.getY() - play.getY() == 114 && play.getX() - playTake.getX() == 57 ){ //正下方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == -57 ){ Move = 1; break; } }//for Chess = true; }//else //下移、右吃 else if (playTake.getY() - play.getY() == 114 && playTake.getX() - play.getX() == 57){ //正下方是否有別的棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == -57 ){ Move = 1; break; } }//for Chess = true; }//else //沒有障礙、并可以吃棋、不能吃自己顏色 if (Chess && Move == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(playTake.isVisible())); Var.add(String.valueOf(playTake.getX())); Var.add(String.valueOf(playTake.getY())); Var.add(String.valueOf(i)); playTake.setVisible(false); play.setBounds(playTake.getX(),playTake.getY(),55,55); } } /**相移動規則*/ public void elephantRule(int Man,JLabel play,JLabel playQ[],MouseEvent me){ //坐標和障礙 int Ex=0,Ey=0,Move=0; //上左 if (play.getX() - me.getX() <= 141 && play.getX() - me.getX() >= 87 && play.getY() - me.getY() <= 141 && play.getY() - me.getY() >= 87){ //合法的Y坐標 for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; break; } } //合法的X坐標 for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -27 && i-me.getX() <= 27){ Ex = i; break; } } //左上方是否有棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == 57){ Move++; break; } } //紅旗不能過楚河 if (Move == 0 && Ey >= 341 && Man > 9){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); System.out.println('Ex='+Ex); System.out.println('Ey='+Ey); play.setBounds(Ex,Ey,55,55); } //黑旗不能過漢界 else if (Move == 0 && Ey <= 284 && Man < 10){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//if //上右 else if (play.getY() - me.getY() <= 141 && play.getY() - me.getY() >= 87 && me.getX() - play.getX() >= 87 && me.getX() - play.getX() <= 141){ //合法的Y坐標 for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; break; } } //合法的X坐標 for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -27 && i-me.getX() <= 27){ Ex = i; break; } } //右上方是否有棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && playQ[i].getX() - play.getX() == 57 && play.getY() - playQ[i].getY() == 57){ Move++; break; } } //相、象規則 if (Move == 0 && Ey >= 341 && Man > 9){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } else if (Move == 0 && Ey <= 284 && Man < 10){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }// else if //下左 else if (play.getX() - me.getX() <= 141 && play.getX() - me.getX() >= 87 && me.getY() - play.getY() <= 141 && me.getY() - play.getY() >= 87){ //合法的Y坐標 for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; break; } } //合法的X坐標 for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -27 && i-me.getX() <= 27){ Ex = i; break; } } //下左方是否有棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == -57){ Move++; break; } } //相、象規則 if (Move == 0 && Ey >= 341 && Man > 9){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } else if (Move == 0 && Ey <= 284 && Man < 10) { //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else if //下右 else if (me.getX() - play.getX() >= 87 && me.getX() - play.getX() <= 141 && me.getY() - play.getY() >= 87 && me.getY() - play.getY() <= 141){ //Y for (int i=56;i<=571;i+=57){ if (i - me.getY() >= -27 && i - me.getY() <= 27){ Ey = i; } } //X for (int i=24;i<=480;i+=57){ if (i - me.getX() >= -27 && i-me.getX() <= 27){ Ex = i; } } //下右方是否有棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && playQ[i].getX() - play.getX() == 57 && playQ[i].getY() - play.getY() == 57){ Move = 1; break; } } //相、象規則 if (Move == 0 && Ey >= 341 && Man > 9){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } else if (Move == 0 && Ey <= 284 && Man < 10){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(Ex,Ey,55,55); } }//else }//相移動規則吉束 /**相、象吃棋規則*/ public void elephantRule(JLabel play,JLabel playTake,JLabel playQ[]){ //障礙 int Move=0; boolean Chess=false; //吃左上方的棋子 if (play.getX() - playTake.getX() >= 87 && play.getX() - playTake.getX() <= 141 && play.getY() - playTake.getY() >= 87 && play.getY() - playTake.getY() <= 141){ //左上方是否有棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == 57){ Move++; break; } }//for Chess=true; }//if //吃右上方的棋子 else if (playTake.getX() - play.getX() >= 87 && playTake.getX() - play.getX() <= 141 && play.getY() - playTake.getY() >= 87 && play.getY() - playTake.getY() <= 141 ){ //右上方是否有棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && playQ[i].getX() - play.getX() == 57 && play.getY() - playQ[i].getY() == 57 ){ Move++; break; } }//for Chess=true; }//else //吃下左方的棋子 else if (play.getX() - playTake.getX() >= 87 && play.getX() - playTake.getX() <= 141 && playTake.getY() - play.getY() >= 87 && playTake.getY() - play.getY() <= 141){ //下左方是否有棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == -57 ){ Move++; break; } }//for Chess=true; }//else //吃下右放的棋子 else if (playTake.getX() - play.getX() >= 87 && playTake.getX() - play.getX() <= 141 && playTake.getY() - play.getY() >= 87 && playTake.getY() - play.getY() <= 141){ //下右方是否有棋子 for (int i=0;i<32;i++){ if (playQ[i].isVisible() && playQ[i].getX() - play.getX() == 57 && playQ[i].getY() - play.getY() == 57 ){ Move = 1; break; } }//for Chess=true; }//else //沒有障礙、并不能吃自己的棋子 if (Chess && Move == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(playTake.isVisible())); Var.add(String.valueOf(playTake.getX())); Var.add(String.valueOf(playTake.getY())); Var.add(String.valueOf(i)); playTake.setVisible(false); play.setBounds(playTake.getX(),playTake.getY(),55,55); } }//相、象吃棋規則結束 /**士、仕移動方法*/ public void chapRule(int Man,JLabel play,JLabel playQ[],MouseEvent me){ //上、右 if (me.getX() - play.getX() >= 29 && me.getX() - play.getX() <= 114 && play.getY() - me.getY() >= 25 && play.getY() - me.getY() <= 90){ //士不能超過自己的界限 if (Man < 14 && (play.getX()+57) >= 195 && (play.getX()+57) <= 309 && (play.getY()-57) <= 170){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()+57,play.getY()-57,55,55); } //仕不能超過自己的界限 else if (Man > 13 && (play.getY()-57) >= 455 && (play.getX()+57) >= 195 && (play.getX()+57) <= 309){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()+57,play.getY()-57,55,55); } }// else if //上、左 else if (play.getX() - me.getX() <= 114 && play.getX() - me.getX() >= 25 && play.getY() - me.getY() >= 20 && play.getY() - me.getY() <= 95){ //士不能超過自己的界限 if (Man < 14 && (play.getX()-57) >= 195 && (play.getX()-57) <= 309 && (play.getY()-57) <= 170 ){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()-57,play.getY()-57,55,55); } //仕不能超過自己的界限 else if (Man > 13 &&(play.getY()-57) >= 455 && (play.getX()-57) >= 195 && (play.getX()-57) <= 309){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()-57,play.getY()-57,55,55); } }// else if //下、左 else if (play.getX() - me.getX() <= 114 && play.getX() - me.getX() >= 20 && me.getY() - play.getY() >= 2 && me.getY() - play.getY() <= 87){ //士不能超過自己的界限 if (Man < 14 && (play.getX()-57) >= 195 && (play.getX()-57) <= 309 && (play.getY()+57) <= 170 ){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()-57,play.getY()+57,55,55); } //仕不能超過自己的界限 else if (Man > 13 && (play.getY()+57) >= 455 && (play.getX()-57) >= 195 && (play.getX()-57) <= 309){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()-57,play.getY()+57,55,55); } }// else if //下、右 else if (me.getX() - play.getX() >= 27 && me.getX() - play.getX() <= 114 && me.getY() - play.getY() >= 2 && me.getY() - play.getY() <= 87){ //士不能超過自己的界限 if (Man < 14 && (play.getX()+57) >= 195 && (play.getX()+57) <= 309 && (play.getY()+57) <= 170){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()+57,play.getY()+57,55,55); } //仕不能超過自己的界限 else if (Man > 13 &&(play.getY()+57) >= 455 && (play.getX()+57) >= 195 && (play.getX()+57) <= 309){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()+57,play.getY()+57,55,55); } }//else if }//士、仕移動規則結束 /**士、仕吃棋規則*/ public void chapRule(int Man ,JLabel play,JLabel playTake,JLabel playQ[]){ //當前狀態 boolean Chap = false; //上、右 if (playTake.getX() - play.getX() >= 20 && playTake.getX() - play.getX() <= 114 && play.getY() - playTake.getY() >= 2 && play.getY() - playTake.getY() <= 87){ //被吃的棋子是否和當前士相近 if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){ Chap = true; } //被吃的棋子是否和當前仕相近 else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){ Chap = true; } }//if //上、左 else if (play.getX() - playTake.getX() <= 114 && play.getX() - playTake.getX() >= 25 && play.getY() - playTake.getY() >= 2 && play.getY() - playTake.getY() <= 87){ //被吃的棋子是否和當前士相近 if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){ Chap = true; } //被吃的棋子是否和當前仕相近 else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){ Chap = true; } }// else if //下、左 else if (play.getX() - playTake.getX() <= 114 && play.getX() - playTake.getX() >= 25 && playTake.getY() - play.getY() >= 2 && playTake.getY() - play.getY() <= 87){ //被吃的棋子是否和當前士相近 if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){ Chap = true; } //被吃的棋子是否和當前仕相近 else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){ Chap = true; } }// else if //下、右 else if (playTake.getX() - play.getX() >= 25 && playTake.getX() - play.getX() <= 114 && playTake.getY() - play.getY() >= 2 && playTake.getY() - play.getY() <= 87){ //被吃的棋子是否和當前士相近 if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){ Chap = true; } //被吃的棋子是否和當前仕相近 else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){ Chap = true; } }//else if //可移動、并不能吃自己的棋子 if (Chap && playTake.getName().charAt(1) != play.getName().charAt(1)){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(playTake.isVisible())); Var.add(String.valueOf(playTake.getX())); Var.add(String.valueOf(playTake.getY())); Var.add(String.valueOf(i)); playTake.setVisible(false); play.setBounds(playTake.getX(),playTake.getY(),55,55); } }//士、仕吃棋規則結束 /**將移動規則*/ public void willRule(int Man,JLabel play,JLabel playQ[],MouseEvent me){ //向上 if ((me.getX()-play.getX()) >= 0 && (me.getX()-play.getX()) <= 55 && (play.getY()-me.getY()) >=2 && play.getY()-me.getY() <= 87){ //將是否超過自己的界限 if (Man == 30 && me.getX() >= 195 && me.getX() <= 359 && me.getY() <= 170){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX(),play.getY()-57,55,55); } //帥是否超過自己的界限 else if (Man == 31 && me.getY() >= 455 && me.getX() >= 195 && me.getX() <= 359){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX(),play.getY()-57,55,55); } }//if //向左 else if (play.getX() - me.getX() >= 2 && play.getX() - me.getX() <= 57 && me.getY() - play.getY() <= 27 && me.getY() - play.getY() >= -27){ //將是否超過自己的界限 if (Man == 30 && me.getX() >= 195 && me.getX() <= 359 && me.getY() <= 170){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()-57,play.getY(),55,55); } //帥是否超過自己的界限 else if (Man == 31 && me.getY() >= 455 && me.getX() >= 195 && me.getX() <= 359){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()-57,play.getY(),55,55); } }//else if //向右 else if (me.getX() - play.getX() >= 57 && me.getX() - play.getX() <= 112 && me.getY() - play.getY() <= 27 && me.getY() - play.getY() >= -27){ //將、帥規則 if (Man == 30 && me.getX() >= 195 && me.getX() <= 359 && me.getY() <= 170){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()+57,play.getY(),55,55); } else if (Man == 31 && me.getY() >= 455 && me.getX() >= 195 && me.getX() <= 359){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX()+57,play.getY(),55,55); } }//else if //向下 else if (me.getX() - play.getX() >= 0 && me.getX() - play.getX() <= 55 && me.getY() - play.getY() <= 87 && me.getY() - play.getY() >= 27){ //將、帥規則 if (Man == 30 && me.getX() >= 195 && me.getX() <= 359 && me.getY() <= 170){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX(),play.getY()+57,55,55); } else if (Man == 31 && me.getY() >= 455 && me.getX() >= 195 && me.getX() <= 359){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); play.setBounds(play.getX(),play.getY()+57,55,55); } }//else if }//將、帥移動規則結束 public void willRule(int Man ,JLabel play,JLabel playTake ,JLabel playQ[]){ //當前狀態 boolean will = false; //向上吃 if (play.getX() - playTake.getX() >= 0 && play.getX() - playTake.getX() <= 55 && play.getY() - playTake.getY() >= 27 && play.getY() - playTake.getY() <= 87 && playTake.isVisible()){ //被吃的棋子是否和當前將相近 if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){ will = true; } //被吃的棋子是否和當前帥相近 else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){ will = true; } } //向左吃 else if (play.getX() - playTake.getX() >= 2 && play.getX() - playTake.getX() <= 57 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= -27 && playTake.isVisible()){ //被吃的棋子是否和當前將相近 if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){ will = true; } //被吃的棋子是否和當前帥相近 else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){ will = true; } } //向右吃 else if (playTake.getX() - play.getX() >= 2 && playTake.getX() - play.getX() <= 57 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= -27 && playTake.isVisible()){ //被吃的棋子是否和當前將相近 if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){ will = true; } //被吃的棋子是否和當前帥相近 else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){ will = true; } } //向下 else if (playTake.getX() - play.getX() >= 0 && playTake.getX() - play.getX() <= 87 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= 40 && playTake.isVisible()){ //被吃的棋子是否和當前將相近 if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){ will = true; } //被吃的棋子是否和當前帥相近 else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){ will = true; } } //不能吃自己的棋子、符合當前要求 if (playTake.getName().charAt(1) != play.getName().charAt(1) && will){ //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(play.isVisible())); Var.add(String.valueOf(play.getX())); Var.add(String.valueOf(play.getY())); Var.add(String.valueOf(Man)); //當前記錄添加到集合(用于悔棋) Var.add(String.valueOf(playTake.isVisible())); Var.add(String.valueOf(playTake.getX())); Var.add(String.valueOf(playTake.getY())); Var.add(String.valueOf(i)); playTake.setVisible(false); play.setBounds(playTake.getX(),playTake.getY(),55,55); } }//將、帥吃規則結束 }//規則類 }//主框架類
圖片
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章: