收藏 分享(赏)

中国象棋源代码Java程序.doc

上传人:weiwoduzun 文档编号:5594302 上传时间:2019-03-09 格式:DOC 页数:53 大小:350.50KB
下载 相关 举报
中国象棋源代码Java程序.doc_第1页
第1页 / 共53页
中国象棋源代码Java程序.doc_第2页
第2页 / 共53页
中国象棋源代码Java程序.doc_第3页
第3页 / 共53页
中国象棋源代码Java程序.doc_第4页
第4页 / 共53页
中国象棋源代码Java程序.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述

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;/* 控制玩家走棋* chessPl

3、ayClick=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);/实例化规则类r

4、ule = 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.s

5、etToolTipText(“返回到上次走棋的位置“);/把组件添加到工具栏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)

6、;/注册棋子移动监听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 ImageIco

7、n(“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 15 Var.add(String.valueOf(play.getX();Var.add(String.valueOf(play.getY();V

8、ar.add(String.valueOf(Man);play.setBounds(play.getX(),play.getY()+57,55,55);/向右移动、得到终点的坐标模糊成合法的坐标、必须过河else if (play.getY() 284 /把对方的位置给自己play1.setBounds(play2.getX(),play2.getY(),55,55);/红棋要过河才左能吃棋else if (play1.getName().charAt(1) = 2 /把对方的位置给自己play1.setBounds(play2.getX(),play2.getY(),55,55);/红棋要过

9、河才能右吃棋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(

10、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 break;

11、/for/从起点到终点(从右到左)for (int k=i+57;k 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/左、

12、右移动else if (play.getY() - me.getY() =-27 break;/for/从起点到终点(从下到上)for (int k=i+57;k 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

13、(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 break;/for/自己是起点被吃的是终点(从下到上)for (int k=playTake.getY();k playTake.getY()Count+;break;/for/if/找出在同一

14、条竖线的所有棋子、并不包括自己else if (playQj.getY() - play.getY() = -10 break;/for/自己是起点被吃的是终点(从右到左)for (int k=playTake.getX();k 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);/当前记录添

15、加到集合(用于悔棋)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.v

16、alueOf(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.get

17、X(),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 i= -27 i= -27 break;/正下方是否有别的棋子for (int i=0;i32;i+)if (playQi.isVisible() break;/可以移动该棋子if (Move = 0)/当前记录添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报