纯Java写的中国象棋计算机Java_计算机-Java.pdf
《纯Java写的中国象棋计算机Java_计算机-Java.pdf》由会员分享,可在线阅读,更多相关《纯Java写的中国象棋计算机Java_计算机-Java.pdf(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、运行效果如下图所示:源代码如下(可以直接运行出结果):import java.awt.*;import javax.swing.*;import java.util.*;import java.io.*;/主类 public class Chess public static void main(String args)new ChessMainFrame(中国象棋,博大精深);/主框架类 class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable /玩家 JLabel play=ne
2、w JLabel32;/棋盘 JLabel image;/窗格 Container con;/工具栏 JToolBar jmain;/重新开始 JButton anew;/悔棋 JButton repent;/退出 JButton exit;/当前信息 JLabel text;/保存当前操作 Vector Var;/规则类对象(使于调用方法)ChessRule rule;/*单击棋子 *chessManClick=true 闪烁棋子 并给线程响应 *chessManClick=false 吃棋子 停止闪烁 并给线程响应 */boolean chessManClick;/*控制玩家走棋 *che
3、ssPlayClick=1 黑棋走棋 *chessPlayClick=2 红棋走棋 默认红棋 *chessPlayClick=3 双方都不能走棋 */int chessPlayClick=2;/控制棋子闪烁的线程 Thread tmain;/把第一次的单击棋子给线程响应 static int Man,i;ChessMainFrame()new ChessMainFrame(中国象棋);始悔棋退出当前信息保存当前操作规则类对象使于调用方法单击棋子闪烁棋子并给线程响应吃棋子停止闪烁并给线程响应控制玩家走棋黑棋走棋红棋走棋默认红棋双方都不能走棋控制棋子闪烁的线程把第一次的单击棋子给线程响应显示信息信
4、息提示新游戏重新开始新的一局退出退出象棋程序程序悔棋返回到上次走棋的位置把组件添加到工具栏添加棋子标签注册按扭监听注册棋子移动监听添加棋盘标签注册窗体关闭监听窗体居中设置图标黑色棋子车炮士兵闪动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动红棋走棋黑棋走棋该黑棋走棋的时候移动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动黑棋走棋红棋走棋/*构造函数 *初始化图形用户界面 */ChessMainFrame(String Title)/获行客格引用 con=this.getContentPane();con.setLayout(null);/
5、实例化规则类 rule=new ChessRule();Var=new Vector();/创建工具栏 jmain=new JToolBar();text=new JLabel(欢迎使用象棋对弈系统);/当鼠标放上显示信息 text.setToolTipText(信息提示);anew=new JButton(新 游 戏);anew.setToolTipText(重新开始新的一局);exit=new JButton(退 出);exit.setToolTipText(退出象棋程序程序);repent=new JButton(悔 棋);repent.setToolTipText(返回到上次走棋的位置
6、);/把组件添加到工具栏 jmain.setLayout(new GridLayout(0,4);jmain.add(anew);jmain.add(repent);jmain.add(exit);jmain.add(text);jmain.setBounds(0,0,558,30);con.add(jmain);/添加棋子标签 drawChessMan();/注册按扭监听 anew.addActionListener(this);repent.addActionListener(this);exit.addActionListener(this);/注册棋子移动监听 for(int i=0;
7、i screenSize.height)frameSize.height=screenSize.height;if(frameSize.width screenSize.width)frameSize.width=screenSize.width;this.setLocation(screenSize.width-frameSize.width)/2-280,(screenSize.height-frameSize.height)/2-350);/设置 this.setIconImage(new ImageIcon(image红将.GIF).getImage();this.setResizab
8、le(false);this.setTitle(Title);this.setSize(558,670);this.show();/*添加棋子方法 */public void drawChessMan()/流程控制 始悔棋退出当前信息保存当前操作规则类对象使于调用方法单击棋子闪烁棋子并给线程响应吃棋子停止闪烁并给线程响应控制玩家走棋黑棋走棋红棋走棋默认红棋双方都不能走棋控制棋子闪烁的线程把第一次的单击棋子给线程响应显示信息信息提示新游戏重新开始新的一局退出退出象棋程序程序悔棋返回到上次走棋的位置把组件添加到工具栏添加棋子标签注册按扭监听注册棋子移动监听添加棋盘标签注册窗体关闭监听窗体居中设置图
9、标黑色棋子车炮士兵闪动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动红棋走棋黑棋走棋该黑棋走棋的时候移动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动黑棋走棋红棋走棋 int i,k;/图标 Icon in;/黑色棋子 /车 in=new ImageIcon(image 黑车.GIF);for(i=0,k=24;i2;i+,k+=456)playi=new JLabel(in);playi.setBounds(k,56,55,55);playi.setName(车 1);/马 in=new ImageIcon(image 黑马.GIF);
10、for(i=4,k=81;i6;i+,k+=342)playi=new JLabel(in);playi.setBounds(k,56,55,55);playi.setName(马 1);/相 in=new ImageIcon(image 黑象.GIF);for(i=8,k=138;i10;i+,k+=228)playi=new JLabel(in);playi.setBounds(k,56,55,55);playi.setName(象 1);/士 in=new ImageIcon(image 黑士.GIF);for(i=12,k=195;i14;i+,k+=114)playi=new JLa
11、bel(in);playi.setBounds(k,56,55,55);playi.setName(士 1);/卒 in=new ImageIcon(image 黑卒.GIF);for(i=16,k=24;i21;i+,k+=114)playi=new JLabel(in);playi.setBounds(k,227,55,55);playi.setName(卒 1+i);始悔棋退出当前信息保存当前操作规则类对象使于调用方法单击棋子闪烁棋子并给线程响应吃棋子停止闪烁并给线程响应控制玩家走棋黑棋走棋红棋走棋默认红棋双方都不能走棋控制棋子闪烁的线程把第一次的单击棋子给线程响应显示信息信息提示新游戏
12、重新开始新的一局退出退出象棋程序程序悔棋返回到上次走棋的位置把组件添加到工具栏添加棋子标签注册按扭监听注册棋子移动监听添加棋盘标签注册窗体关闭监听窗体居中设置图标黑色棋子车炮士兵闪动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动红棋走棋黑棋走棋该黑棋走棋的时候移动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动黑棋走棋红棋走棋 /炮 in=new ImageIcon(image 黑炮.GIF);for(i=26,k=81;i28;i+,k+=342)playi=new JLabel(in);playi.setBounds(k,170,55,
13、55);playi.setName(炮 1+i);/将 in=new ImageIcon(image 黑将.GIF);play30=new JLabel(in);play30.setBounds(252,56,55,55);play30.setName(将 1);/红色棋子 /车 in=new ImageIcon(image 红车.GIF);for(i=2,k=24;i4;i+,k+=456)playi=new JLabel(in);playi.setBounds(k,569,55,55);playi.setName(车 2);/马 in=new ImageIcon(image 红马.GIF)
14、;for(i=6,k=81;i8;i+,k+=342)playi=new JLabel(in);playi.setBounds(k,569,55,55);playi.setName(马 2);/相 in=new ImageIcon(image 红象.GIF);for(i=10,k=138;i12;i+,k+=228)playi=new JLabel(in);playi.setBounds(k,569,55,55);playi.setName(象 2);/士 in=new ImageIcon(image 红士.GIF);for(i=14,k=195;i16;i+,k+=114)始悔棋退出当前信息
15、保存当前操作规则类对象使于调用方法单击棋子闪烁棋子并给线程响应吃棋子停止闪烁并给线程响应控制玩家走棋黑棋走棋红棋走棋默认红棋双方都不能走棋控制棋子闪烁的线程把第一次的单击棋子给线程响应显示信息信息提示新游戏重新开始新的一局退出退出象棋程序程序悔棋返回到上次走棋的位置把组件添加到工具栏添加棋子标签注册按扭监听注册棋子移动监听添加棋盘标签注册窗体关闭监听窗体居中设置图标黑色棋子车炮士兵闪动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动红棋走棋黑棋走棋该黑棋走棋的时候移动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动黑棋走棋红棋走棋 playi
16、=new JLabel(in);playi.setBounds(k,569,55,55);playi.setName(士 2);/兵 in=new ImageIcon(image 红卒.GIF);for(i=21,k=24;i26;i+,k+=114)playi=new JLabel(in);playi.setBounds(k,398,55,55);playi.setName(卒 2+i);/炮 in=new ImageIcon(image 红炮.GIF);for(i=28,k=81;i 15&Man 25&Man=0&Man 3&Man 7&Man 11&Man 15&Man 25&Man=
17、0&Man 3&Man 7&Man 11&Man 16)rule.chapRule(Man,playMan,play,me);/移动将、帅 else if(Man=30|Man=31)rule.willRule(Man,playMan,play,me);始悔棋退出当前信息保存当前操作规则类对象使于调用方法单击棋子闪烁棋子并给线程响应吃棋子停止闪烁并给线程响应控制玩家走棋黑棋走棋红棋走棋默认红棋双方都不能走棋控制棋子闪烁的线程把第一次的单击棋子给线程响应显示信息信息提示新游戏重新开始新的一局退出退出象棋程序程序悔棋返回到上次走棋的位置把组件添加到工具栏添加棋子标签注册按扭监听注册棋子移动监听添加
18、棋盘标签注册窗体关闭监听窗体居中设置图标黑色棋子车炮士兵闪动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动红棋走棋黑棋走棋该黑棋走棋的时候移动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动黑棋走棋红棋走棋 /是否走棋错误(是否在原地没有动)if(Ex=playMan.getX()&Ey=playMan.getY()text.setText(黑棋走棋);chessPlayClick=1;else text.setText(红棋走棋);chessPlayClick=2;/else if /当前没有操作(停止闪烁)chessManClick=f
19、alse;/if /单击棋子 else /第一次单击棋子(闪烁棋子)if(!chessManClick)for(int i=0;i32;i+)/被单击的棋子 if(me.getSource().equals(playi)/告诉线程让该棋子闪烁 Man=i;/开始闪烁 chessManClick=true;break;/for /if /第二次单击棋子(吃棋子)else if(chessManClick)/当前没有操作(停止闪烁)chessManClick=false;for(i=0;i 15&Man 25&Man=0&Man 3&Man 7&Man 11&Man 15&Man 25&Man=0
20、&Man 3&Man 7&Man 11&Man 16)rule.chapRule(Man,playMan,playi,play);/将、帅吃棋规则 else if(Man=30|Man=31)rule.willRule(Man,playMan,playi,play);playMan.setVisible(true);/是否走棋错误(是否在原地没有动)if(Ex=playMan.getX()&Ey=playMan.getY()text.setText(黑棋走棋);chessPlayClick=1;break;else text.setText(红棋走棋);chessPlayClick=2;bre
21、ak;/else if /if /for /是否胜利 if(!play31.isVisible()JOptionPane.showConfirmDialog(this,黑棋胜利,玩家一胜利,JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);/双方都不可以在走棋了 chessPlayClick=3;text.setText(黑棋胜利);/if else if(!play30.isVisible()JOptionPane.showConfirmDialog(始悔棋退出当前信息保存当前操作规则类对象使于调用方法单击棋子闪烁棋子并给线程响应
22、吃棋子停止闪烁并给线程响应控制玩家走棋黑棋走棋红棋走棋默认红棋双方都不能走棋控制棋子闪烁的线程把第一次的单击棋子给线程响应显示信息信息提示新游戏重新开始新的一局退出退出象棋程序程序悔棋返回到上次走棋的位置把组件添加到工具栏添加棋子标签注册按扭监听注册棋子移动监听添加棋盘标签注册窗体关闭监听窗体居中设置图标黑色棋子车炮士兵闪动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动红棋走棋黑棋走棋该黑棋走棋的时候移动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动黑棋走棋红棋走棋 this,红棋胜利,玩家二胜利,JOptionPane.DEFAULT_
23、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(ActionEve
24、nt ae)/重新开始按钮 if(ae.getSource().equals(anew)int i,k;/重新排列每个棋子的位置 /黑色棋子 /车 for(i=0,k=24;i2;i+,k+=456)playi.setBounds(k,56,55,55);/马 for(i=4,k=81;i6;i+,k+=342)playi.setBounds(k,56,55,55);/相 for(i=8,k=138;i10;i+,k+=228)playi.setBounds(k,56,55,55);始悔棋退出当前信息保存当前操作规则类对象使于调用方法单击棋子闪烁棋子并给线程响应吃棋子停止闪烁并给线程响应控制玩
25、家走棋黑棋走棋红棋走棋默认红棋双方都不能走棋控制棋子闪烁的线程把第一次的单击棋子给线程响应显示信息信息提示新游戏重新开始新的一局退出退出象棋程序程序悔棋返回到上次走棋的位置把组件添加到工具栏添加棋子标签注册按扭监听注册棋子移动监听添加棋盘标签注册窗体关闭监听窗体居中设置图标黑色棋子车炮士兵闪动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动红棋走棋黑棋走棋该黑棋走棋的时候移动卒兵移动炮移动车移动马移动相象移动仕士移动将帅是否走棋错误是否在原地没有动黑棋走棋红棋走棋 /士 for(i=12,k=195;i14;i+,k+=114)playi.setBounds(k,56
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 中国象棋 计算机 Java_
限制150内