中國(guó)象棋源代碼Java程序_第1頁(yè)
中國(guó)象棋源代碼Java程序_第2頁(yè)
中國(guó)象棋源代碼Java程序_第3頁(yè)
中國(guó)象棋源代碼Java程序_第4頁(yè)
中國(guó)象棋源代碼Java程序_第5頁(yè)
已閱讀5頁(yè),還剩99頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;importjava.io.*;publicclassChess{publicstaticvoidmain(Stringargs[]){newChessMainFrame("中國(guó)象棋:觀棋不語真君子,棋死無悔大丈夫’);))classChessMainFrameextendsJFrameimplementsActionListener,MouseListener,Runnable{〃玩家JLabelplay[]=newJLabel[32];〃棋盤JLabelimage;//窗格Containercon;//工具欄JToolBarjmain;//重新開始JButtonanew;//悔棋JButtonrepent;//退出JButtonexit;//當(dāng)前信息JLabeltext;〃保存當(dāng)前操作VectorVar;//規(guī)則類對(duì)象(使于調(diào)用方法)ChessRulerule;/***單擊棋子*chessManClick=true閃爍棋子并給線程響應(yīng)*chessManClick=false吃棋子停止閃爍并給線程響應(yīng)*/booleanchessManClick;/****控制玩家走棋**chessPlayClick=1黑棋走棋標(biāo)chessPlayClick=2紅棋走棋默認(rèn)紅棋標(biāo)chessPlayClick=3雙方都不能走棋*/intchessPlayClick=2;〃控制棋子閃爍的線程Threadtmain;〃把第一次的單擊棋子給線程響應(yīng)staticintMan,i;ChessMainFrame(){newChessMainFrame("中國(guó)象棋");)/**標(biāo)構(gòu)造函數(shù)標(biāo)初始化圖形用戶界面*/ChessMainFrame(StringTitle){//獲行客格引用con=this.getContentPane();con.setLayout(null);〃實(shí)例化規(guī)則類rule=newChessRule();Var=newVector();〃創(chuàng)建工具欄jmain=newJToolBar();text=newJLabel("歡迎使用象棋對(duì)弈系統(tǒng)");//當(dāng)鼠標(biāo)放上顯示信息text.setToolTipText("信息提示");anew=newJButton("新游戲");anew.setToolTipText("重新開始新的一局");exit=newJButton("退出");exit.setToolTipText("退出象棋程序程序");repent=newJButton("悔棋");repent.setToolTipText("返回到上次走棋的位置");〃把組件添加到工具欄jmain.setLayout(newGridLayout(0,4));jmain.add(anew);jmain.add(repent);jmain.add(exit);jmain.add(text);jmain.setBounds(0,0,558,30);con.add(jmain);〃添加棋子標(biāo)簽drawChessMan();〃注冊(cè)按扭監(jiān)聽anew.addActionListener(this);repent.addActionListener(this);exit.addActionListener(this);〃注冊(cè)棋子移動(dòng)監(jiān)聽for(inti=0;i<32;i++){con.add(play[i]);play[i].addMouseListener(this);)〃添加棋盤標(biāo)簽con.add(image=newJLabel(newImageIcon("image\\Main.GIF")));image.setBounds(0,30,558,620);image.addMouseListener(this);〃注冊(cè)窗體關(guān)閉監(jiān)聽this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventwe){System.exit(0);)));//窗體居中Dimension screenSizeToolkit.getDefaultToolkit().getScreenSize();DimensionframeSize=this.getSize();if(frameSize.height>screenSize.height){frameSize.height=screenSize.height;)if(frameSize.width>screenSize.width){frameSize.width=screenSize.width;this.setLocation((screenSize.width-frameSize.width)/2-280,(screenSize.height-frameSize.height)/2-350);//設(shè)置this.setIconImage(new ImageIcon("image\\ 紅將.6出").且?{山@g?());this.setResizable(false);this.setTitle(Title);this.setSize(558,670);this.show();)/**糕添加棋子方法*/publicvoiddrawChessMan(){〃流程控制inti,k;//圖標(biāo)Iconin;//黑色棋子〃車in=newImageIcon("image\\黑車.GIF");for(i=0,k=24;i<2;i++,k+=456){play[i]=newJLabel(in);play[i].setBounds(k,56,55,55);play[i].setName("車1");)//馬in=newImageIcon("image\\黑馬.GIF");for(i=4,k=81;i<6;i++,k+=342){play[i]=newJLabel(in);play[i].setBounds(k,56,55,55);play[i].setName("馬1");)//相in=newImageIcon("image\\黑象.GIF");for(i=8,k=138;i<10;i++,k+=228){play[i]=newJLabel(in);play[i].setBounds(k,56,55,55);play[i].setName("象1");)〃士in=newImageIcon("image\\黑土.GIF");for(i=12,k=195;i<14;i++,k+=114){play[i]=newJLabel(in);play[i].setBounds(k,56,55,55);play[i].setName("±1");)〃卒in=newImageIcon("image\\黑卒.GIF");for(i=16,k=24;i<21;i++,k+=114){play[i]=newJLabel(in);play[i].setBounds(k,227,55,55);play[i].setName("卒1"+i);)//炮in=newImageIcon("image\\黑炮.GIF");for(i=26,k=81;i<28;i++,k+=342){play[i]=newJLabel(in);play[i].setBounds(k,170,55,55);play[i].setName("炮1"+i);)〃將in=newImageIcon("image\\黑將.GIF");play[30]=newJLabel(in);play[30].setBounds(252,56,55,55);play[30].setName("將1");〃紅色棋子〃車in=newImageIcon("image\\紅車.GIF");for(i=2,k=24;i<4;i++,k+=456){play[i]=newJLabel(in);play[i].setBounds(k,569,55,55);play[i].setName("車2");)//馬in=newImageIcon("image\\紅馬.GIF");for(i=6,k=81;i<8;i++,k+=342){play[i]=newJLabel(in);play[i].setBounds(k,569,55,55);play[i].setName("馬2");)//相in=newImageIcon("image\\紅象.GIF");for(i=10,k=138;i<12;i++,k+=228){play[i]=newJLabel(in);play[i].setBounds(k,569,55,55);play[i].setName("象2");)//士in=newImageIcon("image\\紅士.GIF");for(i=14,k=195;i<16;i++,k+=114){play[i]=newJLabel(in);play[i].setBounds(k,569,55,55);play[i].setName("士2");〃兵in=newImageIcon("image\\紅卒.GIF");for(i=21,k=24;i<26;i++,k+=114){play[i]=newJLabel(in);play[i].setBounds(k,398,55,55);play[i].setName("卒2"+i);)〃炮in=newImageIcon("image\\紅炮.GIF");for(i=28,k=81;i<30;i++,k+=342){play[i]=newJLabel(in);play[i].setBounds(k,455,55,55);play[i].setName("炮2"+i);)〃帥in=newImageIcon("image\\紅將.GIF");play[31]=newJLabel(in);play[31].setBounds(252,569,55,55);play[31].setName("帥2");/****線程方法控制棋子閃爍*/publicvoidrun(){while(true){//單擊棋子第一下開始閃爍if(chessManClick){play[Man].setVisible(false);〃時(shí)間控制try{tmain.sleep(200);)catch(Exceptione){)play[Man].setVisible(true);//閃爍當(dāng)前提示信息以免用戶看不見else{text.setVisible(false);〃時(shí)間控制try{tmain.sleep(250);)catch(Exceptione){)text.setVisible(true);)try{tmain.sleep(350);)catch(Exceptione){)/****單擊棋子方法*/publicvoidmouseClicked(MouseEventme){System.out.println("Mouse");//當(dāng)前坐標(biāo)intEx=0,Ey=0;//啟動(dòng)線程if(tmain==null){tmain=newThread(this);tmain.start();)〃單擊棋盤(移動(dòng)棋子)if(me.getSource().equals(image)){〃該紅棋走棋的時(shí)候if(chessPlayClick==2&&play[Man].getName().charAt(1)=='2'){Ex=play[Man].getX();Ey=play[Man].getY();〃移動(dòng)卒、兵if(Man>15&&Man<26){rule.armsRule(Man,play[Man],me);)〃移動(dòng)炮elseif(Man>25&&Man<30){rule.cannonRule(play[Man],play,me);)//移動(dòng)車elseif(Man>=0&&Man<4){rule.cannonRule(play[Man],play,me);)//移動(dòng)馬elseif(Man>3&&Man<8){rule.horseRule(play[Man],play,me);)//移動(dòng)相、象elseif(Man>7&&Man<12){rule.elephantRule(Man,play[Man],play,me);//移動(dòng)仕、士elseif(Man>11&&Man<16){rule.chapRule(Man,play[Man],play,me);)//移動(dòng)將、帥elseif(Man==30||Man==31){rule.willRule(Man,play[Man],play,me);)〃是否走棋錯(cuò)誤(是否在原地沒有動(dòng))if(Ex==play[Man].getX()&&Ey==play[Man].getY()){text.setText(" 紅棋走棋");chessPlayClick=2;)else{text.setText(" 黑棋走棋");chessPlayClick=1;}//if〃該黑棋走棋的時(shí)候elseif(chessPlayClick==1&&play[Man].getName().charAt(1)='1'){Ex=play[Man].getX();Ey=play[Man].getY();〃移動(dòng)卒、兵if(Man>15&&Man<26){rule.armsRule(Man,play[Man],me);}//移動(dòng)炮elseif(Man>25&&Man<30){rule.cannonRule(play[Man],play,me);}//移動(dòng)車elseif(Man>=0&&Man<4){rule.cannonRule(play[Man],play,me);//移動(dòng)馬elseif(Man>3&&Man<8){rule.horseRule(play[Man],play,me);)//移動(dòng)相、象elseif(Man>7&&Man<12){rule.elephantRule(Man,play[Man],play,me);)//移動(dòng)仕、士elseif(Man>11&&Man<16){rule.chapRule(Man,play[Man],play,me);)//移動(dòng)將、帥elseif(Man==30||Man==31){rule.willRule(Man,play[Man],play,me);〃是否走棋錯(cuò)誤(是否在原地沒有動(dòng))if(Ex==play[Man].getX()&&Ey==play[Man].getY()){text.setText(" 黑棋走棋");chessPlayClick=1;)else{text.setText(" 紅棋走棋");chessPlayClick=2;)}//elseif//當(dāng)前沒有操作(停止閃爍)chessManClick=false;}//if〃單擊棋子else{//第一次單擊棋子(閃爍棋子)if(!chessManClick){for(inti=0;i<32;i++){〃被單擊的棋子if(me.getSource().equals(play[i])){〃告訴線程讓該棋子閃爍Man=i;//開始閃爍chessManClick=true;break;)}//for}//if〃第二次單擊棋子(吃棋子)elseif(chessManClick){//當(dāng)前沒有操作(停止閃爍)chessManClick=false;for(i=0;i<32;i++){〃找到被吃的棋子if(me.getSource().equals(play[i])){〃該紅棋吃棋的時(shí)候if(chessPlayClick== 2 &&play[Man].getName().charAt(1)=='2'){Ex=play[Man].getX();Ey=play[Man].getY();〃卒、兵吃規(guī)則if(Man>15&&Man<26){rule.armsRule(play[Man],play[i]);)〃炮吃規(guī)則elseif(Man>25&&Man<30){rule.cannonRule(0,play[Man],play[i],play,me);)〃車吃規(guī)則elseif(Man>=0&&Man<4){rule.cannonRule(1,play[Man],play[i],play,me);)〃馬吃規(guī)則elseif(Man>3&&Man<8){rule.horseRule(play[Man],play[i],play,me);)〃相、象吃規(guī)則elseif(Man>7&&Man<12){rule.elephantRule(play[Man],play[i],play);)〃士、仕吃棋規(guī)則elseif(Man>11&&Man<16){rule.chapRule(Man,play[Man],play[i],play);)〃將、帥吃棋規(guī)則elseif(Man==30||Man==31){rule.willRule(Man,play[Man],play[i],play);play[Man].setVisible(true);)〃是否走棋錯(cuò)誤(是否在原地沒有動(dòng))if(Ex==play[Man].getX()&&Ey==play[Man].getY()){text.setText(" 紅棋走棋");chessPlayClick=2;break;)else{text.setText(" 黑棋走棋");chessPlayClick=1;break;)}//if〃該黑棋吃棋的時(shí)候elseif(chessPlayClick== 1 &&play[Man].getName().charAt(1)=='1'){Ex=play[Man].getX();Ey=play[Man].getY();〃卒吃規(guī)則if(Man>15&&Man<26){rule.armsRule(play[Man],play[i]);)〃炮吃規(guī)則elseif(Man>25&&Man<30){rule.cannonRule(0,play[Man],play[i],play,me);)〃車吃規(guī)則elseif(Man>=0&&Man<4){rule.cannonRule(1,play[Man],play[i],play,me);)〃馬吃規(guī)則elseif(Man>3&&Man<8){rule.horseRule(play[Man],play[i],play,me);)〃相、象吃規(guī)則elseif(Man>7&&Man<12){rule.elephantRule(play[Man],play[i],play);)〃士、仕吃棋規(guī)則elseif(Man>11&&Man<16){rule.chapRule(Man,play[Man],play[i],play);)〃將、帥吃棋規(guī)則elseif(Man==30||Man==31){rule.willRule(Man,play[Man],play[i],play);play[Man].setVisible(true);〃是否走棋錯(cuò)誤(是否在原地沒有動(dòng))if(Ex==play[Man].getX()&&Ey==play[Man].getY()){text.setText(" 黑棋走棋");chessPlayClick=1;break;)else{text.setText(" 紅棋走棋");chessPlayClick=2;break;)}//elseif}//if}//for〃是否勝利if(!play[31].isVisible()){JOptionPane.showConfirmDialog(this,"黑棋勝利","玩家一勝利”,JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);〃雙方都不可以在走棋了chessPlayClick=3;text.setText("黑棋勝利");}//ifelseif(!play[30].isVisible()){JOptionPane.showConfirmDialog(this,"紅棋勝利"「玩家二勝利",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);chessPlayClick=3;text.setText("紅棋勝利");}//elseif}//else}//else}publicvoidmousePressed(MouseEventme){}publicvoidmouseReleased(MouseEventme){}publicvoidmouseEntered(MouseEventme){}publicvoidmouseExited(MouseEventme){}/**糕定義按鈕的事件響應(yīng)*/publicvoidactionPerformed(ActionEventae){〃重新開始按鈕if(ae.getSource().equals(anew)){inti,k;〃重新排列每個(gè)棋子的位置//黑色棋子〃車for(i=0,k=24;i<2;i++,k+=456){play[i].setBounds(k,56,55,55);)//馬for(i=4,k=81;i<6;i++,k+=342){play[i].setBounds(k,56,55,55);)//相for(i=8,k=138;i<10;i++,k+=228){play[i].setBounds(k,56,55,55);)//士for(i=12,k=195;i<14;i++,k+=114){play[i].setBounds(k,56,55,55);//卒for(i=16,k=24;i<21;i++,k+=114){play[i].setBounds(k,227,55,55);)//炮for(i=26,k=81;i<28;i++,k+=342){play[i].setBounds(k,170,55,55);)//將play[30].setBounds(252,56,55,55);〃紅色棋子//車for(i=2,k=24;i<4;i++,k+=456){play[i].setBounds(k,569,55,55);)//馬for(i=6,k=81;i<8;i++,k+=342){play[i].setBounds(k,569,55,55);〃相for(i=10,k=138;i<12;i++,k+=228){play[i].setBounds(k,569,55,55);)〃士for(i=14,k=195;i<16;i++,k+=114){play[i].setBounds(k,569,55,55);)〃兵for(i=21,k=24;i<26;i++,k+=114){play[i].setBounds(k,398,55,55);)〃炮for(i=28,k=81;i<30;i++,k+=342){play[i].setBounds(k,455,55,55);〃帥play[31].setBounds(252,569,55,55);chessPlayClick=2;text.setText(" 紅棋走棋");for(i=0;i<32;i++){play[i].setVisible(true);)〃清除Vector中的容Var.clear();)〃悔棋按鈕elseif(ae.getSource().equals(repent)){try{〃獲得setVisible屬性值StringS=(String)Var.get(Var.size()-4);〃獲得X坐標(biāo)intx=Integer.parseInt((String)Var.get(Var.size()-3));〃獲得Y坐標(biāo)inty=Integer.parseInt((String)Var.get(Var.size()-2));//獲得索引intM=Integer.parseInt((String)Var.get(Var.size()-1));〃賦給棋子play[M].setVisible(true);play[M].setBounds(x,y,55,55);if(play[M].getName().charAt(1)=='1'){text.setText(" 黑棋走棋");chessPlayClick=1;)else{text.setText(" 紅棋走棋");chessPlayClick=2;)//刪除用過的坐標(biāo)Var.remove(Var.size()-4);Var.remove(Var.size()-3);Var.remove(Var.size()-2);Var.remove(Var.size()-1);〃停止旗子閃爍chessManClick=false;)catch(Exceptione){))//退出elseif(ae.getSource().equals(exit)){intj=JOptionPane.showConfirmDialog(this,"真的要退出嗎?”,“退出”,JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if(j==JOptionPane.YES_OPTION){System.exit(0);)/*定義中國(guó)象棋規(guī)則的類*/classChessRule{/**卒子的移動(dòng)規(guī)則*/publicvoidarmsRule(intMan,JLabelplay,MouseEventme){//黑卒向下if(Man<21){〃向下移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)if((me.getY()-play.getY())> 27 &&(me.getY()-play.getY())<86&&(me.getX()-play.getX())<55&&(me.getX()-play.getX())>0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(play.getX(),play.getY()+57,55,55);)〃向右移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河elseif(play.getY()>284&&(me.getX()-play.getX())>=57&&(me.getX()-play.getX())<=112){play.setBounds(play.getX()+57,play.getY(),55,55);)〃向左移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河elseif(play.getY()>284&&(play.getX()-me.getX())>=&&(play.getX()-me.getX())<=58){〃模糊坐標(biāo)play.setBounds(play.getX()-57,play.getY(),55,55);))//紅卒向上else{//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));〃向上移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)if((me.getX()-play.getX())>= 0 &&(me.getX()-play.getX())<=55&&(play.getY()-me.getY())>27&&play.getY()-me.getY()<86){play.setBounds(play.getX(),play.getY()-57,55,55);)〃向右移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河elseif(play.getY()<=341&&(me.getX()-play.getX())>=57&&(me.getX()-play.getX())<=112){play.setBounds(play.getX()+57,play.getY(),55,55);)〃向左移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河elseif(play.getY()<=341&&(play.getX()-me.getX())>=&&(play.getX()-me.getX())<=58){play.setBounds(play.getX()-57,play.getY(),55,55);))}〃卒移動(dòng)結(jié)束/**卒吃棋規(guī)則*/publicvoidarmsRule(JLabelplay1,JLabelplay2){//向右走if((play2.getX()-play1.getX())<=112&&(play2.getX()-play1.getX())>=57&&(play1.getY()-play2.getY())<22&&(play1.getY()-play2.getY())> -22 &&play2.isVisible()&&play1.getName().charAt(1)!=play2.getName().charAt(1)){〃黑棋要過河才能右吃棋if(play1.getName().charAt(1)=='1'&&play1.getY()>284&&play1.getName().charAt(1)!=play2.getName().charAt(1)){play2.setVisible(false);〃把對(duì)方的位置給自己play1.setBounds(play2.getX(),play2.getY(),55,55);)〃紅棋要過河才左能吃棋e(cuò)lseif(play1.getName().charAt(1)=='2'&&play1.getY()<341&&play1.getName().charAt(1)!=play2.getName().charAt(1)){play2.setVisible(false);〃把對(duì)方的位置給自己play1.setBounds(play2.getX(),play2.getY(),55,55);//向左走elseif((play1.getX()-play2.getX())<=112&&(play1.getX()-play2.getX())>=57&&(play1.getY()-play2.getY())<22&&(play1.getY()-play2.getY())>-22&&play2.isVisible()&&play1.getName().charAt(1)!=play2.getName().charAt(1)){〃黑棋要過河才能左吃棋if(play1.getName().charAt(1)=='1'&&play1.getY()>284&&play1.getName().charAt(1)!=play2.getName().charAt(1)){play2.setVisible(false);〃把對(duì)方的位置給自己play1.setBounds(play2.getX(),play2.getY(),55,55);)〃紅棋要過河才能右吃棋e(cuò)lseif(play1.getName().charAt(1)=='2'&&play1.getY()<341&&play1.getName().charAt(1)!=play2.getName().charAt(1)){play2.setVisible(false);〃把對(duì)方的位置給自己play1.setBounds(play2.getX(),play2.getY(),55,55);))//向上走elseif(play1.getX()-play2.getX()>=-22&&play1.getX()-play2.getX()<=22&&play1.getY()-play2.getY()>=-112&&play1.getY()-play2.getY()<=112){〃黑棋不能向上吃棋if(play1.getName().charAt(1)=='1'&&play1.getY()<play2.getY() && play1.getName().charAt(1) !=play2.getName().charAt⑴){play2.setVisible(false);〃把對(duì)方的位置給自己play1.setBounds(play2.getX(),play2.getY(),55,55);)〃紅棋不能向下吃棋e(cuò)lseif(play1.getName().charAt(1)== '2' &&play1.getY()>play2.getY()&&play1.getName().charAt(1)!=play2.getName().charAt(1)){play2.setVisible(false);〃把對(duì)方的位置給自己play1.setBounds(play2.getX(),play2.getY(),55,55);))//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play1.isVisible()));Var.add(String.valueOf(play1.getX()));Var.add(String.valueOf(play1.getY()));Var.add(String.valueOf(Man));//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play2.isVisible()));Var.add(String.valueOf(play2.getX()));Var.add(String.valueOf(play2.getY()));Var.add(String.valueOf⑴);}//卒吃結(jié)束/**炮、車移動(dòng)規(guī)則*/publicvoidcannonRule(JLabelplay,JLabelplayQ[],MouseEvent

me){me){〃起點(diǎn)和終點(diǎn)之間是否有棋子intCount=0;〃上、下移動(dòng)if(play.getX()-me.getX()<=0&&play.getX()-me.getX()>=-55){〃指定所有模糊Y坐標(biāo)for(inti=56;i<=571;i+=57){〃移動(dòng)的Y坐標(biāo)是否有指定坐標(biāo)相近的if(i-me.getY()>=-27&&i-me.getY()<=27){〃所有的棋子for(intj=0;j<32;j++){//找出在同一條豎線的所有棋子、并不包括自己if(playQ[j].getX()-play.getX()>=-27&&playQ[j].getX()-play.getX()<=27&&playQ[j].getName()!=play.getName()&&playQ[j].isVisible()){//從起點(diǎn)到終點(diǎn)(從左到右)for(intk=play.getY()+57;k<i;k+=57){〃大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子if(playQ[j].getY()&&if(playQ[j].getY()&&playQ[j].getY()>play.getY()){〃中間有一個(gè)棋子就不可以從這條豎線過去Count++;break;)}//for//從起點(diǎn)到終點(diǎn)(從右到左)for(intk=i+57;k<play.getY();k+=57){〃找起點(diǎn)和終點(diǎn)的棋子if(playQ[j].getY()<play.getY()&&playQ[j].getY()>i){Count++;break;}}//for}//if}//for〃起點(diǎn)和終點(diǎn)沒有棋子就可以移動(dòng)了if(Count==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(play.getX(),i,55,55);break;)}//if}//for}//if〃左、右移動(dòng)elseif(play.getY()-me.getY()>=-27&&play.getY()-me.getY()<=27){〃指定所有模糊X坐標(biāo)for(inti=24;i<=480;i+=57){〃移動(dòng)的X坐標(biāo)是否有指定坐標(biāo)相近的if(i-me.getX()>=-55&&i-me.getX()<=0){〃所有的棋子for(intj=0;j<32;j++){//找出在同一條橫線的所有棋子、并不包括自己if(playQ[j].getY()-play.getY()>=-27&&playQ[j].getY()-play.getY()<=27&&playQ[j].getName()!=play.getName()&&playQ[j].isVisible()){//從起點(diǎn)到終點(diǎn)(從上到下)for(intk=play.getX()+57;k<i;k+=57){〃大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子if(playQ[j].getX()<i&&playQ[j].getX()>play.getX()){//中間有一個(gè)棋子就不可以從這條橫線過去Count++;break;)}//for//從起點(diǎn)到終點(diǎn)(從下到上)for(intk=i+57;k<play.getX();k+=57){〃找起點(diǎn)和終點(diǎn)的棋子if(playQ[j].getX()<play.getX()&&playQ[j].getX()>i){Count++;break;}//for}//if}//for〃起點(diǎn)和終點(diǎn)沒有棋子if(Count==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(i,play.getY(),55,55);break;}}//if}//for}//else}//炮、車移動(dòng)方法結(jié)束/**炮、車吃棋規(guī)則*/publicvoidcannonRule(intChess,JLabelplay,JLabelplayTake,JLabelplayQ口,MouseEventme){〃起點(diǎn)和終點(diǎn)之間是否有棋子intCount=0;〃所有的棋子for(intj=0;j<32;j++){//找出在同一條豎線的所有棋子、并不包括自己if(playQ[j].getX()-play.getX()>=-27&&playQ[j].getX()-play.getX()<=27&&playQ[j].getName()!=play.getName()&&playQ[j].isVisible()){〃自己是起點(diǎn)被吃的是終點(diǎn)(從上到下)for(intk=play.getY()+57;k<playTake.getY();k+=57){〃大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子if(playQ[j].getY()<playTake.getY()&&playQ[j].getY()>play.getY()){//計(jì)算起點(diǎn)和終點(diǎn)的棋子個(gè)數(shù)Count++;break;)}//for〃自己是起點(diǎn)被吃的是終點(diǎn)(從下到上)for(intk=playTake.getY();k<play.getY();k+=57){〃找起點(diǎn)和終點(diǎn)的棋子if(playQ[j].getY()<play.getY()&&playQ[j].getY()>playTake.getY()){Count++;break;}}//for}//if//找出在同一條豎線的所有棋子、并不包括自己elseif(playQ[j].getY()-play.getY()>=-10&&playQ[j].getY()-play.getY()<=10&&playQ[j].getName()!=play.getName()&&playQ[j].isVisible()){〃自己是起點(diǎn)被吃的是終點(diǎn)(從左到右)for(intk=play.getX()+50;k<playTake.getX();k+=57){〃大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子if(playQ[j].getX()<playTake.getX()&&playQ[j].getX()>play.getX()){Count++;break;)}//for〃自己是起點(diǎn)被吃的是終點(diǎn)(從右到左)for(intk=playTake.getX();k<play.getX();k+=57){〃找起點(diǎn)和終點(diǎn)的棋子if(playQ[j].getX()<play.getX()&&playQ[j].getX()>playTake.getX()){Count++;break;}}//for}//if}//for〃起點(diǎn)和終點(diǎn)之間要一個(gè)棋子是炮的規(guī)則、并不能吃自己的棋子if(Count==1&&Chess==0&&playTake.getName().charAt(1)!=play.getName().charAt(1)){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(playTake.isVisible()));Var.add(String.valueOf(playTake.getX()));Var.add(String.valueOf(playTake.getY()));Var.add(String.valueOf(i));playTake.setVisible(false);play.setBounds(playTake.getX(),playTake.getY(),55,55);)〃起點(diǎn)和終點(diǎn)之間沒有棋子是車的規(guī)則、并不能吃自己的棋子elseif(Count==0 &&Chess== 1 &&playTake.getName().charAt(1)!=play.getName().charAt(1)){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(playTake.isVisible()));Var.add(String.valueOf(playTake.getX()));Var.add(String.valueOf(playTake.getY()));Var.add(String.valueOf(i));playTake.setVisible(false);play.setBounds(playTake.getX(),playTake.getY(),55,55);)}//炮、車吃棋方法結(jié)束/**馬移動(dòng)規(guī)則*/publicvoidhorseRule(JLabelplay,JLabelplayQ口,MouseEventme){〃保存坐標(biāo)和障礙intEx=0,Ey=0,Move=0;〃上移、左邊if(play.getX()-me.getX()>=2&&play.getX()-me.getX()<=57&&play.getY()-me.getY()>=87&&play.getY()-me.getY()<=141){〃合法的Y坐標(biāo)for(inti=56;i<=571;i+=57){〃移動(dòng)的Y坐標(biāo)是否有指定坐標(biāo)相近的if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;break;))〃合法的X坐標(biāo)for(inti=24;i<=480;i+=57){〃移動(dòng)的X坐標(biāo)是否有指定坐標(biāo)相近的if(i-me.getX()>=-55&&i-me.getX()<=0){

Ex=i;Ex=i;break;))〃正前方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getX()playQ[i].getX()==0&&play.getY()-playQ[i].getY()==57){Move=1;break;))〃可以移動(dòng)該棋子if(Move==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);}//if〃左移、上邊elseif(play.getY()-me.getY()>=27&&play.getY()-me.getY()<=86&&play.getX()-me.getX()>=70&&play.getX()-me.getX()<=130){//Yfor(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;}}//Xfor(inti=24;i<=480;i+=57){if(i-me.getX()>=-55&&i-me.getX()<=0){Ex=i;〃正左方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getY()playQ[i].getY()==0&&play.getX()-playQ[i].getX()==57){Move=1;break;))if(Move==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);)}//else〃下移、右邊

elseif(me.getY()-play.getY()>=87&&me.getY()-play.getY()<=141&&me,getX()-play.getX()<=87&&me,getX()-play.getX()>=2){//Yfor(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;))//Xfor(inti=24;i<=480;i+=57){if(i-me.getX()>=-55&&i-me.getX()<=0){Ex=i;))〃正下方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getX()-playQ[i].getX()==0&&playQ[i].getY()-play.getY()==57){Move=1;Move=1;break;)if(Move==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);)}//else〃上移、右邊elseif(play.getY()-me.getY()>=87&&play.getY()-me.getY()<=141&&me.getX()-play.getX()<=87&&me.getX()-play.getX()>=30){〃合法的Y坐標(biāo)for(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){

Ey=i;break;))〃合法的X坐標(biāo)for(inti=24;i<=480;i+=57){if(i-me.getX()>=-55&&i-me.getX()<=0){Ex=i;break;))〃正前方是否有別的棋子for(inti=0;i<32;i++){System.out.println(i+"playQ[i].getX()="+playQ[i].getX());//System.out.println("play.getX()="+play.getX());if(playQ[i].isVisible()&&play.getX()playQ[i].getX()==0&&play.getY()-playQ[i].getY()==57){Move=1;Move=1;//System.out.println("play.getY()="+play.getY());//System.out.println("playQ[i].getY()="+playQ[i].getY());break;))〃可以移動(dòng)該棋子if(Move==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);)}//else〃下移、左邊elseif(me.getY()-play.getY()>=87&&me.getY()-play.getY()<=141&&play.getX()-me.getX()<=87&&play.getX()-

me.getX()>=10){〃合法的Y坐標(biāo)for(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;break;))〃合法的X坐標(biāo)for(inti=24;i<=480;i+=57){if(i-me.getX()>=-55&&i-me.getX()<=0){Ex=i;break;))〃正下方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getX()playQ[i].getX()==0&&play.getY()-playQ[i].getY()==57){Move=1;Move=1;break;)〃可以移動(dòng)該棋子if(Move==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);)}//else〃右移、上邊elseif(play.getY()-me.getY()>=30&&play.getY()-me.getY()<=87&&me.getX()-play.getX()<=141&&me.getX()-play.getX()>=87){//Yfor(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;))//Xfor(inti=24;i<=480;i+=57){if(i-me.getX()>=-55&&i-me.getX()<=0){Ex=i;))〃正右方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getY()playQ[i].getY()==0&&playQ[i].getX()-play.getX()==57){Move=1;break;))if(Move==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);)}//else〃右移、下邊elseif(me.getY()-play.getY()>=30&&me.getY()-play.getY()<=87&&me.getX()-play.getX()<=141&&me.getX()-play.getX()>=87){//Yfor(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;}}//Xfor(inti=24;i<=480;i+=57){if(i-me.getX()>=-55&&i-me.getX()<=0){Ex=i;))〃正右方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getY()playQ[i].getY()==0&&playQ[i].getX()-play.getX()==57){Move=1;break;))if(Move==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);}//else〃左移、下邊elseif(me.getY()-play.getY()>=30&&me.getY()-play.getY()<=87&&play.getX()-me.getX()<=141&&play.getX()-me.getX()>=87){//Yfor(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;}}//Xfor(inti=24;i<=480;i+=57){if(i-me.getX()>=-55&&i-me.getX()<=0){Ex=i;〃正左方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getY()playQ[i].getY()==0&&play.getX()-playQ[i].getX()==57){Move=1;break;))if(Move==0){//當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);)}//else}//馬移動(dòng)結(jié)束/**馬吃棋規(guī)則*/publicvoidhorseRule(JLabelplay,JLabelplayTake,JLabelplayQ口,MouseEventme){//障礙intMove=0;booleanChess=false;〃上移、左吃if(play.getName().charAt(1)!=playTake.getName().charAt(1)&&play.getX()-playTake.getX()==57&&play.getY()-playTake.getY()==114){〃正前方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getX()-playQ[i].getX()==0&&play.getY()-playQ[i].getY()==57){Move=1;break;)}//forChess=true;}//if〃上移、右吃elseif(play.getY()-playTake.getY()==114&&playTake.getX()-play.getX()==57){〃正前方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getX()-playQ[i].getX()==0&&play.getY()-playQ[i].getY()==57){Move=1;break;}}//forChess=true;}//else〃左移、上吃elseif(play.getY()-playTake.getY()==57&&play.getX()playTake.getX()==114){〃正左方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getY()-playQ[i].getY()==0&&play.getX()-playQ[i].getX()==57){Move=1;break;)}//forChess=true;}//else〃左移、下吃elseif(playTake.getY()-play.getY()==57&&play.getX()playTake.getX()==114){〃正左方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getY()-playQ[i].getY()==0&&play.getX()-playQ[i].getX()==57){Move=1;break;)}//forChess=true;}//else〃右移、上吃elseif(play.getY()-playTake.getY()==57&&playTake.getX()play.getX()==114){〃正右方是否有別的棋子for(inti=0;i<32;i++){if(playQ[i].isVisible()&&play.getY()-playQ[i].getY()==0&&playQ[i].getX()-play.getX()==57){Move=1;break;}}//forChess=true;}//else〃右移、下吃elseif(playTake.getY()-play.getY()==57 &&playTake.getX()-play.get

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論