中国象棋源代码Java程序_第1页
中国象棋源代码Java程序_第2页
中国象棋源代码Java程序_第3页
中国象棋源代码Java程序_第4页
中国象棋源代码Java程序_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;importjava.io.*;publicclassChess{publicstaticvoidmain(Stringargs[]){newChessMainFrame("中国象棋:观棋不语真君子,棋死无悔大丈夫’);))classChessMainFrameextendsJFrameimplementsActionListener,MouseListener,Runnable{〃玩家JLabelplay[]=newJLabel[32];〃棋盘JLabelimage;//窗格Containercon;//工具栏JToolBarjmain;//重新开始JButtonanew;//悔棋JButtonrepent;//退出JButtonexit;//当前信息JLabeltext;〃保存当前操作VectorVar;//规则类对象(使于调用方法)ChessRulerule;/***单击棋子*chessManClick=true闪烁棋子并给线程响应*chessManClick=false吃棋子停止闪烁并给线程响应*/booleanchessManClick;/****控制玩家走棋**chessPlayClick=1黑棋走棋标chessPlayClick=2红棋走棋默认红棋标chessPlayClick=3双方都不能走棋*/intchessPlayClick=2;〃控制棋子闪烁的线程Threadtmain;〃把第一次的单击棋子给线程响应staticintMan,i;ChessMainFrame(){newChessMainFrame("中国象棋");)/**标构造函数标初始化图形用户界面*/ChessMainFrame(StringTitle){//获行客格引用con=this.getContentPane();con.setLayout(null);〃实例化规则类rule=newChessRule();Var=newVector();〃创建工具栏jmain=newJToolBar();text=newJLabel("欢迎使用象棋对弈系统");//当鼠标放上显示信息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);〃添加棋子标签drawChessMan();〃注册按扭监听anew.addActionListener(this);repent.addActionListener(this);exit.addActionListener(this);〃注册棋子移动监听for(inti=0;i<32;i++){con.add(play[i]);play[i].addMouseListener(this);)〃添加棋盘标签con.add(image=newJLabel(newImageIcon("image\\Main.GIF")));image.setBounds(0,30,558,620);image.addMouseListener(this);〃注册窗体关闭监听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);//设置this.setIconImage(new ImageIcon("image\\ 红将.6出").且©{山@g©());this.setResizable(false);this.setTitle(Title);this.setSize(558,670);this.show();)/**糕添加棋子方法*/publicvoiddrawChessMan(){〃流程控制inti,k;//图标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);〃时间控制try{tmain.sleep(200);)catch(Exceptione){)play[Man].setVisible(true);//闪烁当前提示信息以免用户看不见else{text.setVisible(false);〃时间控制try{tmain.sleep(250);)catch(Exceptione){)text.setVisible(true);)try{tmain.sleep(350);)catch(Exceptione){)/****单击棋子方法*/publicvoidmouseClicked(MouseEventme){System.out.println("Mouse");//当前坐标intEx=0,Ey=0;//启动线程if(tmain==null){tmain=newThread(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);)〃移动炮elseif(Man>25&&Man<30){rule.cannonRule(play[Man],play,me);)//移动车elseif(Man>=0&&Man<4){rule.cannonRule(play[Man],play,me);)//移动马elseif(Man>3&&Man<8){rule.horseRule(play[Man],play,me);)//移动相、象elseif(Man>7&&Man<12){rule.elephantRule(Man,play[Man],play,me);//移动仕、士elseif(Man>11&&Man<16){rule.chapRule(Man,play[Man],play,me);)//移动将、帅elseif(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〃该黑棋走棋的时候elseif(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);}//移动炮elseif(Man>25&&Man<30){rule.cannonRule(play[Man],play,me);}//移动车elseif(Man>=0&&Man<4){rule.cannonRule(play[Man],play,me);//移动马elseif(Man>3&&Man<8){rule.horseRule(play[Man],play,me);)//移动相、象elseif(Man>7&&Man<12){rule.elephantRule(Man,play[Man],play,me);)//移动仕、士elseif(Man>11&&Man<16){rule.chapRule(Man,play[Man],play,me);)//移动将、帅elseif(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;)}//elseif//当前没有操作(停止闪烁)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){//当前没有操作(停止闪烁)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]);)〃炮吃规则elseif(Man>25&&Man<30){rule.cannonRule(0,play[Man],play[i],play,me);)〃车吃规则elseif(Man>=0&&Man<4){rule.cannonRule(1,play[Man],play[i],play,me);)〃马吃规则elseif(Man>3&&Man<8){rule.horseRule(play[Man],play[i],play,me);)〃相、象吃规则elseif(Man>7&&Man<12){rule.elephantRule(play[Man],play[i],play);)〃士、仕吃棋规则elseif(Man>11&&Man<16){rule.chapRule(Man,play[Man],play[i],play);)〃将、帅吃棋规则elseif(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〃该黑棋吃棋的时候elseif(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]);)〃炮吃规则elseif(Man>25&&Man<30){rule.cannonRule(0,play[Man],play[i],play,me);)〃车吃规则elseif(Man>=0&&Man<4){rule.cannonRule(1,play[Man],play[i],play,me);)〃马吃规则elseif(Man>3&&Man<8){rule.horseRule(play[Man],play[i],play,me);)〃相、象吃规则elseif(Man>7&&Man<12){rule.elephantRule(play[Man],play[i],play);)〃士、仕吃棋规则elseif(Man>11&&Man<16){rule.chapRule(Man,play[Man],play[i],play);)〃将、帅吃棋规则elseif(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;)}//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){}/**糕定义按钮的事件响应*/publicvoidactionPerformed(ActionEventae){〃重新开始按钮if(ae.getSource().equals(anew)){inti,k;〃重新排列每个棋子的位置//黑色棋子〃车for(i=0,k=24;i<2;i++,k+=456){play[i].setBounds(k,56,55,55);)//马for(i=4,k=81;i<6;i++,k+=342){play[i].setBounds(k,56,55,55);)//相for(i=8,k=138;i<10;i++,k+=228){play[i].setBounds(k,56,55,55);)//士for(i=12,k=195;i<14;i++,k+=114){play[i].setBounds(k,56,55,55);//卒for(i=16,k=24;i<21;i++,k+=114){play[i].setBounds(k,227,55,55);)//炮for(i=26,k=81;i<28;i++,k+=342){play[i].setBounds(k,170,55,55);)//将play[30].setBounds(252,56,55,55);〃红色棋子//车for(i=2,k=24;i<4;i++,k+=456){play[i].setBounds(k,569,55,55);)//马for(i=6,k=81;i<8;i++,k+=342){play[i].setBounds(k,569,55,55);〃相for(i=10,k=138;i<12;i++,k+=228){play[i].setBounds(k,569,55,55);)〃士for(i=14,k=195;i<16;i++,k+=114){play[i].setBounds(k,569,55,55);)〃兵for(i=21,k=24;i<26;i++,k+=114){play[i].setBounds(k,398,55,55);)〃炮for(i=28,k=81;i<30;i++,k+=342){play[i].setBounds(k,455,55,55);〃帅play[31].setBounds(252,569,55,55);chessPlayClick=2;text.setText(" 红棋走棋");for(i=0;i<32;i++){play[i].setVisible(true);)〃清除Vector中的容Var.clear();)〃悔棋按钮elseif(ae.getSource().equals(repent)){try{〃获得setVisible属性值StringS=(String)Var.get(Var.size()-4);〃获得X坐标intx=Integer.parseInt((String)Var.get(Var.size()-3));〃获得Y坐标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;)//删除用过的坐标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);)/*定义中国象棋规则的类*/classChessRule{/**卒子的移动规则*/publicvoidarmsRule(intMan,JLabelplay,MouseEventme){//黑卒向下if(Man<21){〃向下移动、得到终点的坐标模糊成合法的坐标if((me.getY()-play.getY())> 27 &&(me.getY()-play.getY())<86&&(me.getX()-play.getX())<55&&(me.getX()-play.getX())>0){//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(play.getX(),play.getY()+57,55,55);)〃向右移动、得到终点的坐标模糊成合法的坐标、必须过河elseif(play.getY()>284&&(me.getX()-play.getX())>=57&&(me.getX()-play.getX())<=112){play.setBounds(play.getX()+57,play.getY(),55,55);)〃向左移动、得到终点的坐标模糊成合法的坐标、必须过河elseif(play.getY()>284&&(play.getX()-me.getX())>=&&(play.getX()-me.getX())<=58){〃模糊坐标play.setBounds(play.getX()-57,play.getY(),55,55);))//红卒向上else{//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));〃向上移动、得到终点的坐标模糊成合法的坐标if((me.getX()-play.getX())>= 0 &&(me.getX()-play.getX())<=55&&(play.getY()-me.getY())>27&&play.getY()-me.getY()<86){play.setBounds(play.getX(),play.getY()-57,55,55);)〃向右移动、得到终点的坐标模糊成合法的坐标、必须过河elseif(play.getY()<=341&&(me.getX()-play.getX())>=57&&(me.getX()-play.getX())<=112){play.setBounds(play.getX()+57,play.getY(),55,55);)〃向左移动、得到终点的坐标模糊成合法的坐标、必须过河elseif(play.getY()<=341&&(play.getX()-me.getX())>=&&(play.getX()-me.getX())<=58){play.setBounds(play.getX()-57,play.getY(),55,55);))}〃卒移动结束/**卒吃棋规则*/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);〃把对方的位置给自己play1.setBounds(play2.getX(),play2.getY(),55,55);)〃红棋要过河才左能吃棋elseif(play1.getName().charAt(1)=='2'&&play1.getY()<341&&play1.getName().charAt(1)!=play2.getName().charAt(1)){play2.setVisible(false);〃把对方的位置给自己play1.setBounds(play2.getX(),play2.getY(),55,55);//向左走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);〃把对方的位置给自己play1.setBounds(play2.getX(),play2.getY(),55,55);)〃红棋要过河才能右吃棋elseif(play1.getName().charAt(1)=='2'&&play1.getY()<341&&play1.getName().charAt(1)!=play2.getName().charAt(1)){play2.setVisible(false);〃把对方的位置给自己play1.setBounds(play2.getX(),play2.getY(),55,55);))//向上走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);〃把对方的位置给自己play1.setBounds(play2.getX(),play2.getY(),55,55);)〃红棋不能向下吃棋elseif(play1.getName().charAt(1)== '2' &&play1.getY()>play2.getY()&&play1.getName().charAt(1)!=play2.getName().charAt(1)){play2.setVisible(false);〃把对方的位置给自己play1.setBounds(play2.getX(),play2.getY(),55,55);))//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play1.isVisible()));Var.add(String.valueOf(play1.getX()));Var.add(String.valueOf(play1.getY()));Var.add(String.valueOf(Man));//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play2.isVisible()));Var.add(String.valueOf(play2.getX()));Var.add(String.valueOf(play2.getY()));Var.add(String.valueOf⑴);}//卒吃结束/**炮、车移动规则*/publicvoidcannonRule(JLabelplay,JLabelplayQ[],MouseEvent

me){me){〃起点和终点之间是否有棋子intCount=0;〃上、下移动if(play.getX()-me.getX()<=0&&play.getX()-me.getX()>=-55){〃指定所有模糊Y坐标for(inti=56;i<=571;i+=57){〃移动的Y坐标是否有指定坐标相近的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()){//从起点到终点(从左到右)for(intk=play.getY()+57;k<i;k+=57){〃大于起点、小于终点的坐标就可以知道中间是否有棋子if(playQ[j].getY()&&if(playQ[j].getY()&&playQ[j].getY()>play.getY()){〃中间有一个棋子就不可以从这条竖线过去Count++;break;)}//for//从起点到终点(从右到左)for(intk=i+57;k<play.getY();k+=57){〃找起点和终点的棋子if(playQ[j].getY()<play.getY()&&playQ[j].getY()>i){Count++;break;}}//for}//if}//for〃起点和终点没有棋子就可以移动了if(Count==0){//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(play.getX(),i,55,55);break;)}//if}//for}//if〃左、右移动elseif(play.getY()-me.getY()>=-27&&play.getY()-me.getY()<=27){〃指定所有模糊X坐标for(inti=24;i<=480;i+=57){〃移动的X坐标是否有指定坐标相近的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()){//从起点到终点(从上到下)for(intk=play.getX()+57;k<i;k+=57){〃大于起点、小于终点的坐标就可以知道中间是否有棋子if(playQ[j].getX()<i&&playQ[j].getX()>play.getX()){//中间有一个棋子就不可以从这条横线过去Count++;break;)}//for//从起点到终点(从下到上)for(intk=i+57;k<play.getX();k+=57){〃找起点和终点的棋子if(playQ[j].getX()<play.getX()&&playQ[j].getX()>i){Count++;break;}//for}//if}//for〃起点和终点没有棋子if(Count==0){//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(i,play.getY(),55,55);break;}}//if}//for}//else}//炮、车移动方法结束/**炮、车吃棋规则*/publicvoidcannonRule(intChess,JLabelplay,JLabelplayTake,JLabelplayQ口,MouseEventme){〃起点和终点之间是否有棋子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()){〃自己是起点被吃的是终点(从上到下)for(intk=play.getY()+57;k<playTake.getY();k+=57){〃大于起点、小于终点的坐标就可以知道中间是否有棋子if(playQ[j].getY()<playTake.getY()&&playQ[j].getY()>play.getY()){//计算起点和终点的棋子个数Count++;break;)}//for〃自己是起点被吃的是终点(从下到上)for(intk=playTake.getY();k<play.getY();k+=57){〃找起点和终点的棋子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()){〃自己是起点被吃的是终点(从左到右)for(intk=play.getX()+50;k<playTake.getX();k+=57){〃大于起点、小于终点的坐标就可以知道中间是否有棋子if(playQ[j].getX()<playTake.getX()&&playQ[j].getX()>play.getX()){Count++;break;)}//for〃自己是起点被吃的是终点(从右到左)for(intk=playTake.getX();k<play.getX();k+=57){〃找起点和终点的棋子if(playQ[j].getX()<play.getX()&&playQ[j].getX()>playTake.getX()){Count++;break;}}//for}//if}//for〃起点和终点之间要一个棋子是炮的规则、并不能吃自己的棋子if(Count==1&&Chess==0&&playTake.getName().charAt(1)!=play.getName().charAt(1)){//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(playTake.isVisible()));Var.add(String.valueOf(playTake.getX()));Var.add(String.valueOf(playTake.getY()));Var.add(String.valueOf(i));playTake.setVisible(false);play.setBounds(playTake.getX(),playTake.getY(),55,55);)〃起点和终点之间没有棋子是车的规则、并不能吃自己的棋子elseif(Count==0 &&Chess== 1 &&playTake.getName().charAt(1)!=play.getName().charAt(1)){//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(playTake.isVisible()));Var.add(String.valueOf(playTake.getX()));Var.add(String.valueOf(playTake.getY()));Var.add(String.valueOf(i));playTake.setVisible(false);play.setBounds(playTake.getX(),playTake.getY(),55,55);)}//炮、车吃棋方法结束/**马移动规则*/publicvoidhorseRule(JLabelplay,JLabelplayQ口,MouseEventme){〃保存坐标和障碍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坐标for(inti=56;i<=571;i+=57){〃移动的Y坐标是否有指定坐标相近的if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;break;))〃合法的X坐标for(inti=24;i<=480;i+=57){〃移动的X坐标是否有指定坐标相近的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;))〃可以移动该棋子if(Move==0){//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);}//if〃左移、上边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){//当前记录添加到集合(用于悔棋)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){//当前记录添加到集合(用于悔棋)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坐标for(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){

Ey=i;break;))〃合法的X坐标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;))〃可以移动该棋子if(Move==0){//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);)}//else〃下移、左边elseif(me.getY()-play.getY()>=87&&me.getY()-play.getY()<=141&&play.getX()-me.getX()<=87&&play.getX()-

me.getX()>=10){〃合法的Y坐标for(inti=56;i<=571;i+=57){if(i-me.getY()>=-27&&i-me.getY()<=27){Ey=i;break;))〃合法的X坐标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;)〃可以移动该棋子if(Move==0){//当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible()));Var.add(String.valueOf(play.getX()));Var.add(String.valueOf(play.getY()));Var.add(String.valueOf(Man));play.setBounds(Ex,Ey,55,55);)}//else〃右移、上边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){//当前记录添加到集合(用于悔棋)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){//当前记录添加到集合(用于悔棋)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){//当前记录添加到集合(用于悔棋)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}//马移动结束/**马吃棋规则*/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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论