/*
?*中國象棋Java
?*作者:yanick
?*源文件:Chess.java
?*最后修改時間:2006-11-1
?*添加功能:實現了當前棋局的保存
?*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("中國象棋_Java版");
?}
}
//主框架類
class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable
{
?//玩家
?JLabel play[] = new JLabel[32];
?
?//棋盤
?JLabel image;?
?
?//窗格
?Container con;
?
?//工具欄
?JToolBar jmain;?
?//重新開始
?JButton anew;
?//悔棋
?JButton repent;
?//打開
?JButton showOpen;
?//保存
?JButton showSave;
?//退出
?JButton exit;
?
?//當前信息
?JLabel text;
?
?//保存當前操作
?Vector FileVar;
?Vector 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(){}
?
?ChessMainFrame(String Title)
?{
??//獲行客格引用
??con = this.getContentPane();
??con.setLayout(null);
??//實例化規則類
??rule = new ChessRule();
??FileVar? = new Vector();
??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("返回到上次走棋的位置");????
??showOpen = new JButton("打開");
??showOpen.setToolTipText("打開以前棋局");??
??showSave = new JButton("保存");
??showSave.setToolTipText("保存當前棋局");
??
??//把組件添加到工具欄
??jmain.setLayout(new GridLayout(0,6));
??jmain.add(anew);
??jmain.add(repent);??
??jmain.add(showOpen);
??jmain.add(showSave);
??jmain.add(exit);
??jmain.add(text);
??jmain.setBounds(0,500,450,30);
??con.add(jmain);
??
??//添加棋子標簽
??drawChessMan();
???
??/*注冊監聽者*/
??
??//注冊按扭監聽
??anew.addActionListener(this);
??repent.addActionListener(this);
??exit.addActionListener(this);??
??showOpen.addActionListener(this);
??showSave.addActionListener(this);
????
??//注冊棋子移動監聽
??for (int i=0;i<32;i++)
??{
???con.add(play[i]);
???play[i].addMouseListener(this);???
??}
??
??//添加棋盤標簽
??con.add(image = new JLabel(new ImageIcon("CChess.GIF")));
??image.setBounds(0,0,445,498);
??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 - 200 ,(screenSize.height - frameSize.height ) / 2 - 290);
?
??this.setIconImage(new ImageIcon("相1.gif").getImage());
??this.setResizable(false);
??this.setTitle(Title);
??this.setSize(450,555);
??this.show();
?}
?
?/*添加棋子方法************/
?public void drawChessMan()
?{
??//流程控制
??int i,k;
??//圖標
??Icon in;
????
??//黑色棋子
??
??//車
??in = new ImageIcon("車1.GIF");
??for (i=0,k=10;i<2;i++,k+=385)
??{??
???play[i] = new JLabel(in);
???play[i].setBounds(k,10,40,40);?
???play[i].setName("車1");???
??}?
??
??//馬
??in = new ImageIcon("馬1.GIF");
??for (i=4,k=60;i<6;i++,k+=285)
??{???
???play[i] = new JLabel(in);???
???play[i].setBounds(k,10,40,40);???
???play[i].setName("馬1");
??}
??
??//相
??in = new ImageIcon("相1.GIF");
??for (i=8,k=105;i<10;i++,k+=195)
??{???
???play[i] = new JLabel(in);
???play[i].setBounds(k,10,40,40);???
???play[i].setName("相1");
??}
??
??//士
??in = new ImageIcon("士1.GIF");???
??for (i=12,k=155;i<14;i++,k+=95)
??{???
???play[i] = new JLabel(in);
???play[i].setBounds(k,10,40,40);???
???play[i].setName("士1");
??}
??
??//卒
??in = new ImageIcon("卒1.GIF");???
??for (i=16,k=10;i<21;i++,k+=96.5)
??{??
???play[i] = new JLabel(in);
???play[i].setBounds(k,160,40,40);???
???play[i].setName("卒1" + i);
??}
??
??//炮
??in = new ImageIcon("炮1.GIF");???
??for (i=26,k=60;i<28;i++,k+=289)
??{???
???play[i] = new JLabel(in);
???play[i].setBounds(k,110,40,40);????
???play[i].setName("炮1" + i);
??}
??
??//將
??in = new ImageIcon("將1.GIF");???
??play[30] = new JLabel(in);
??play[30].setBounds(205,10,40,40);???
??play[30].setName("將1");
??
??//紅色棋子
??
??//車
??in = new ImageIcon("車2.GIF");
??for (i=2,k=10;i<4;i++,k+=385)
??{??????
???play[i] = new JLabel(in);
???play[i].setBounds(k,450,40,40);??
???play[i].setName("車2");
??}
??
??//馬
??in = new ImageIcon("馬2.GIF");
??for (i=6,k=60;i<8;i++,k+=285)
??{???
???play[i] = new JLabel(in);???
???play[i].setBounds(k,450,40,40);???
???play[i].setName("馬2");
??}
??
??//相
??in = new ImageIcon("相2.GIF");???
??for (i=10,k=105;i<12;i++,k+=195)
??{???
???play[i] = new JLabel(in);
???play[i].setBounds(k,450,40,40);???
???play[i].setName("相2");
??}
??
??//士
??in = new ImageIcon("士2.GIF");???
??for (i=14,k=155;i<16;i++,k+=95)
??{???
???play[i] = new JLabel(in);
???play[i].setBounds(k,450,40,40);???
???play[i].setName("士2");
??}
??
??//兵
??in = new ImageIcon("兵2.GIF");???
??for (i=21,k=10;i<26;i++,k+=96.5)
??{???
???play[i] = new JLabel(in);
???play[i].setBounds(k,300,40,40);???
???play[i].setName("兵2" + i);
??}
??
??//炮
??in = new ImageIcon("炮2.GIF");???
??for (i=28,k=60;i<30;i++,k+=289)
??{???
???play[i] = new JLabel(in);
???play[i].setBounds(k,350,40,40);?
???play[i].setName("炮2" + i);
??}
??
??//帥
??in = new ImageIcon("帥2.GIF");???
??play[31] = new JLabel(in);
??play[31].setBounds(205,450,40,40);??
??play[31].setName("帥2");
?}
?
?/*線程方法控制棋子閃爍*/
?public void run()
?{
??while (true)
??{
???//單擊棋子第一下開始閃爍
???if (chessManClick)
???{????
????play[Man].setVisible(false);?????
????//時間控制
????try
????{
?????tmain.sleep(500);
????}
????catch(Exception e){}
????
????play[Man].setVisible(true);????????
???}
???
???//閃爍當前提示信息 以免用戶看不見
???else
???{
????text.setVisible(false);
????
????//時間控制
????try
????{
?????tmain.sleep(500);
????}
????catch(Exception e){}
????
????text.setVisible(true);
???}
???
???try
???{
????tmain.sleep(500);
???}?
???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=10;i<2;i++,k+=385)
???{???
????play[i].setBounds(k,10,40,40);????
???}?
??
???//馬??
???for (i=4,k=60;i<6;i++,k+=285)
???{???
????play[i].setBounds(k,10,40,40);???
???}
??
???//相
??
???for (i=8,k=105;i<10;i++,k+=195)
???{
????play[i].setBounds(k,10,40,40);???
???}
??
???//士??
???for (i=12,k=155;i<14;i++,k+=95)
???{
????play[i].setBounds(k,10,40,40);
???}
??
???//卒??
???for (i=16,k=10;i<21;i++,k+=96.5)
???{
????play[i].setBounds(k,160,40,40);???
???}
??
???//炮??
???for (i=26,k=60;i<28;i++,k+=289)
???{????
????play[i].setBounds(k,110,40,40);????
???}
??
???//將
???play[30].setBounds(205,10,40,40);???
????
???//紅色棋子
??
???//車
???
???for (i=2,k=10;i<4;i++,k+=385)
???{????
????play[i].setBounds(k,450,40,40);
???}
??
???//馬??
???for (i=6,k=60;i<8;i++,k+=285)
???{???
????play[i].setBounds(k,450,40,40);
???}
??
???//相??
???for (i=10,k=105;i<12;i++,k+=195)
???{???
????play[i].setBounds(k,450,40,40);???
???}
??
???//士??
???for (i=14,k=155;i<16;i++,k+=95)
???{
????play[i].setBounds(k,450,40,40);????
???}??
??
???//兵??
???for (i=21,k=10;i<26;i++,k+=96.5)
???{???
????play[i].setBounds(k,300,40,40);?????
???}
??
???//炮??
???for (i=28,k=60;i<30;i++,k+=289)
???{???
????play[i].setBounds(k,350,40,40);
???}
??
???//帥??
???play[31].setBounds(205,450,40,40);?
???
???chessPlayClick = 2;
???text.setText("? 紅棋走棋");
???
???for (i=0;i<32;i++)
???{
????play[i].setVisible(true);
???}
???
???for (i=0;i<Var.size();i++)
???{
????Var.remove(i);
???}
??}?
??
??//悔棋
??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,40,40);
????
????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(showOpen))
??{
???try
???{
????//打開對話框
????JFileChooser jfcOpen = new JFileChooser("打開棋局");
????int v=jfcOpen.showOpenDialog(this);
????
????if (v != JFileChooser.CANCEL_OPTION)
????{
?????//刪除集合所有信息?????
?????Var.removeAllElements();
?????FileVar.removeAllElements();
?????
?????//打開文件獲得所有數據
?????FileInputStream fileIn = new FileInputStream(jfcOpen.getSelectedFile());
?????ObjectInputStream objIn = new ObjectInputStream(fileIn);
?????FileVar = (Vector)objIn.readObject();?????
?????fileIn.close();
?????objIn.close();
?????
?????//集合內容對應棋子坐標
?????int k=0;
?????for (int i=0;i<32;i++)
?????{??????
??????play[i].setBounds(((Integer)FileVar.get(k)).intValue(),((Integer)FileVar.get(k+1)).intValue(),40,40);??????
??????//被吃掉的棋子不顯示
??????if (!((Boolean)FileVar.elementAt(k+2)).booleanValue())
??????{
???????play[i].setVisible(false);
??????}
??????k+=3;
?????}
?????
?????//當前該哪方棋子走棋
?????if (((String)FileVar.lastElement()).toString().equals("? 紅棋走棋"))
?????{
??????text.setText(((String)FileVar.lastElement()).toString());
??????chessPlayClick = 2;
?????}
?????else if (((String)FileVar.lastElement()).toString().equals("? 黑棋走棋"))
?????{
??????text.setText(((String)FileVar.lastElement()).toString());
??????chessPlayClick = 1;
?????}
?????else if (((String)FileVar.lastElement()).toString().substring(5).equals("利"))
?????{
??????text.setText(((String)FileVar.lastElement()).toString());
??????chessPlayClick = 3;
?????}
?????
????}
???}
???
???catch(Exception e)
???{
????System.out.println("ERROR ShowOpen");
???}
??}
??
??//保存當前棋局
??else if (ae.getSource().equals(showSave))
??{
???try
???{
????//保存對話框?
????JFileChooser jfcSave = new JFileChooser("保存當前棋局");
????int v=jfcSave.showSaveDialog(this);
????
????if (v != JFileChooser.CANCEL_OPTION)
????{
?????FileVar.removeAllElements();
?????
?????//保存所有棋子的坐標和是否可見
?????for (int i=0;i<32;i++)
?????{
??????FileVar.addElement(new Integer(play[i].getX()));
??????FileVar.addElement(new Integer(play[i].getY()));
??????FileVar.addElement(new Boolean(play[i].isVisible()));
?????}
?????//保存當前該哪方吃棋????
?????FileVar.add(text.getText());
?????
?????//保存到文件
?????FileOutputStream fileOut = new FileOutputStream(jfcSave.getSelectedFile());
?????ObjectOutputStream objOut = new ObjectOutputStream(fileOut);
?????objOut.writeObject(FileVar);?????
?????objOut.close();
?????fileOut.close();
????}
???}
???
???catch(Exception e)
???{
????System.out.println("ERROR ShowSave");
???}
??}
??
??//退出
??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()) > 40 && (me.getY()-play.getY()) < 80 && (me.getX()-play.getX()) < 30 && (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()+45,40,40);
????}
????
????//向右移動、得到終點的坐標模糊成合法的坐標、必須過河????
????else if (play.getY() >= 250 && (me.getX() - play.getX()) >= 30 && (me.getX() - play.getX()) <= 90)
????{?????
?????play.setBounds(play.getX()+48,play.getY(),40,40);?
????}
????
????//向左移動、得到終點的坐標模糊成合法的坐標、必須過河
????else if (play.getY() >= 250 && (play.getX() - me.getX()) >= 20 && (play.getX() - me.getX()) <=90)
????{??
?????//模糊坐標???
?????play.setBounds(play.getX()-48,play.getY(),40,40);
????}
???}
???
???//紅卒向上
???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()) < 30 && (play.getY()-me.getY()) >20 && play.getY()-me.getY() < 70)
????{?????
?????play.setBounds(play.getX(),play.getY()-48,40,40);
????}
????
????//向右移動、得到終點的坐標模糊成合法的坐標、必須過河
????else if (play.getY() <= 210 && (me.getX() - play.getX()) >= 30 && (me.getX() - play.getX()) <= 90)
????{?????
?????play.setBounds(play.getX()+50,play.getY(),40,40);
????}????
????
????//向左移動、得到終點的坐標模糊成合法的坐標、必須過河
????else if (play.getY() <= 210 && (play.getX() - me.getX()) >= 20 && (play.getX() - me.getX()) <=60)
????{????
?????play.setBounds(play.getX()-52,play.getY(),40,40);
????}
???}
??}//卒移動結束
??
??/*卒吃棋規則**********************************/
??public void armsRule(JLabel play1,JLabel play2)
??{???
???//向右走???
???if ((play2.getX() - play1.getX()) <= 60 && (play2.getX() - play1.getX()) >= 40 && (play1.getY() - play2.getY()) < 10 && (play1.getY() - play2.getY()) > -10 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1))
???{
????//黑棋要過河才能右吃棋
????if (play1.getName().charAt(1) == '1' && play1.getY() >= 250 && play1.getName().charAt(1) != play2.getName().charAt(1))
????{
?????play2.setVisible(false);
?????//把對方的位置給自己
?????play1.setBounds(play2.getX(),play2.getY(),40,40);
????}
????
????//紅棋要過河才左能吃棋
????else if (play1.getName().charAt(1) == '2' && play1.getY() <= 210 && play1.getName().charAt(1) != play2.getName().charAt(1))
????{
?????play2.setVisible(false);
?????//把對方的位置給自己
?????play1.setBounds(play2.getX(),play2.getY(),40,40);????
????}
???}
???
???//向左走
???else if ((play1.getX() - play2.getX()) <= 60 && (play1.getX() - play2.getX()) >= 40 && (play1.getY() - play2.getY()) < 10 && (play1.getY() - play2.getY()) > -10 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1))
???{
????//黑棋要過河才能左吃棋
????if (play1.getName().charAt(1) == '1' && play1.getY() >= 250 && play1.getName().charAt(1) != play2.getName().charAt(1))
????{
?????play2.setVisible(false);
?????//把對方的位置給自己
?????play1.setBounds(play2.getX(),play2.getY(),40,40);
????}
????
????//紅棋要過河才能右吃棋
????else if (play1.getName().charAt(1) == '2' && play1.getY() <= 210 && play1.getName().charAt(1) != play2.getName().charAt(1))
????{
?????play2.setVisible(false);
?????//把對方的位置給自己
?????play1.setBounds(play2.getX(),play2.getY(),40,40);????
????}
???}
???
???//向上走
???else if (play1.getX() - play2.getX() >= -10 && play1.getX() - play2.getX() <= 10 && play1.getY() - play2.getY() >= -70 && play1.getY() - play2.getY() <= 70)
???{
????//黑棋不能向上吃棋
????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(),40,40);
????}
????
????//紅棋不能向下吃棋
????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(),40,40);????
????}???
???}
???
???//當前記錄添加到集合(用于悔棋)
???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() <= 10 && play.getX() - me.getX() >= -30)
???{
????//指定所有模糊Y坐標
????for (int i=30;i<=462;i+=48)
????{?????
?????//移動的Y坐標是否有指定坐標相近的
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????//所有的棋子
??????for (int j=0;j<32;j++)
??????{
???????//找出在同一條豎線的所有棋子、并不包括自己
???????if (playQ[j].getX() - play.getX() >= -10 && playQ[j].getX() - play.getX() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible())
???????{?????
????????//從起點到終點(從左到右)
????????for (int k=play.getY()+50;k<i;k+=50)
????????{??
?????????//大于起點、小于終點的坐標就可以知道中間是否有棋子??????
?????????if (playQ[j].getY() < i && playQ[j].getY() > play.getY())
?????????{?
??????????//中間有一個棋子就不可以從這條豎線過去?????????
??????????Count++;
??????????break;
?????????}
????????}//for
????????
????????//從起點到終點(從右到左)
????????for (int k=i+50;k<play.getY();k+=50)
????????{
?????????//找起點和終點的棋子
?????????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-17,40,40);
???????break;
??????}
?????}//if
????}//for
???}//if
???
???
???//左、右移動
???else if (play.getY() - me.getY() >=-35 && play.getY() - me.getY() <= 10)
???{
????//指定所有模糊X坐標
????for (int i=30;i<=420;i+=48)
????{?????
?????//移動的X坐標是否有指定坐標相近的
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????//所有的棋子
??????for (int j=0;j<32;j++)
??????{
???????//找出在同一條橫線的所有棋子、并不包括自己
???????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<i;k+=50)
????????{??????
?????????//大于起點、小于終點的坐標就可以知道中間是否有棋子???
?????????if (playQ[j].getX() < i && playQ[j].getX() > play.getX())
?????????{??????
??????????//中間有一個棋子就不可以從這條橫線過去??????
??????????Count++;
??????????break;
?????????}
????????}//for
????????
????????//從起點到終點(從下到上)
????????for (int k=i+50;k<play.getX();k+=50)
????????{
?????????//找起點和終點的棋子
?????????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-20,play.getY(),40,40);
???????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() >= -10 && playQ[j].getX() - play.getX() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible())
????{?????
?????//自己是起點被吃的是終點(從上到下)
?????for (int k=play.getY()+50;k<playTake.getY();k+=50)
?????{??
??????//大于起點、小于終點的坐標就可以知道中間是否有棋子??????
??????if (playQ[j].getY() < playTake.getY() && playQ[j].getY() > play.getY())
??????{?
????????//計算起點和終點的棋子個數
????????Count++;???
????????break;???????
??????}
?????}//for
????????
?????//自己是起點被吃的是終點(從下到上)
?????for (int k=playTake.getY();k<play.getY();k+=50)
?????{
??????//找起點和終點的棋子
??????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+=50)
?????{??
??????//大于起點、小于終點的坐標就可以知道中間是否有棋子??????
??????if (playQ[j].getX() < playTake.getX() && playQ[j].getX() > play.getX())
??????{??????
???????Count++;???
???????break;???????
??????}
?????}//for
????????
?????//自己是起點被吃的是終點(從右到左)
?????for (int k=playTake.getX();k<play.getX();k+=50)
?????{
??????//找起點和終點的棋子
??????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(),40,40);
???}
???
???//起點和終點之間沒有棋子是車的規則、并不能吃自己的棋子???
???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(),40,40);
???}
???
??}//炮、車吃棋方法結束
??
??/*馬移動規則***************************************************/
??public void horseRule(JLabel play,JLabel playQ[],MouseEvent me)
??{??
???//保存坐標和障礙
???int Ex=0,Ey=0,Move=0;???
???
???//上移、左邊
???if (play.getX() - me.getX() >= 10 && play.getX() - me.getX() <= 50 && play.getY() - me.getY() >= 60 && play.getY() - me.getY() <= 100)
???{????
????//合法的Y坐標
????for (int i=30;i<=462;i+=48)
????{
?????//移動的Y坐標是否有指定坐標相近的
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
??????break;
?????}
????}
????
????//合法的X坐標
????for (int i=30;i<=420;i+=48)
????{?????
?????//移動的X坐標是否有指定坐標相近的
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
??????break;
?????}
????}
????
????//正前方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
?????{
??????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-20,Ey-17,40,40);?????
????}
????
???}//if
???
???//左移、上邊
???else if (play.getY() - me.getY() >= 10 && play.getY() - me.getY() <= 50 && play.getX() - me.getX() >= 60 && play.getX() - me.getX() <= 100)
???{????
????//Y
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
?????}
????}
????
????//X
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
?????}
????}
????
????//正左方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && play.getX() - playQ[i].getX() >= 40 && play.getX() - playQ[i].getX() <= 60)
?????{
??????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-20,Ey-17,40,40);?????
????}
???}//else
???
???//下移、右邊
???else if (me.getY() - play.getY() >= 100 && me.getY() - play.getY() <= 130 && me.getX() - play.getX() <= 70 && me.getX() - play.getX() >= 30 )
???{?
????//Y??
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
?????}
????}
????
????//X
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
?????}
????}
????
????//正下方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && playQ[i].getY() - play.getY() >= 40 && playQ[i].getY() - play.getY() <= 60)
?????{
??????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-20,Ey-17,40,40);?????
????}
???}//else
???
???//上移、右邊
???else if (play.getY() - me.getY() >= 60 && play.getY() - me.getY() <= 100 && me.getX() - play.getX() <= 80 && me.getX() - play.getX() >= 50 )
???{????
????//合法的Y坐標
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
??????break;
?????}
????}
????
????//合法的X坐標
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
??????break;
?????}
????}
????
????//正前方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
?????{
??????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-20,Ey-17,40,40);?????
????}
???}//else
???
???//下移、左邊
???else if (me.getY() - play.getY() >= 100 && me.getY() - play.getY() <= 140 && play.getX() - me.getX() <= 50 && play.getX() - me.getX() >= 10 )
???{???
????//合法的Y坐標
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
??????break;
?????}
????}
????
????//合法的X坐標
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
??????break;
?????}
????}
????
????//正下方是否有別的棋子
????for (int i=0;i<32;i++)
????{????
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && play.getY() - playQ[i].getY() <= -40 && play.getY() - playQ[i].getY() >= -60)
?????{
??????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-20,Ey-17,40,40);?????
????}
???}//else
???
???//右移、上邊
???else if (play.getY() - me.getY() >= 10 && play.getY() - me.getY() <= 50 && me.getX() - play.getX() <= 140 && me.getX() - play.getX() >= 100 )
???{??
????//Y??
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
?????}
????}
????
????//X
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
?????}
????}
????
????//正右方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && playQ[i].getX() - play.getX() >= 40 && playQ[i].getX() - play.getX() <= 60)
?????{
??????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-20,Ey-17,40,40);?????
????}
???}//else
???
???//右移、下邊
???else if (me.getY() - play.getY() >= 60 && me.getY() - play.getY() <= 90 && me.getX() - play.getX() <= 130 && me.getX() - play.getX() >= 100 )
???{??
????//Y??
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
?????}
????}
????
????//X
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
?????}
????}
????
????//正右方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && playQ[i].getX() - play.getX() >= 40 && playQ[i].getX() - play.getX() <= 60)
?????{
??????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-20,Ey-17,40,40);?????
????}
???}//else
???
???//左移、下邊
???else if (me.getY() - play.getY() >= 50 && me.getY() - play.getY() <= 90 && play.getX() - me.getX() <= 100 && play.getX() - me.getX() >= 50 )
???{??
????//Y??
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
?????}
????}
????
????//X
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
?????}
????}
????
????//正左方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && play.getX() - playQ[i].getX() >= 40 && play.getX() - playQ[i].getX() <= 60)
?????{
??????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-20,Ey-17,40,40);?????
????}
????
???}//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() >= 10 && play.getX() - playTake.getX() <= 55 && play.getY() - playTake.getY() >= 60 && play.getY() - playTake.getY() <= 105)
???{??
????//正前方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
?????{
??????Move = 1;
??????break;
?????}
????}//for
????
????Chess = true;
????
???}//if
???
???//上移、右吃
???else if (play.getY() - playTake.getY() >= 80 && play.getY() - playTake.getY() <= 110 && playTake.getX() - play.getX() <= 60 && playTake.getX() - play.getX() >= 40)
???{????
????//正前方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
?????{
??????Move = 1;
??????break;
?????}
????}//for??
????
????Chess = true;
????
???}//else
???
???//左移、上吃
???else if (play.getY() - playTake.getY() >= 40 && play.getY() - playTake.getY() <= 60 && play.getX() - playTake.getX() >= 90 && play.getX() - playTake.getX() <= 110)
???{????????
????//正左方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && play.getX() - playQ[i].getX() >= 40 && play.getX() - playQ[i].getX() <= 60)
?????{
??????Move = 1;
??????break;
?????}
????}//for
????
????Chess = true;
????
???}//else
???
???//左移、下吃
???else if (playTake.getY() - play.getY() >= 30 && playTake.getY() - play.getY() <= 60 && play.getX() - playTake.getX() <= 120 && play.getX() - playTake.getX() >= 80 )
???{
????//正左方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && play.getX() - playQ[i].getX() >= 40 && play.getX() - playQ[i].getX() <= 60)
?????{
??????Move = 1;
??????break;
?????}
????}//for??
????
????Chess = true;
????
???}//else
???
???//右移、上吃
???else if (play.getY() - playTake.getY() >= 30 && play.getY() - playTake.getY() <= 60 && playTake.getX() - play.getX() <= 120 && playTake.getX() - play.getX() >= 80 )
???{????
????//正右方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && playQ[i].getX() - play.getX() >= 40 && playQ[i].getX() - play.getX() <= 60)
?????{
??????Move = 1;
??????break;
?????}
????}//for
????
????Chess = true;
????
???}//else
???
???//右移、下吃
???else if (playTake.getY() - play.getY() >= 30 && playTake.getY() - play.getY() <= 60 && playTake.getX() - play.getX() <= 120 && playTake.getX() - play.getX() >= 80 )
???{???
????//正右方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && playQ[i].getX() - play.getX() >= 40 && playQ[i].getX() - play.getX() <= 60)
?????{
??????Move = 1;
??????break;
?????}
????}//for
????
????Chess = true;
????
???}//else
???
???//下移、左吃
???else if (playTake.getY() - play.getY() >= 80 && playTake.getY() - play.getY() <= 120 && play.getX() - playTake.getX() <= 60 && play.getX() - playTake.getX() >= 30)
???{????
????//正下方是否有別的棋子
????for (int i=0;i<32;i++)
????{????
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && play.getY() - playQ[i].getY() <= -40 && play.getY() - playQ[i].getY() >= -60)
?????{
??????Move = 1;
??????break;????
?????}
????}//for
????
????Chess = true;
????
???}//else
???
???//下移、右吃
???else if (playTake.getY() - play.getY() >= 80 && playTake.getY() - play.getY() <= 120 && playTake.getX() - play.getX() <= 60 && playTake.getX() - play.getX() >= 40)
???{????
????//正下方是否有別的棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && playQ[i].getY() - play.getY() >= 40 && playQ[i].getY() - play.getY() <= 60)
?????{
??????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(),40,40);
???}
??}
??
??/*相移動規則******************************************************/
??public void elephantRule(int Man,JLabel play,JLabel playQ[],MouseEvent me)
??{???
???//坐標和障礙
???int Ex=0,Ey=0,Move=0;
???
???//上左
???if (play.getX() - me.getX() <= 90 && play.getX() - me.getX() >= 60 && play.getY() - me.getY() <= 100 && play.getY() - me.getY() >= 70)
???{????
????//合法的Y坐標
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
??????break;
?????}
????}
????
????//合法的X坐標
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
??????break;
?????}
????}
????
????//左上方是否有棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() >= 10 && play.getX() - playQ[i].getX() <= 50 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
?????{
??????Move++;
??????break;
?????}
????}
????
????//紅旗不能過楚河
????if (Move == 0 && Ey > 230 && 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-20,Ey-15,40,40);?????
????}
????
????//黑旗不能過漢界
????else if (Move == 0 && Ey < 270 && 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-20,Ey-15,40,40);?
????}
???}//if
???
???//上右
???else if (play.getY() - me.getY() <= 100 && play.getY() - me.getY() >= 70 &&? me.getX() - play.getX() >= 100 && me.getX() - play.getX() <= 140)
???{?
????//合法的Y坐標
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
??????break;
?????}
????}
????
????//合法的X坐標
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
??????break;
?????}
????}
????
????//右上方是否有棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() &&? playQ[i].getX() - play.getX() >= 40 && playQ[i].getX() - play.getX() <= 90 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
?????{
??????Move++;
??????break;
?????}
????}
????
????//相、象規則
????if (Move == 0 && Ey > 230 && 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-20,Ey-15,40,40);?????
????}
????
????else if (Move == 0 && Ey < 270 && 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-20,Ey-15,40,40);?????
????}??
????
???}// else if
???
???//下左
???else if (play.getX() - me.getX() <= 100 && play.getX() - me.getX() >= 60 && me.getY() - play.getY() <= 130 && me.getY() - play.getY() >= 100)
???{
????//合法的Y坐標
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
??????break;
?????}
????}
????
????//合法的X坐標
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
??????break;
?????}
????}
????
????//下左方是否有棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() >= 10 && play.getX() - playQ[i].getX() <= 60 && play.getY() - playQ[i].getY() <= -40 && play.getY() - playQ[i].getY() >= -60)
?????{
??????Move++;
??????break;
?????}
????}???
????
????//相、象規則
????
????if (Move == 0 && Ey > 230 && 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-20,Ey-15,40,40);?????
????}
????
????else if (Move == 0 && Ey < 270 && 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-20,Ey-15,40,40);?????
????}
???}//else if
???
???//下右
???else if (me.getX() - play.getX() >= 100 &&? me.getX() - play.getX() <= 130 && me.getY() - play.getY() >= 100 && me.getY() - play.getY() <= 130)
???{????
????//Y??
????for (int i=30;i<=462;i+=48)
????{
?????if (i - me.getY() >= -10 && i - me.getY() <= 30)
?????{
??????Ey = i;
?????}
????}
????
????//X
????for (int i=30;i<=420;i+=48)
????{?????
?????if (i - me.getX() >= -35 && i-me.getX() <= 10)
?????{
??????Ex = i;
?????}
????}
????
????//下右方是否有棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && playQ[i].getX() - play.getX() >= 50 && playQ[i].getX() - play.getX()? <= 80 && playQ[i].getY() - play.getY() >= 40 && playQ[i].getY() - play.getY() <= 60)
?????{
??????Move = 1;
??????break;
?????}
????}
????
????//相、象規則
????if (Move == 0 && Ey > 230 && 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-20,Ey-15,40,40);?????
????}
????
????else if (Move == 0 && Ey < 270 && 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-20,Ey-15,40,40);????
????}
????
???}//else
???
??}//相移動規則吉束
??
??/*相、象吃棋規則***************************************************/
??public void elephantRule(JLabel play,JLabel playTake,JLabel playQ[])
??{
???//障礙
???int Move=0;
???boolean Chess=false;
???
???//吃左上方的棋子
???if (play.getX() - playTake.getX() >= 80 && play.getX() - playTake.getX() <= 100 && play.getY() - playTake.getY() >= 80 && play.getY() - playTake.getY() <= 110)
???{
????//左上方是否有棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() >= 10 && play.getX() - playQ[i].getX() <= 50 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
?????{
??????Move++;
??????break;
?????}
????}//for???
????Chess=true;
????
???}//if
???
???//吃右上方的棋子
???else if (playTake.getX() - play.getX() >= 110 && playTake.getX() - play.getX() <= 80 && play.getY() - playTake.getY() >= 80 && play.getY() - playTake.getY() <= 110 )
???{
????//右上方是否有棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() &&? playQ[i].getX() - play.getX() >= 40 && playQ[i].getX() - play.getX() <= 90 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
?????{
??????Move++;
??????break;
?????}
????}//for?
????
????Chess=true;????
???}//else
???
???//吃下左方的棋子
???else if (play.getX() - playTake.getX() >= 80 && play.getX() - playTake.getX() <= 110 && playTake.getY() - play.getY() >= 80 && playTake.getY() - play.getY() <= 110)
???{
????//下左方是否有棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && play.getX() - playQ[i].getX() >= 10 && play.getX() - playQ[i].getX() <= 60 && play.getY() - playQ[i].getY() <= -40 && play.getY() - playQ[i].getY() >= -60)
?????{
??????Move++;
??????break;
?????}
????}//for
????
????Chess=true;????
???}//else
???
???//吃下右放的棋子
???else if (playTake.getX() - play.getX() >= 80 && playTake.getX() - play.getX() <= 110 && playTake.getY() - play.getY() >= 80 && playTake.getY() - play.getY() <= 110)
???{
????//下右方是否有棋子
????for (int i=0;i<32;i++)
????{
?????if (playQ[i].isVisible() && playQ[i].getX() - play.getX() >= 50 && playQ[i].getX() - play.getX()? <= 80 && playQ[i].getY() - play.getY() >= 40 && playQ[i].getY() - play.getY() <= 60)
?????{
??????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(),40,40);
???}
???
??}//相、象吃棋規則結束
??
??/*士、仕移動方法*******************************************************/
??public void chapRule(int Man,JLabel play,JLabel playQ[],MouseEvent me)
??{???
???//上、右
???if (me.getX() - play.getX() >= 50 && me.getX() - play.getX() <= 80 && play.getY() - me.getY() >= 15 && play.getY() - me.getY() <= 50)
???{
????//士不能超過自己的界限
????if (Man < 14 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()+50,play.getY()-50,40,40);????
????}?
????
????//仕不能超過自己的界限
????else if (Man > 13 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()+50,play.getY()-50,40,40);
????}?
???}// else if
???
???//上、左
???else if (play.getX() - me.getX() <= 50 && play.getX() - me.getX() >= 13 && play.getY() - me.getY() >= 15 && play.getY() - me.getY() <= 50)
???{
????//士、仕規則
????if (Man < 14 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()-50,play.getY()-50,40,40);
????}?
????
????else if (Man > 13 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()-50,play.getY()-50,40,40);
????}????
???}// else if
???
???//下、左
???else if (play.getX() - me.getX() <= 50 && play.getX() - me.getX() >= 15 && me.getY() - play.getY() >= 50 && me.getY() - play.getY() <= 80)
???{
????//士、仕規則
????if (Man < 14 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()-50,play.getY()+50,40,40);
????}?
????
????else if (Man > 13 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()-50,play.getY()+50,40,40);
????}
????
???}// else if
???
???
???//下、右
???else if (me.getX() - play.getX() >= 50 && me.getX() - play.getX() <= 80 && me.getY() - play.getY() >= 50 && me.getY() - play.getY() <= 80)
???{
????//士、仕規則
????if (Man < 14 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()+50,play.getY()+50,40,40);
????}?
????
????else if (Man > 13 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()+50,play.getY()+50,40,40);
????}
???}//else if
???
??}//士、仕移動規則結束
??
??
??/*士、仕吃棋規則*********************************************************/
??public void chapRule(int Man ,JLabel play,JLabel playTake,JLabel playQ[])
??{??
???//當前狀態
???boolean Chap = false;?
???
???//上、右
???if (playTake.getX() - play.getX() >= 30 && playTake.getX() - play.getX() <= 60 && play.getY() - playTake.getY() >= 30 && play.getY() - playTake.getY() <= 60)
???{
????//被吃的棋子是否和當前士相近
????if (Man < 14 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() < 150 && playTake.isVisible())
????{
?????Chap = true;
????}
????
????//被吃的棋子是否和當前仕相近
????else if (Man > 13 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() > 340 && playTake.isVisible())
????{
?????Chap = true;
????}???
???}//if
???
???//上、左
???else if (play.getX() - playTake.getX() <= 60 && play.getX() - playTake.getX() >= 30 && play.getY() - playTake.getY() >= 30 && play.getY() - playTake.getY() <= 60)
???{
????//被吃的棋子是否和當前士相近
????if (Man < 14 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() < 150 && playTake.isVisible())
????{
?????Chap = true;
????}
????
????//被吃的棋子是否和當前仕相近
????else if (Man > 13 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() > 340 && playTake.isVisible())
????{
?????Chap = true;
????}
???}// else if
???
???//下、左
???else if (play.getX() - playTake.getX() <= 60 && play.getX() - playTake.getX() >= 30 && playTake.getY() - play.getY() >= 30 && playTake.getY() - play.getY() <= 60)
???{
????//被吃的棋子是否和當前士相近
????if (Man < 14 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() < 150 && playTake.isVisible())
????{
?????Chap = true;
????}
????
????//被吃的棋子是否和當前仕相近
????else if (Man > 13 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() > 340 && playTake.isVisible())
????{
?????Chap = true;
????}
???}// else if
???
???//下、右
???else if (playTake.getX() - play.getX() >= 30 && playTake.getX() - play.getX() <= 60 && playTake.getY() - play.getY() >= 30 && playTake.getY() - play.getY() <= 60)
???{
????//被吃的棋子是否和當前士相近
????if (Man < 14 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() < 150 && playTake.isVisible())
????{
?????Chap = true;
????}
????
????//被吃的棋子是否和當前仕相近
????else if (Man > 13 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() > 340 && 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(),40,40);
???}
???
??}//士、仕吃棋規則結束
??
??/*將、帥移動規則*******************************************************/
??public void willRule(int Man ,JLabel play,JLabel playQ[],MouseEvent me)??
??{???
???//向上
???if (me.getX() - play.getX() >= -5 && me.getX() - play.getX() <= 35 && play.getY() - me.getY() <= 50 && play.getY() - me.getY() >= 15)
???{
????//將是否超過自己的界限
????if (Man == 30 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()-50,40,40);?
????}?
????
????//帥是否超過自己的界限
????else if (Man == 31 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()-50,40,40);?
????}????
???}//if
???
???//向左
???else if (play.getX() - me.getX() >= 15 && play.getX() - me.getX() <= 50 && me.getY() - play.getY() <= 40 && me.getY() - play.getY() >= -5)
???{
????//將是否超過自己的界限
????if (Man == 30 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()-50,play.getY(),40,40);?
????}?
????
????//帥是否超過自己的界限
????else if (Man == 31 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()-50,play.getY(),40,40);????
????}?????
???}//else if
???
???//向右
???else if (me.getX() - play.getX() >= 50 && me.getX() - play.getX() <= 85 && me.getY() - play.getY() <= 40 && me.getY() - play.getY() >= -5)
???{
????//將、帥規則
????if (Man == 30 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()+50,play.getY(),40,40);?
????}?
????
????else if (Man == 31 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()+50,play.getY(),40,40);?
????}????
???}//else if
???
???//向下
???else if (me.getX() - play.getX() >= -5 && me.getX() - play.getX() <= 35 && me.getY() - play.getY() <= 85 && me.getY() - play.getY() >= 50)
???{
????//將、帥規則
????if (Man == 30 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()+50,40,40);
????}?
????
????else if (Man == 31 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)
????{
?????//當前記錄添加到集合(用于悔棋)
?????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()+50,40,40);?
?????
????}?
????????
???}//else if ???
???
??}//將、帥移動規則結束
??
??public void willRule(int Man ,JLabel play,JLabel playTake ,JLabel playQ[])
??{?
???//當前狀態??
???boolean will = false;
???
???//向上吃
???if (play.getX() - playTake.getX() >= -10 && play.getX() - playTake.getX() <= 10 && play.getY() - playTake.getY() >= 40 && play.getY() - playTake.getY() <= 60 && playTake.isVisible())
???{
????//被吃的棋子是否和當前將相近
????if (Man == 30 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() < 150)
????{
?????will = true;
????}
????
????//被吃的棋子是否和當前帥相近
????else if (Man == 31 && playTake.getY() > 340 && playTake.getX() > 150 && playTake.getX() < 300)
????{
?????will = true;
????}
???}
???
???//向左吃
???else if (play.getX() - playTake.getX() >= 40 && play.getX() - playTake.getX() <= 60 && playTake.getY() - play.getY() <= 10 && playTake.getY() - play.getY() >= -10 && playTake.isVisible())
???{
????//將、帥規則
????if (Man == 30 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() < 150)
????{
?????will = true;
????}
????
????else if (Man == 31 && playTake.getY() > 340 && playTake.getX() > 150 && playTake.getX() < 300)
????{
?????will = true;
????}
???}
???
???//向右吃
???else if (playTake.getX() - play.getX() >= 40 && playTake.getX() - play.getX() <= 60 && playTake.getY() - play.getY() <= 10 && playTake.getY() - play.getY() >= -10 && playTake.isVisible())
???{
????//將、帥規則
????if (Man == 30 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() < 150)
????{
?????will = true;
????}
????
????else if (Man == 31 && playTake.getY() > 340 && playTake.getX() > 150 && playTake.getX() < 300)
????{
?????will = true;
????}
???}
???
???//向下
???else if (playTake.getX() - play.getX() >= -10 && playTake.getX() - play.getX() <= 10 && playTake.getY() - play.getY() <= 60 && playTake.getY() - play.getY() >= 40 && playTake.isVisible())
???{
????//將、帥規則
????if (Man == 30 && playTake.getX() > 150 && playTake.getX() < 300 && playTake.getY() < 150)
????{
?????will = true;
????}
????
????else if (Man == 31 && playTake.getY() > 340 && playTake.getX() > 150 && playTake.getX() < 300)
????{
?????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(),40,40);
???}???
???
??}//將、帥吃規則結束
??
?}//規則類
?
}//主框架類
posted on 2006-11-15 00:43
楊彩 閱讀(4285)
評論(5) 編輯 收藏 所屬分類:
經典java程序