楊彩的Java博客
          醉里挑燈看劍,夢里吹雨聽風.仗劍獨走天涯,試問誰與爭鋒!
          posts - 8,comments - 49,trackbacks - 0

          /*
          ?*中國象棋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 楊彩 閱讀(4300) 評論(5)  編輯  收藏 所屬分類: 經典java程序

          FeedBack:
          # re: Java版中國象棋
          2007-05-31 20:12 | 逗逗
          能不能逐一的解釋一下呢,看得不怎么太懂,謝謝了  回復  更多評論
            
          # re: Java版中國象棋
          2007-06-04 18:27 | 逗逗
          能不能把異常處理的也順便解釋一下捏.萬分感謝拉  回復  更多評論
            
          # re: 我想辦個Java版中國象棋在線游戲
          2007-09-23 22:59 | 包子
          我想辦個Java版中國象棋在線游戲 特來求教 聯系QQ:54478418  回復  更多評論
            
          # re: Java版中國象棋
          2007-10-21 22:34 | 地方士大夫
          不能用啊 沒有棋盤  回復  更多評論
            
          # re: Java版中國象棋[未登錄]
          2007-10-23 16:19 | 楊彩
          可以自己弄個背景圖片!  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 闽清县| 奎屯市| 桦川县| 兴隆县| 定西市| 高邮市| 四会市| 双流县| 民权县| 邹城市| 安顺市| 禄丰县| 乐亭县| 扎兰屯市| 兴仁县| 邛崃市| 京山县| 扶绥县| 昌宁县| 灵武市| 陆良县| 磴口县| 达日县| 东源县| 鹰潭市| 扎兰屯市| 教育| 宜宾市| 五大连池市| 芜湖市| 双柏县| 象山县| 城固县| 东海县| 阳西县| 甘德县| 包头市| 永丰县| 天门市| 上思县| 盐亭县|