java中国象棋代码(单机版)_第1页
java中国象棋代码(单机版)_第2页
java中国象棋代码(单机版)_第3页
java中国象棋代码(单机版)_第4页
java中国象棋代码(单机版)_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

import javax swing import java util import java io import java awt import java awt event public class Chess public static void main String args new ChessMainFrame 中国象棋 观棋不语真君子 棋死无悔大丈夫 主框架类 class ChessMainFrame extends JFrame implements ActionListener MouseListener Runnable 玩家 JLabel play new JLabel 32 棋盘 JLabel image 窗格 Container con 工具栏 JToolBar jmain 重新开始 JButton anew 悔棋 JButton repent 退出 JButton exit 当前信息 JLabel text 保存当前操作 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 new ChessMainFrame 中国象棋 构造函数 初始化图形用户界面 ChessMainFrame String Title 获行客格引用 con this getContentPane con setLayout null 实例化规则类 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 返回到上次走棋的位置 把组件添加到工具栏 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 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 setResizable false this setTitle Title this setSize 558 670 this show 添加棋子方法 public void drawChessMan 流程控制 int i k 图标 Icon in 黑色棋子 车 in new ImageIcon image 黑车 GIF for i 0 k 24 i 2 i k 456 play i new JLabel in play i setBounds k 56 55 55 play i setName 车 1 马 in new ImageIcon image 黑马 GIF for i 4 k 81 i 6 i k 342 play i new JLabel in play i setBounds k 56 55 55 play i setName 马 1 相 in new ImageIcon image 黑象 GIF for i 8 k 138 i 10 i k 228 play i new JLabel in play i setBounds k 56 55 55 play i setName 象 1 士 in new ImageIcon image 黑士 GIF for i 12 k 195 i 14 i k 114 play i new JLabel in play i setBounds k 56 55 55 play i setName 士 1 卒 in new ImageIcon image 黑卒 GIF for i 16 k 24 i 21 i k 114 play i new JLabel in play i setBounds k 227 55 55 play i setName 卒 1 i 炮 in new ImageIcon image 黑炮 GIF for i 26 k 81 i 28 i k 342 play i new JLabel in play i setBounds k 170 55 55 play i setName 炮 1 i 将 in new ImageIcon image 黑将 GIF play 30 new JLabel in play 30 setBounds 252 56 55 55 play 30 setName 将 1 红色棋子 车 in new ImageIcon image 红车 GIF for i 2 k 24 i 4 i k 456 play i new JLabel in play i setBounds k 569 55 55 play i setName 车 2 马 in new ImageIcon image 红马 GIF for i 6 k 81 i 8 i k 342 play i new JLabel in play i setBounds k 569 55 55 play i setName 马 2 相 in new ImageIcon image 红象 GIF for i 10 k 138 i 12 i k 228 play i new JLabel in play i setBounds k 569 55 55 play i setName 象 2 士 in new ImageIcon image 红士 GIF for i 14 k 195 i 16 i k 114 play i new JLabel in play i setBounds k 569 55 55 play i setName 士 2 兵 in new ImageIcon image 红卒 GIF for i 21 k 24 i 26 i k 114 play i new JLabel in play i setBounds k 398 55 55 play i setName 卒 2 i 炮 in new ImageIcon image 红炮 GIF for i 28 k 81 i 15 移动将 帅 else if Man 30 Man 31 rule willRule Man play Man play me 是否走棋错误 是否在原地没有动 if Ex play Man getX 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 15 将 帅吃棋规则 else if Man 30 Man 31 rule willRule Man play Man play i play play Man setVisible true 是否走棋错误 是否在原地没有动 if Ex play Man getX 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 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 悔棋按钮 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 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 Exception e 退出 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 27 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 向右移动 得到终点的坐标模糊成合法的坐标 必须过河 else if play getY 57 向左移动 得到终点的坐标模糊成合法的坐标 必须过河 else if play getY 3 卒移动结束 卒吃棋规则 public void armsRule JLabel play1 JLabel play2 向右走 if play2 getX play1 getX 57 把对方的位置给自己 play1 setBounds play2 getX play2 getY 55 55 红棋要过河才左能吃棋 else if play1 getName charAt 1 2 把对方的位置给自己 play1 setBounds play2 getX play2 getY 55 55 向左走 else if play1 getX play2 getX 57 把对方的位置给自己 play1 setBounds play2 getX play2 getY 55 55 红棋要过河才能右吃棋 else if play1 getName charAt 1 2 把对方的位置给自己 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 i 卒吃结束 炮 车移动规则 public void cannonRule JLabel play JLabel playQ MouseEvent me 起点和终点之间是否有棋子 int Count 0 上 下移动 if play getX me getX 55 指定所有模糊 Y 坐标 for int i 56 i 27 j 27 k i k 57 大于起点 小于终点的坐标就可以知道中间是 否有棋子 if playQ j getY play getY 中间有一个棋子就不可以从这条竖线过去 Count break for 从起点到终点 从右到左 for int k i 57 k play getY k 57 找起点和终点的棋子 if 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 左 右移动 else if play getY me getY 27 i 55 j 27 k i k 57 大于起点 小于终点的坐标就可以知道中间是 否有棋子 if playQ j getX play getX 中间有一个棋子就不可以从这条横线过去 Count break for 从起点到终点 从下到上 for int k i 57 k play getX k 57 找起点和终点的棋子 if 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 炮 车移动方法结束 炮 车吃棋规则 public void cannonRule int Chess JLabel play JLabel playTake JLabel playQ MouseEvent me 起点和终点之间是否有棋子 int Count 0 所有的棋子 for int j 0 j 27 k playTake getY k 57 大于起点 小于终点的坐标就可以知道中间是否有棋子 if playQ j getY play getY 计算起点和终点的棋子个数 Count break for 自己是起点被吃的是终点 从下到上 for int k playTake getY k play getY k 57 找起点和终点的棋子 if playQ j getY playTake getY Count break for if 找出在同一条竖线的所有棋子 并不包括自己 else if playQ j getY play getY 10 k playTake getX k 57 大于起点 小于终点的坐标就可以知道中间是否有棋子 if playQ j getX play getX Count break for 自己是起点被吃的是终点 从右到左 for int k playTake getX k play getX k 57 找起点和终点的棋子 if playQ j getX playTake getX Count break for if for 起点和终点之间要一个棋子是炮的规则 并不能吃自己的棋子 if Count 1 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 起点和终点之间没有棋子是车的规则 并不能吃自己的棋子 else if Count 0 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 炮 车吃棋方法结束 马移动规则 public void horseRule JLabel play JLabel playQ MouseEvent me 保存坐标和障碍 int Ex 0 Ey 0 Move 0 上移 左边 if play getX me getX 2 i 27 break 合法的 X 坐标 for int i 24 i 55 break 正前方是否有别的棋子 for int i 0 i 27 i 27 X for int i 24 i 55 正左方是否有别的棋子 for int i 0 i 87 i 27 X for int i 24 i 55 正下方是否有别的棋子 for int i 0 i 87 i 27 break 合法的 X 坐标 for int i 24 i 55 break 正前方是否有别的棋子 for int i 0 i 87 i 27 break 合法的 X 坐标 for int i 24 i 55 break 正下方是否有别的棋子 for int i 0 i 30 i 27 X for int i 24 i 55 正右方是否有别的棋子 for int i 0 i 30 i 27 X for int i 24 i 55 正右方是否有别的棋子 for int i 0 i 30 i 27 X for int i 24 i 55 正左方是否有别的棋子 for int i 0 i 32 i if playQ i isVisible 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 马移动结束 马吃棋规则 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 i 32 i if playQ i isVisible break for Chess true if 上移 右吃 else if play getY playTake getY 114 i 32 i if playQ i isVisible break for Chess true else 左移 上吃 else if play getY playTake getY 57 i 32 i if playQ i isVisible break for Chess true else 左移 下吃 else if playTake getY play getY 57 i 32 i if playQ i isVisible break for Chess true else 右移 上吃 else if play getY playTake getY 57 i 32 i if playQ i isVisible break for Chess true else 右移 下吃 else if playTake getY play getY 57 i 32 i if playQ i isVisible break for Chess true else 下移 左吃 else if playTake getY play getY 114 i 32 i if playQ i isVisible break for Chess true else 下移 右吃 else if playTake getY play getY 114 i 32 i if playQ i isVisible break for Chess true else 没有障碍 并可以吃棋 不能吃自己颜色 if Chess 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 相移动规则 public void elephantRule int Man JLabel play JLabel playQ MouseEvent me 坐标和障碍 int Ex 0 Ey 0 Move 0 上左 if play getX me getX 87 i 27 break 合法的 X 坐标 for int i 24 i 27 break 左上方是否有棋子 for int i 0 i 341 Var add String valueOf play getX Var add String valueOf play getY Var add String valueOf Man System out println Ex Ex System out println Ey Ey play setBounds Ex Ey 55 55 黑旗不能过汉界 else if Move 0 Var add String valueOf play getX Var add String valueOf play getY Var add String valueOf Man play setBounds Ex Ey 55 55 if 上右 else if play getY me getY 87 i 27 break 合法的 X 坐标 for int i 24 i 27 break 右上方是否有棋子 for int i 0 i 341 Var add String valueOf play getX Var add String valueOf play getY Var add String valueOf Man play setBounds Ex Ey 55 55 else if Move 0 Var add String valueOf play getX Var add String valueOf play getY Var add String valueOf Man play setBounds Ex Ey 55 55 else if 下左 else if play getX me getX 87 i 27 break 合法的 X 坐标 for int i 24 i 27 break 下左方是否有棋子 for int i 0 i 341 Var add String valueOf play getX Var add String valueOf play getY Var add String valueOf Man play setBounds Ex Ey 55 55 else if Move 0 i 27 X for int i 24 i 27 下右方是否有棋子 for int i 0 i 341 Var add String valueOf play getX Var add String valueOf play getY Var

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论