下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、页眉import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.io.*;public class Chesspublic static void main(String args)new ChessMainFrame(中国象棋:观棋不语真君子,棋死无悔大丈夫);class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable/玩家JLabel play = new
2、 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;1/53页眉/* 控制玩家走棋*
3、chessPlayClick=1 黑棋走棋* chessPlayClick=2 红棋走棋 默认红棋* chessPlayClick=3 双方都不能走棋*/int chessPlayClick=2;/控制棋子闪烁的线程Thread tmain;/把第一次的单击棋子给线程响应static int Man,i;ChessMainFrame()new ChessMainFrame(中国象棋 );/* 构造函数* 初始化图形用户界面*/ChessMainFrame(String Title) /获行客格引用con = this.getContentPane(); con.setLayout(null);
4、/实例化规则类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.setT
5、oolTipText(返回到上次走棋的位置 );/把组件添加到工具栏jmain.setLayout(new GridLayout(0,4);jmain.add(anew);2/53页眉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(thi
6、s);/注册棋子移动监听for (int i=0;i screenSize.height)frameSize.height = screenSize.height;if (frameSize.width screenSize.width)frameSize.width = screenSize.width;3/53页眉this.setLocation(screenSize.width - frameSize.width) / 2 - 280 ,(screenSize.height - frameSize.height ) / 2 - 350);/设置红将 .GIF).getImage();th
7、is.setResizable(false);this.setTitle(Title);this.setSize(558,670);this.show();/* 添加棋子方法*/public void drawChessMan() /流程控制int i,k; /图标 Icon in;/黑色棋子/车黑车 .GIF);for (i=0,k=24;i2;i+,k+=456)playi = new JLabel(in);playi.setBounds(k,56,55,55);playi.setName( 车 1);/马黑马 .GIF);for (i=4,k=81;i6;i+,k+=342)playi
8、= new JLabel(in);playi.setBounds(k,56,55,55);playi.setName( 马 1);/相黑象 .GIF);for (i=8,k=138;i10;i+,k+=228)playi = new JLabel(in);playi.setBounds(k,56,55,55);4/53页眉playi.setName( 象 1);/士黑士 .GIF);for (i=12,k=195;i14;i+,k+=114)playi = new JLabel(in);playi.setBounds(k,56,55,55);playi.setName( 士 1);/卒黑卒 .
9、GIF);for (i=16,k=24;i21;i+,k+=114)playi = new JLabel(in);playi.setBounds(k,227,55,55);playi.setName( 卒 1 + i);/炮黑炮 .GIF);for (i=26,k=81;i28;i+,k+=342)playi = new JLabel(in);playi.setBounds(k,170,55,55);playi.setName( 炮 1 + i);/将黑将 .GIF);play30 = new JLabel(in);play30.setBounds(252,56,55,55);play30.s
10、etName(将 1);/红色棋子/车红车 .GIF);for (i=2,k=24;i4;i+,k+=456)playi = new JLabel(in);playi.setBounds(k,569,55,55);playi.setName( 车 2);/马红马 .GIF);5/53页眉for (i=6,k=81;i8;i+,k+=342)playi = new JLabel(in);playi.setBounds(k,569,55,55);playi.setName( 马 2);/相红象 .GIF);for (i=10,k=138;i12;i+,k+=228)playi = new JLab
11、el(in);playi.setBounds(k,569,55,55);playi.setName( 象 2);/士红士 .GIF);for (i=14,k=195;i16;i+,k+=114)playi = new JLabel(in);playi.setBounds(k,569,55,55);playi.setName( 士 2);/兵红卒 .GIF);for (i=21,k=24;i26;i+,k+=114)playi = new JLabel(in);playi.setBounds(k,398,55,55);playi.setName( 卒 2 + i);/炮红炮 .GIF);for
12、(i=28,k=81;i 15 & Man 25 & Man =0 & Man 3 & Man 7 & Man 11 & Man 15 & Man 25 & Man =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);/是否走棋错误 (是否在原地没有动 )if (Ex = playMan.getX() & Ey = playMan.getY()text.setTex
13、t(黑棋走棋 );chessPlayClick=1;else text.setText(红棋走棋 );chessPlayClick=2;/else if/当前没有操作 (停止闪烁 )chessManClick=false;/if/单击棋子else/第一次单击棋子 (闪烁棋子 )if (!chessManClick)for (int i=0;i32;i+)10/53页眉/被单击的棋子if (me.getSource().equals(playi)/告诉线程让该棋子闪烁Man=i;/开始闪烁chessManClick=true;break;/for/if/第二次单击棋子 (吃棋子 )else if
14、 (chessManClick)/当前没有操作 (停止闪烁 )chessManClick=false;for (i=0;i 15 & Man 25 & Man =0 & Man 3 & Man 7 & Man 11 & Man 15 & Man 25 & Man =0 & 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
15、(true);/是否走棋错误 (是否在原地没有动 )if(Ex=playMan.getX()&Ey=playMan.getY()text.setText(黑棋走棋 );chessPlayClick=1;break;else text.setText(红棋走棋 );chessPlayClick=2;break;13/53页眉/else if/if/for/是否胜利if (!play31.isVisible()JOptionPane.showConfirmDialog(this,黑棋胜利 , 玩家一胜利 ,JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING
16、_MESSAGE);/双方都不可以在走棋了chessPlayClick=3;text.setText(黑棋胜利 );/ifelse if (!play30.isVisible()JOptionPane.showConfirmDialog(this,红棋胜利 , 玩家二胜利 ,JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE); chessPlayClick=3;text.setText(红棋胜利 );/else if/else/elsepublic void mousePressed(MouseEvent me)public void
17、 mouseReleased(MouseEvent me)public void mouseEntered(MouseEvent me)public void mouseExited(MouseEvent me)14/53页眉/* 定义按钮的事件响应*/public void actionPerformed(ActionEvent 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=
18、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);/士for (i=12,k=195;i14;i+,k+=114)playi.setBounds(k,56,55,55);/卒for (i=16,k=24;i21;i+,k+=114)playi.setBounds(k,227,55,55);/炮for (i=26,k=81;i28;i+,k+=342)playi.setBounds(k,170,55,55);/将play30.setB
19、ounds(252,56,55,55);/红色棋子15/53页眉/车for (i=2,k=24;i4;i+,k+=456)playi.setBounds(k,569,55,55);/马for (i=6,k=81;i8;i+,k+=342)playi.setBounds(k,569,55,55);/相for (i=10,k=138;i12;i+,k+=228)playi.setBounds(k,569,55,55);/士for (i=14,k=195;i16;i+,k+=114)playi.setBounds(k,569,55,55);/兵for (i=21,k=24;i26;i+,k+=114
20、)playi.setBounds(k,398,55,55);/炮for (i=28,k=81;i30;i+,k+=342)playi.setBounds(k,455,55,55);/帅play31.setBounds(252,569,55,55);chessPlayClick = 2;text.setText(红棋走棋 );for (i=0;i32;i+)playi.setVisible(true);/清除 Vector 中的内容Var.clear();16/53页眉/悔棋按钮else if (ae.getSource().equals(repent)try/获得 setVisible 属性值
21、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);/赋给棋子playM.setVisible(true);playM.setBounds(x,y,55,55);if (playM.getName().c
22、harAt(1) = 1)text.setText(黑棋走棋 );chessPlayClick = 1;elsetext.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(exit)int j=JOption
23、Pane.showConfirmDialog(this,真的要退出吗 ?, 退出 ,17/53页眉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 27 & (me.getY()-play.getY() 86 & (me.ge
24、tX()-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);/向右移动、得到终点的坐标模糊成合法的坐标、必须过河else if (play.getY() 284 & (me.getX() - play.getX(
25、) = 57 & (me.getX() - play.getX() 284 & (play.getX() - me.getX() = 2 & (play.getX() - me.getX() = 0 & (me.getX()-play.getX() 27 & play.getY()-me.getY() 86)play.setBounds(play.getX(),play.getY()-57,55,55);/向右移动、得到终点的坐标模糊成合法的坐标、必须过河else if (play.getY() = 57 & (me.getX() - play.getX() = 112)play.setBou
26、nds(play.getX()+57,play.getY(),55,55);/向左移动、得到终点的坐标模糊成合法的坐标、必须过河else if (play.getY() = 3 & (play.getX() - me.getX() =58)play.setBounds(play.getX()-57,play.getY(),55,55);/ 卒移动结束/* 卒吃棋规则 */public void armsRule(JLabel play1,JLabel play2)/向右走if (play2.getX() - play1.getX() = 57 & (play1.getY() - play2.g
27、etY() -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);/红棋要过河才左能吃棋el
28、se if (play1.getName().charAt(1) = 2 &play1.getY() 34119/53页眉& play1.getName().charAt(1) != play2.getName().charAt(1)play2.setVisible(false); /把对方的位置给自己 play1.setBounds(play2.getX(),play2.getY(),55,55);/向左走else if (play1.getX() - play2.getX() = 57 & (play1.getY() - play2.getY() -22 & play2.isVisible
29、() & 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);/红棋要过河才能右吃棋else if (play1.getName().char
30、At(1) = 2 &play1.getY() = -22 & play1.getX() - play2.getX() = -112 & play1.getY() - play2.getY() = 112)/黑棋不能向上吃棋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(),55,55);/当前记录添加到集合 (用于悔棋 )Var.add(String.valueOf(p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗数据安全区块链性能优化瓶颈突破
- 胖乎乎的小手课件
- 医疗数据安全共享的区块链激励机制
- 胆道出血课件
- 云南省玉溪市江川县2026届高一数学第一学期期末复习检测试题含解析
- 胃镜讲解课件
- 医疗数据安全与资产化协同管理策略
- 医疗数据安全与医疗患者隐私保护技术
- 胃癌根治术课件
- 医疗数据可解释性的区块链透明化策略
- 合作购车位协议书
- 产科护士长2025年度述职报告
- 2026五个带头发言材料三
- 2025永丰街道平安工作服务站工作人员招聘7人模拟笔试试题及答案解析
- 2025西部科学城重庆高新区人才紧缺招聘35人笔试考试备考题库及答案解析
- 2025云南省人民检察院招聘22人笔试考试参考题库及答案解析
- 2025年慢性阻塞性肺病药物使用规范答案及解析
- 2026(人教版)数学五上期末复习大全(知识梳理+易错题+压轴题+模拟卷)
- DB3205-T 1123-2024 职业教育集团建设与运行规范
- 2025年政府财务岗面试题及答案
- 广东省东华高级中学2026届高一化学第一学期期末统考试题含解析
评论
0/150
提交评论