JAVA中国象棋打谱系统课程设计报告
更新时间:2023-12-17 11:24:01 阅读量: 教育文库 文档下载
- 中国象棋打谱软件推荐度:
- 相关推荐
课 程 设 计
设计题目:中国象棋打谱系统 学生姓名:郑毅 专业班级:信息管12-2班 指导教师:伍章俊 2014年7月8日
- 1 -
目录
一、本组课题及程序功能要求 ........................................................................................... - 3 - 二、系统需求分析 ............................................................................................................... - 3 - 2.1 系统名称 .................................................................................................................... - 3 - 2.2 系统介绍 .................................................................................................................... - 3 - 三、系统总体设计 ............................................................................................................... - 4 - 3.1系统功能结构图 ......................................................................................................... - 4 - 3.2 具体功能实现 .......................................................................................................... - 4 - 11、CanRule.java .............................................................................................................. - 7 - 四、程序代码设计 ............................................................................................................... - 7 - ChinaChess ........................................................................................................................ - 7 - ChessBoard ...................................................................................................................... - 10 - Point ................................................................................................................................ - 17 - ChessBox .......................................................................................................................... - 18 - InitPieceLocation ............................................................................................................. - 22 - InitCanju .......................................................................................................................... - 28 - HandleMouse .................................................................................................................. - 32 - MoveRule ........................................................................................................................ - 38 - DemoManulDialog ........................................................................................................... - 44 - CanRule ............................................................................................................................ - 51 - 五、系统效果演示 ............................................................................................................. - 54 - 5.1效果图 ....................................................................................................................... - 54 - 5.2时序图 ....................................................................................................................... - 55 - 六、设计体会 ..................................................................................................................... - 56 - 附件一:课程设计小组人员任务分配 ............................................................................. - 56 - 附件二:合肥工业大学课程设计任务书 ......................................................................... - 57 -
- 2 -
一、本组课题及程序功能要求
课题名称:Java中国象棋打谱系统改进 要求:对中国象棋打谱系统进行改进
1) 添加音乐播放功能模块,实现当玩家托起或放下棋子 时,播放一段简短音乐。
2) 处理残局是添加一定规则:“士”、“将”必须放在田字格中。
二、系统需求分析
2.1 系统名称
中国象棋打谱系统
2.2 系统介绍
中国象棋打谱系统采用的是JavaSE中的基本技术可以实现简单的游戏操作,如下: (1)、制作实战棋谱 (2)、制作残局棋谱
(3)、在移动棋子过程中播放简短音乐
- 3 -
三、系统总体设计
3.1系统功能结构图
中国象棋
制作实战棋谱
演示实战棋谱
演示棋谱
演示实战棋谱
制作残局棋谱
3.2 具体功能实现
1、ChinaChess.java(打谱系统的主类)
ChinaChess
类负责创建中国象棋打谱系统的主窗口,该
类含有main方法,程序从该类开始执行。ChinaChess类的成
- 4 -
员变量中有5种重要类型的对
象:Jmenu,ChessBoard,DemoManulDialog,JtextField,Jbutton。 2、ChessBoard.java
ChessBoard类创建的对象是ChessBoard类最重要的成员之一,棋盘。该类的成员变量有5种重要类型的对象:Point,ChessPiece,ChessBox,InitPieceLocation,InitCanju,HandleMouse。
3、ChessPiece.java
ChessPiece类创建的对象是ChessBoard的重要成员之一,
用来表示棋子。 4、Point.java
Point.java类创建的对象是ChessBoard类的重要成员之
一,使用Point对象可以确定ChessPiece对象在ChessBoard中的位置,即确定棋子在棋盘中的位置。 5、ChessBox.java
ChessBox
类创建的对象是ChessBoard的重要成员之一,
用来表示棋盒。
6、InitPieceLocation.java
InitPieceLocation类创建的对象是ChessBoard的重要成员
之一,负责安排棋子在棋盘中的初始化位置,比如对于制作实战棋谱,InitPieceLocation对象就会按着实战开局将棋子摆放
- 5 -
在棋盘中的对弈点上;对于制作残局棋谱,InitPieceLocation对象就将棋子摆在棋盒中。 7、InitCanju.java
InitCanju类创建的对象是ChessBoard的重要成员之一,
当用户需要制作残局棋谱时,棋盘的开局要由用户来确定,InitCanju类创建的对象允许用户将棋盒中的棋子拖入棋盘中的对弈点上,以便摆放好残局的开局。并添加一定规则 8、HandleMouse.java
HandleMouse类创建的对象是ChessBoard的重要成员之
一,当用户开始对弈时,HandleMouse类创建的对象负责处理鼠标事件,以便用户拖动棋子走棋。并且在拖动按下或释放棋子时发出声音 9、MoveRule.java
MoveRule类创建的对象是ChessBoard的重要成员之
一,当用户拖动棋子时,MoveRule类创建的对象负责验证用户走法是否符合象棋规则。 10、DemoManulDialog.java
DemoManulDialog类创建的对象是ChessBoard的重要成员之一。DemoManulDialog类创建的对象负责演示棋谱。
- 6 -
11、CanRule.java
CanRule类创建的对象负责在创建残局的时候,控制棋子的摆放位置,如像必须放在田字格中,将士必须在米子格中。
四、程序代码设计
ChinaChess
import javax.swing.*; import java.awt.*;
import java.awt.event.*; import java.io.*;
public class ChinaChess extends JFrame implements ActionListener{ ChessBoard board; //棋盘
DemoManulDialog demoManul; //初始化棋盘摆设 JMenuBar bar; //菜单条
JMenu makeMenu,showMenu; //选择制作棋盘方式 棋谱
JMenuItem makeShiZhanManul,makeCanJuManul,openManulAndShow; //制作实战棋谱 制作残局 打开一个棋谱
JButton startMakeManul,saveManul; //开始制作棋谱 保存棋谱 JTextField hintMessage; //最初为:请单击菜单,选择制作棋谱的方式或演示已有的棋谱
public ChinaChess(){
setTitle(\中国象棋棋谱制作系统\ board=new ChessBoard();
add(board,BorderLayout.CENTER); /*主方法中chinachess容器,相当于chinachess.add(board,BorderLayout.CENTER) 作用:将棋盘board放到容器chinachess的中间 */
bar=new JMenuBar();
makeMenu=new JMenu(\选择制作棋谱的方式\ showMenu=new JMenu(\棋谱\
- 7 -
makeShiZhanManul=new JMenuItem(\制作实战棋谱\ makeCanJuManul=new JMenuItem(\制作残局棋谱\
openManulAndShow=new JMenuItem(\打开一个棋谱并演示\
makeMenu.add(makeShiZhanManul); //\制作残局棋谱\添加到\选择制作棋谱的方式\
makeMenu.add(makeCanJuManul); showMenu.add(openManulAndShow);
bar.add(makeMenu);//\选择制作棋谱的方式\添加到菜单条 bar.add(showMenu);
setJMenuBar(bar); //JFrame中方法 ,将菜单条放到窗口中(顶端) makeShiZhanManul.addActionListener(this); //对自己注册监听器 makeCanJuManul.addActionListener(this); openManulAndShow.addActionListener(this); startMakeManul=new JButton(\开始制作棋谱\
startMakeManul.setVisible(false); //setVisible(false) 设置组件“开始制作棋谱\不可见
startMakeManul.addActionListener(this); saveManul=new JButton(\保存棋谱\ saveManul.setVisible(false);
saveManul.addActionListener(this); hintMessage=new JTextField(30);
hintMessage.setHorizontalAlignment(JTextField.CENTER); //设置文本的水平对齐方式
hintMessage.setFont(new Font(\细黑\ //设置当前字体 hintMessage.setEditable(false);
hintMessage.setText(\请单击菜单,选择制作棋谱的方式或演示已有的棋谱\
hintMessage.setBackground(Color.green);
JPanel north=new JPanel(); //JPanel一般轻量级容器 north.add(hintMessage); north.add(startMakeManul); north.add(saveManul);
add(north,BorderLayout.NORTH);
setVisible(true); //chinachess窗口可见 setBounds(120,10,710,580);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); validate(); //确保布局完成
JOptionPane.showMessageDialog(this,
- 8 -
\请单击菜单,选择制作棋谱的方式或演示已有的棋谱\提示对话框\
JOptionPane.WARNING_MESSAGE); //消息对话框JOptionPane,this表示显示在当前窗口中央,WARNING_MESSAGE对话框显示感叹号 }
public void actionPerformed(ActionEvent e){
String message=\单击\\\开始制作棋谱\\\然后拖动棋子走棋\ if(e.getSource()==makeShiZhanManul) { //如果makeShiZhanManul事件源发生时间
board.setShizhanPlay(); //ChessBoard中自定义方法
hintMessage.setText(message);//hintMessage 文本框内容更换为message startMakeManul.setVisible(true); //startMakeManul变为可见 saveManul.setVisible(false);
JOptionPane.showMessageDialog(this,message,\提示对话框\JOptionPane.WARNING_MESSAGE); //makeShiZhanManul触发消息对话框 }
if(e.getSource()==makeCanJuManul){
message=\将棋盒中棋子拖入棋盘摆好残局,然后单击\\\开始制作棋谱\\\
hintMessage.setText(message); //hintMessage 文本框内容更换为message
board.setCanjuPlay();
startMakeManul.setVisible(true); saveManul.setVisible(false);
JOptionPane.showMessageDialog(this,message,\提示对话框\JOptionPane.WARNING_MESSAGE); }
if(e.getSource()==startMakeManul){ board.startMakeManul();
hintMessage.setText(\单击\\\保存棋谱\\\按钮可以保存棋谱\ saveManul.setVisible(true);
startMakeManul.setVisible(false); }
if(e.getSource()==saveManul){
startMakeManul.setVisible(false);
JFileChooser chooser=new JFileChooser(); //文件对话框,打开或保存一个文件
- 9 -
int state=chooser.showSaveDialog(null); //使对话框可见,提供保存文件对话框界面 ,null表示显示在屏幕中央
File file=chooser.getSelectedFile(); // getSelectedFile()可以得到文件对话框选择的文件
if(file!=null&&state==JFileChooser.APPROVE_OPTION){ //state返回值为JFileChooser.APPROVE_OPTION 代表可以使用getSelectedFile方法 try{
FileOutputStream out=new FileOutputStream(file);
ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(board); out.close();
objectOut.close(); }
catch(Exception event){} } }
if(e.getSource()==openManulAndShow){
JFileChooser chooser=new JFileChooser();
int state=chooser.showOpenDialog(null); //使对话框可见,提供打开文件对话框界面 ,null表示显示在屏幕中央 File file=chooser.getSelectedFile();
if(file!=null&&state==JFileChooser.APPROVE_OPTION){ demoManul=new DemoManulDialog(file); demoManul.setVisible(true); } } }
public static void main(String args[]){
ChinaChess chinachess=new ChinaChess(); }
ChessBoard
import javax.swing.*;
import java.util.*; import java.awt.*;
import java.awt.event.*;
public class ChessBoard extends JLayeredPane implements ActionListener{ int m=10,n=9,distance=42;
- 10 -
Point [][] playPoint;
String [] redName={\帅\士\士\相\相\马\马\车\车\炮\炮\ \兵\兵\兵\兵\兵\
String [] blackName={\将\仕\仕\象\象\馬\馬\車\車\炮\炮\ \卒\卒\卒\卒\卒\ ChessPiece [] redPiece; ChessPiece [] blackPiece;
ChessBox redChessBox,blackChessBox; InitPieceLocation initPieceLocation; InitCanju initCanju;
HandleMouse handleMouse; ArrayList
step=new ArrayList
redChessBox=new ChessBox(distance,11,7); blackChessBox=new ChessBox(distance,11,1); for(int i=0;i redChessBox.putPieceToBox(redPiece[i]); for(int i=0;i blackChessBox.putPieceToBox(blackPiece[i]); initPieceLocation=new InitPieceLocation(); initPieceLocation.setPoint(playPoint); initPieceLocation.setRedChessPiece(redPiece); initPieceLocation.setBlackChessPiece(blackPiece); initPieceLocation.setRedChessBox(redChessBox); initPieceLocation.setBlackChessBox(blackChessBox); initCanju=new InitCanju(); initCanju.setPoint(playPoint); initCanju.setRedChessBox(redChessBox); initCanju.setBlackChessBox(blackChessBox); handleMouse=new HandleMouse(); handleMouse.setStep(step); handleMouse.setPoint(playPoint); handleMouse.setRedChessBox(redChessBox); handleMouse.setBlackChessBox(blackChessBox); handleMouse.initStep(); cancel=new JButton(\悔棋\ add(cancel); cancel.setVisible(false); cancel.setSize(60,30); cancel.setLocation(13*distance,(int)(5*distance)); - 11 - cancel.addActionListener(this); } private void initPointAndPiece() { removeAll(); playPoint=new Point[m][n]; int Hspace=distance,Vspace=distance; for(int i=0;i playPoint[i][j]=new Point(distance+Hspace,Vspace); playPoint[i][j].setIsPlayPoint(true); Hspace=Hspace+distance; } Hspace=distance; Vspace=Vspace+distance; } redPiece=new ChessPiece[redName.length]; int size=distance; for(int i=0;i add(redPiece[i],JLayeredPane.PALETTE_LAYER); redPiece[i].setSize(size,size); redPiece[i].setIsRed(true); redPiece[i].setName(redName[i]); redPiece[i].repaint(); } blackPiece=new ChessPiece[blackName.length]; for(int i=0;i add(blackPiece[i],JLayeredPane.PALETTE_LAYER); blackPiece[i].setSize(size,size); blackPiece[i].setIsBlack(true); blackPiece[i].setName(blackName[i]); blackPiece[i].repaint(); } } public ArrayList public Point [][] getPoint(){ return playPoint; } public void setShizhanPlay(){ handleMouse.setRedFirstMove(true); handleMouse.initStep(); - 12 - cancel.setVisible(false); initPieceLocation.putAllPieceToPlayChessArea(); for(int i=0;i MouseListener [] listener=redPiece[i].getMouseListeners(); for(int k=0;k redPiece[i].removeMouseListener(listener[k]); listener=blackPiece[i].getMouseListeners(); for(int k=0;k blackPiece[i].removeMouseListener(listener[k]); MouseMotionListener [] mr=redPiece[i].getMouseMotionListeners(); for(int k=0;k redPiece[i].removeMouseMotionListener(mr[k]); mr=blackPiece[i].getMouseMotionListeners(); for(int k=0;k blackPiece[i].removeMouseMotionListener(mr[k]); } } public void setCanjuPlay(){ handleMouse.setRedFirstMove(true); handleMouse.initStep(); cancel.setVisible(false); initPieceLocation.putAllPieceToChessBox(); for(int i=0;i MouseListener [] listener=redPiece[i].getMouseListeners(); for(int k=0;k redPiece[i].removeMouseListener(listener[k]); listener=blackPiece[i].getMouseListeners(); for(int k=0;k blackPiece[i].removeMouseListener(listener[k]); MouseMotionListener [] mr=redPiece[i].getMouseMotionListeners(); for(int k=0;k redPiece[i].removeMouseMotionListener(mr[k]); mr=blackPiece[i].getMouseMotionListeners(); for(int k=0;k blackPiece[i].removeMouseMotionListener(mr[k]); redPiece[i].addMouseListener(initCanju); blackPiece[i].addMouseListener(initCanju); redPiece[i].addMouseMotionListener(initCanju); blackPiece[i].addMouseMotionListener(initCanju); } } public void startMakeManul(){ cancel.setVisible(true); - 13 - handleMouse.setRedFirstMove(true); handleMouse.initStep(); for(int i=0;i MouseListener [] listener=redPiece[i].getMouseListeners(); for(int k=0;k redPiece[i].removeMouseListener(listener[k]); listener=blackPiece[i].getMouseListeners(); for(int k=0;k blackPiece[i].removeMouseListener(listener[k]); MouseMotionListener [] mr=redPiece[i].getMouseMotionListeners(); for(int k=0;k redPiece[i].removeMouseMotionListener(mr[k]); mr=blackPiece[i].getMouseMotionListeners(); for(int k=0;k blackPiece[i].removeMouseMotionListener(mr[k]); redPiece[i].addMouseListener(handleMouse); blackPiece[i].addMouseListener(handleMouse); redPiece[i].addMouseMotionListener(handleMouse); blackPiece[i].addMouseMotionListener(handleMouse); } } public void paintComponent(Graphics g1){ Image img; final Color bgColor=new Color(245,250,160);//棋盘的背景色 super.paintComponent(g1); Graphics2D g=(Graphics2D)g1;//获得Graphics2D对象 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//打开抗锯齿 Color c=g.getColor();//获得画笔颜色 g.setColor(bgColor);//将画笔设为背景色 g.fill3DRect(0,0,this.getBounds().width,this.getBounds().height,false);//绘制一个矩形棋盘 g.fillRect(playPoint[0][0].x,playPoint[0][0].y,8*distance,9*distance); g.setColor(Color.black); for(int i=0;i<=m-1;i++){ g.drawLine(playPoint[i][0].x,playPoint[i][0].y, playPoint[i][n-1].x,playPoint[i][n-1].y); } for(int j=0;j<=n-1;j++){ if(j>0&&j g.drawLine(playPoint[0][j].x,playPoint[0][j].y, - 14 - playPoint[4][j].x,playPoint[4][j].y); g.drawLine(playPoint[5][j].x,playPoint[5][j].y, playPoint[m-1][j].x,playPoint[m-1][j].y); } else{ g.drawLine(playPoint[0][j].x,playPoint[0][j].y, playPoint[m-1][j].x,playPoint[m-1][j].y); } } g.drawLine(playPoint[0][3].x,playPoint[0][3].y, playPoint[2][5].x,playPoint[2][5].y); g.drawLine(playPoint[0][5].x,playPoint[0][5].y, playPoint[2][3].x,playPoint[2][3].y); g.drawLine(playPoint[7][3].x,playPoint[7][3].y, playPoint[m-1][5].x,playPoint[m-1][5].y); g.drawLine(playPoint[7][5].x,playPoint[7][5].y, playPoint[m-1][3].x,playPoint[m-1][3].y); this.smallLine(g,1,2); this.smallLine(g,7,2); this.smallLine(g,7,2); this.smallLine(g,7,7); this.smallLine(g,0,3); this.smallLine(g,2,3); this.smallLine(g,4,3); this.smallLine(g,6,3); this.smallLine(g,8,3); this.smallLine(g,0,6); this.smallLine(g,2,6); this.smallLine(g,4,6); this.smallLine(g,6,6); this.smallLine(g,8,6); g.setFont(new Font(\宋体\ int w=blackPiece[0].getBounds().width; int h=blackPiece[0].getBounds().height; Point [] boxPoint=blackChessBox.getBoxPoint(); g.drawString(\黑棋盒\ setOpaque(false); g.drawRect(boxPoint[0].getX()-w/2-2,boxPoint[0].getY()-2*h/3, 4*distance+5,4*distance+8); g.setColor(Color.red); boxPoint=redChessBox.getBoxPoint(); - 15 - boxPoint[9].setChessPiece(piece); boxPoint[9].setHaveChessPiece(true); piece.setAtPoint(boxPoint[9]); } else{ piece.setLocation(boxPoint[10].getX()-w/2,boxPoint[10].getY()-h/2); boxPoint[10].setChessPiece(piece); boxPoint[10].setHaveChessPiece(true); piece.setAtPoint(boxPoint[10]); } } if(name.equals(\兵\卒\ if(boxPoint[11].isHaveChessPiece()==false){ piece.setLocation(boxPoint[11].getX()-w/2,boxPoint[11].getY()-h/2); boxPoint[11].setChessPiece(piece); boxPoint[11].setHaveChessPiece(true); piece.setAtPoint(boxPoint[11]); } else if(boxPoint[12].isHaveChessPiece()==false){ piece.setLocation(boxPoint[12].getX()-w/2,boxPoint[12].getY()-h/2); boxPoint[12].setChessPiece(piece); boxPoint[12].setHaveChessPiece(true); piece.setAtPoint(boxPoint[12]); } else if(boxPoint[13].isHaveChessPiece()==false){ piece.setLocation(boxPoint[13].getX()-w/2,boxPoint[13].getY()-h/2); boxPoint[13].setChessPiece(piece); boxPoint[13].setHaveChessPiece(true); piece.setAtPoint(boxPoint[13]); } else if(boxPoint[14].isHaveChessPiece()==false){ piece.setLocation(boxPoint[14].getX()-w/2,boxPoint[14].getY()-h/2); boxPoint[14].setChessPiece(piece); boxPoint[14].setHaveChessPiece(true); piece.setAtPoint(boxPoint[14]); } else if(boxPoint[15].isHaveChessPiece()==false){ piece.setLocation(boxPoint[15].getX()-w/2,boxPoint[15].getY()-h/2); boxPoint[15].setChessPiece(piece); boxPoint[15].setHaveChessPiece(true); piece.setAtPoint(boxPoint[15]); } } } - 21 - Point returnPoint=piece.getAtPoint(); return returnPoint; } } InitPieceLocation import java.util.ArrayList; public class InitPieceLocation implements java.io.Serializable{ Point [][] playPoint; //二维坐标 ChessPiece [] redPiece,blackPiece; ChessBox redChessBox,blackChessBox; public void setPoint(Point [][] p){ playPoint=p; } public void setRedChessPiece(ChessPiece [] redPiece){ this.redPiece=redPiece; } public void setBlackChessPiece(ChessPiece [] blackPiece){ this.blackPiece=blackPiece; } public void setRedChessBox(ChessBox redChessBox){ this.redChessBox=redChessBox; } public void setBlackChessBox(ChessBox blackChessBox){ this.blackChessBox=blackChessBox; } public void putAllPieceToPlayChessArea(){ for(int i=0;i for(int j=0;j playPoint[i][j].setHaveChessPiece(false); } } ArrayList pieceList.add(redPiece[i]);pieceList.add(blackPiece[i]); } for(int i=0;i for(int k=0;k ChessPiece piece=pieceList.get(k); int w=piece.getBounds().width; int h=piece.getBounds().height; - 22 - Point p=null; p=piece.getAtPoint(); if(p!=null) p.setHaveChessPiece(false); String name=piece.getName(); if(name.equals(\帅\ piece.setLocation(playPoint[9][4].getX()-w/2,playPoint[9][4].getY()-h/2); piece.setAtPoint(playPoint[9][4]); playPoint[9][4].setHaveChessPiece(true); playPoint[9][4].setChessPiece(piece); } if((name.equals(\士\仕\ if(playPoint[9][3].isHaveChessPiece()==false){ piece.setLocation(playPoint[9][3].getX()-w/2,playPoint[9][3].getY()-h/2); piece.setAtPoint(playPoint[9][3]); playPoint[9][3].setHaveChessPiece(true); playPoint[9][3].setChessPiece(piece); } else{ piece.setLocation(playPoint[9][5].getX()-w/2,playPoint[9][5].getY()-h/2); piece.setAtPoint(playPoint[9][5]); playPoint[9][5].setHaveChessPiece(true); playPoint[9][5].setChessPiece(piece); } } if(name.equals(\相\ if(playPoint[9][2].isHaveChessPiece()==false){ piece.setLocation(playPoint[9][2].getX()-w/2,playPoint[9][2].getY()-h/2); piece.setAtPoint(playPoint[9][2]); playPoint[9][2].setHaveChessPiece(true); playPoint[9][2].setChessPiece(piece); } else{ piece.setLocation(playPoint[9][6].getX()-w/2,playPoint[9][6].getY()-h/2); piece.setAtPoint(playPoint[9][6]); playPoint[9][6].setHaveChessPiece(true); playPoint[9][6].setChessPiece(piece); } } if((name.equals(\马\馬\ if(playPoint[9][1].isHaveChessPiece()==false){ piece.setLocation(playPoint[9][1].getX()-w/2,playPoint[9][1].getY()-h/2); piece.setAtPoint(playPoint[9][1]); playPoint[9][1].setHaveChessPiece(true); - 23 - playPoint[9][1].setChessPiece(piece); } else{ piece.setLocation(playPoint[9][7].getX()-w/2,playPoint[9][7].getY()-h/2); piece.setAtPoint(playPoint[9][7]); playPoint[9][7].setHaveChessPiece(true); playPoint[9][7].setChessPiece(piece); } } if((name.equals(\车\車\ if(playPoint[9][0].isHaveChessPiece()==false){ piece.setLocation(playPoint[9][0].getX()-w/2,playPoint[9][0].getY()-h/2); piece.setAtPoint(playPoint[9][0]); playPoint[9][0].setHaveChessPiece(true); playPoint[9][0].setChessPiece(piece); } else{ piece.setLocation(playPoint[9][8].getX()-w/2,playPoint[9][7].getY()-h/2); piece.setAtPoint(playPoint[9][8]); playPoint[9][8].setHaveChessPiece(true); playPoint[9][8].setChessPiece(piece); } } if(name.equals(\炮\ if(playPoint[7][1].isHaveChessPiece()==false){ piece.setLocation(playPoint[7][1].getX()-w/2,playPoint[7][1].getY()-h/2); piece.setAtPoint(playPoint[7][1]); playPoint[7][1].setHaveChessPiece(true); playPoint[7][1].setChessPiece(piece); } else{ piece.setLocation(playPoint[7][7].getX()-w/2,playPoint[7][7].getY()-h/2); piece.setAtPoint(playPoint[7][7]); playPoint[7][7].setHaveChessPiece(true); playPoint[7][7].setChessPiece(piece); } } if(name.equals(\兵\ if(playPoint[6][0].isHaveChessPiece()==false){ piece.setLocation(playPoint[6][0].getX()-w/2,playPoint[6][0].getY()-h/2); piece.setAtPoint(playPoint[6][0]); playPoint[6][0].setHaveChessPiece(true); playPoint[6][0].setChessPiece(piece); } - 24 - else if(playPoint[6][2].isHaveChessPiece()==false){ piece.setLocation(playPoint[6][2].getX()-w/2,playPoint[6][2].getY()-h/2); piece.setAtPoint(playPoint[6][2]); playPoint[6][2].setHaveChessPiece(true); playPoint[6][2].setChessPiece(piece); } else if(playPoint[6][4].isHaveChessPiece()==false){ piece.setLocation(playPoint[6][4].getX()-w/2,playPoint[6][4].getY()-h/2); piece.setAtPoint(playPoint[6][4]); playPoint[6][4].setHaveChessPiece(true); playPoint[6][4].setChessPiece(piece); } else if(playPoint[6][6].isHaveChessPiece()==false){ piece.setLocation(playPoint[6][6].getX()-w/2,playPoint[6][6].getY()-h/2); piece.setAtPoint(playPoint[6][6]); playPoint[6][6].setHaveChessPiece(true); playPoint[6][6].setChessPiece(piece); } else{ piece.setLocation(playPoint[6][8].getX()-w/2,playPoint[6][8].getY()-h/2); piece.setAtPoint(playPoint[6][8]); playPoint[6][8].setHaveChessPiece(true); playPoint[6][8].setChessPiece(piece); } } if(name.equals(\将\ piece.setLocation(playPoint[0][4].getX()-w/2,playPoint[0][4].getY()-h/2); piece.setAtPoint(playPoint[0][4]); playPoint[0][4].setHaveChessPiece(true); playPoint[0][4].setChessPiece(piece); } if((name.equals(\士\仕\ if(playPoint[0][3].isHaveChessPiece()==false){ piece.setLocation(playPoint[0][3].getX()-w/2,playPoint[0][3].getY()-h/2); piece.setAtPoint(playPoint[0][3]); playPoint[0][3].setHaveChessPiece(true); playPoint[0][3].setChessPiece(piece); } else{ piece.setLocation(playPoint[0][5].getX()-w/2,playPoint[0][5].getY()-h/2); piece.setAtPoint(playPoint[0][5]); playPoint[0][5].setHaveChessPiece(true); playPoint[0][5].setChessPiece(piece); } - 25 - } if(name.equals(\象\ if(playPoint[0][2].isHaveChessPiece()==false){ piece.setLocation(playPoint[0][2].getX()-w/2,playPoint[0][2].getY()-h/2); piece.setAtPoint(playPoint[0][2]); playPoint[0][2].setHaveChessPiece(true); playPoint[0][2].setChessPiece(piece); } else{ piece.setLocation(playPoint[0][6].getX()-w/2,playPoint[0][6].getY()-h/2); piece.setAtPoint(playPoint[0][6]); playPoint[0][6].setHaveChessPiece(true); playPoint[0][6].setChessPiece(piece); } } if((name.equals(\马\馬\ if(playPoint[0][1].isHaveChessPiece()==false){ piece.setLocation(playPoint[0][1].getX()-w/2,playPoint[0][1].getY()-h/2); piece.setAtPoint(playPoint[0][1]); playPoint[0][1].setHaveChessPiece(true); playPoint[0][1].setChessPiece(piece); } else{ piece.setLocation(playPoint[0][7].getX()-w/2,playPoint[0][7].getY()-h/2); piece.setAtPoint(playPoint[0][7]); playPoint[0][7].setHaveChessPiece(true); playPoint[0][7].setChessPiece(piece); } } if((name.equals(\车\車\ if(playPoint[0][0].isHaveChessPiece()==false){ piece.setLocation(playPoint[0][0].getX()-w/2,playPoint[0][0].getY()-h/2); piece.setAtPoint(playPoint[0][0]); playPoint[0][0].setHaveChessPiece(true); playPoint[0][0].setChessPiece(piece); } else{ piece.setLocation(playPoint[0][8].getX()-w/2,playPoint[0][7].getY()-h/2); piece.setAtPoint(playPoint[0][8]); playPoint[0][8].setHaveChessPiece(true); playPoint[0][8].setChessPiece(piece); } } if(name.equals(\炮\ - 26 - if(playPoint[2][1].isHaveChessPiece()==false){ piece.setLocation(playPoint[2][1].getX()-w/2,playPoint[2][1].getY()-h/2); piece.setAtPoint(playPoint[2][1]); playPoint[2][1].setHaveChessPiece(true); playPoint[2][1].setChessPiece(piece); } else{ piece.setLocation(playPoint[2][7].getX()-w/2,playPoint[2][7].getY()-h/2); piece.setAtPoint(playPoint[2][7]); playPoint[2][7].setHaveChessPiece(true); playPoint[2][7].setChessPiece(piece); } } if(name.equals(\卒\ if(playPoint[3][0].isHaveChessPiece()==false){ piece.setLocation(playPoint[3][0].getX()-w/2,playPoint[3][0].getY()-h/2); piece.setAtPoint(playPoint[3][0]); playPoint[3][0].setHaveChessPiece(true); playPoint[3][0].setChessPiece(piece); } else if(playPoint[3][2].isHaveChessPiece()==false){ piece.setLocation(playPoint[3][2].getX()-w/2,playPoint[3][2].getY()-h/2); piece.setAtPoint(playPoint[3][2]); playPoint[3][2].setHaveChessPiece(true); playPoint[3][2].setChessPiece(piece); } else if(playPoint[3][4].isHaveChessPiece()==false){ piece.setLocation(playPoint[3][4].getX()-w/2,playPoint[3][4].getY()-h/2); piece.setAtPoint(playPoint[3][4]); playPoint[3][4].setHaveChessPiece(true); playPoint[3][4].setChessPiece(piece); } else if(playPoint[3][6].isHaveChessPiece()==false){ piece.setLocation(playPoint[3][6].getX()-w/2,playPoint[3][6].getY()-h/2); piece.setAtPoint(playPoint[3][6]); playPoint[3][6].setHaveChessPiece(true); playPoint[3][6].setChessPiece(piece); } else{ piece.setLocation(playPoint[3][8].getX()-w/2,playPoint[3][8].getY()-h/2); piece.setAtPoint(playPoint[3][8]); playPoint[3][8].setHaveChessPiece(true); playPoint[3][8].setChessPiece(piece); } - 27 - } } } public void putAllPieceToChessBox(){ for(int i=0;i redChessBox.putPieceToBox(redPiece[i]); for(int i=0;i blackChessBox.putPieceToBox(blackPiece[i]); Point [] boxPoint=redChessBox.getBoxPoint(); for(int i=0;i boxPoint[i].setHaveChessPiece(true); boxPoint=blackChessBox.getBoxPoint(); for(int i=0;i boxPoint[i].setHaveChessPiece(true); for(int i=0;i playPoint[i][j].setHaveChessPiece(false); } } } } InitCanju import java.awt.event.*; import java.awt.*; import java.util.*; import javax.swing.*; import java.io.*; public class InitCanju implements MouseListener,MouseMotionListener,Serializable{ Point [][] point; ChessBox redChessBox,blackChessBox; CanRule canput=new CanRule(); Point [] redChessBoxPoint,blackChessBoxPoint; int a,b,x0,y0,x,y,panorhe; Point startPoint=null,endPoint=null;// boolean redFirstMove,blackFirstMove,isPlaypoint;// public void setPoint(Point [][] point){ this.point=point; } public void setRedChessBox(ChessBox redChessBox){ this.redChessBox=redChessBox; - 28 - redChessBoxPoint=redChessBox.getBoxPoint(); } public void setBlackChessBox(ChessBox blackChessBox){ this.blackChessBox=blackChessBox; blackChessBoxPoint=blackChessBox.getBoxPoint(); } public void mousePressed(MouseEvent e){ ChessPiece piece=null; piece=(ChessPiece)e.getSource(); a=piece.getBounds().x; b=piece.getBounds().y; x0=e.getX(); y0=e.getY(); startPoint=piece.getAtPoint(); for(int i=0;i for(int j=0;j public void mouseMoved(MouseEvent e){} public void mouseDragged(MouseEvent e){ ChessPiece piece=null; piece=(ChessPiece)e.getSource(); Container con=(Container)piece.getParent(); if(con instanceof JLayeredPane) ((JLayeredPane)con).setLayer(piece,JLayeredPane.DRAG_LAYER); a=piece.getBounds().x; b=piece.getBounds().y; x=e.getX(); y=e.getY(); a=a+x; b=b+y; piece.setLocation(a-x0,b-y0); } public void mouseReleased(MouseEvent e){ ChessPiece piece=null; piece=(ChessPiece)e.getSource(); int w=piece.getBounds().width; int h=piece.getBounds().height; Container con=(Container)piece.getParent(); if(con instanceof JLayeredPane) ((JLayeredPane)con).setLayer(piece,JLayeredPane.DEFAULT_LAYER); - 29 - Rectangle rect=piece.getBounds(); endPoint=piece.getAtPoint(); for(int i=0;i if(rect.contains(point[i][j].getX(),point[i][j].getY())){ endPoint=point[i][j]; panorhe=1; break; } } } if(piece.getIsRed()){//判断endPoint是不是在红棋盒中 for(int i=0;i if(rect.contains(redChessBoxPoint[i].getX(),redChessBoxPoint[i].getY())){ endPoint=redChessBoxPoint[i]; panorhe=0; break; } } } else if(piece.getIsBlack()){//判断endPoint是不是在黑棋盒中 for(int i=0;i if(rect.contains(blackChessBoxPoint[i].getX(),blackChessBoxPoint[i].getY())){ endPoint=blackChessBoxPoint[i]; panorhe=0; break; } } } canput.canMove(piece,endPoint.x,endPoint.y);//设置是否允许移动 if(endPoint!=null&&panorhe==1){//endPoint不空且endPoint在棋盘中 if(endPoint.isHaveChessPiece()){ boolean ok=canput.getCanMove();//获取是否可移动 if(ok){ if(ok==true) System.out.println(\处有棋子,可以移动\ ChessPiece backToBoxPiece=endPoint.getChessPiece(); Point boxPoint=null; if(backToBoxPiece.getIsRed()) boxPoint=redChessBox.putPieceToBox(backToBoxPiece); else if(backToBoxPiece.getIsBlack()) boxPoint=blackChessBox.putPieceToBox(backToBoxPiece); piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); piece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); - 30 - endPoint.setChessPiece(piece); startPoint.setHaveChessPiece(false); if(piece.getIsRed()){ redFirstMove=false; blackFirstMove=true; } else if(piece.getIsBlack()){ blackFirstMove=false; redFirstMove=true; } } else if(panorhe==1){ piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); } else{ piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); piece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(piece); startPoint.setHaveChessPiece(false); } } else{ boolean ok=canput.getCanMove();//获取是否可移动 if(ok){ piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); piece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(piece); startPoint.setHaveChessPiece(false); } else{ piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); } } } else if(panorhe==1){//endPoint空但是在棋盘中 piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); } else{//endPoint在棋盒中,不需要考虑是否允许移动 piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); piece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(piece); - 31 - startPoint.setHaveChessPiece(false); } } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){} } HandleMouse /*------------------------------------------------------ 在该类中插入两个方法PlayMusic1()和PlayMusic3() PlayMusic1():表示按下棋子时候发出一种声音 PlayMusic3():表示释放棋子时候发出一种声音 分别在:mousePressed()和mouseReleased()两个方法中调用以上方法,实现播放音乐功能 --------------------------------------------------*/ import java.awt.event.*; import java.awt.*; import java.util.*; import javax.swing.*; import java.io.*; import java.applet.Applet; import java.applet.AudioClip; import java.net.MalformedURLException; import java.net.URL; public class HandleMouse implements MouseListener,MouseMotionListener,Serializable{ Point [][] point; URL codebase1=null; //定义获取路径的URL变量 AudioClip audio1; //定义音乐播放功能的变量,将URL获取地址付给audio1变量,便可以播放音乐 ChessBox redChessBox,blackChessBox; MoveRule rule; ArrayList boolean redFirstMove,blackFirstMove,isPlaypoint; Point startPoint=null,endPoint=null; HandleMouse(){ //开始先移动红旗 redFirstMove=true; blackFirstMove=false; - 32 - rule=new MoveRule(); } public void setStep(ArrayList public void setRedFirstMove(boolean boo){ redFirstMove=true; blackFirstMove=false; } public void setPoint(Point [][] point){ this.point=point; rule.setPoint(point); } public void setRedChessBox(ChessBox redChessBox){ this.redChessBox=redChessBox; } public void setBlackChessBox(ChessBox blackChessBox){ this.blackChessBox=blackChessBox; } public void initStep(){ step.clear(); } public ArrayList //按下棋子时,发出一个声音 -----这里加一个 public void PlayMusic1(){ //按下棋子发出声音 try { codebase1 = new URL(\音频文件/按下棋子.WAV\ } catch (MalformedURLException m) { m.printStackTrace(); } audio1=Applet.newAudioClip(codebase1); audio1.play(); } public void mousePressed(MouseEvent e){ //鼠标事件,按下鼠标左键,制动执行该过程 PlayMusic1(); //方法在上面,这里调用 ChessPiece piece=null; piece=(ChessPiece)e.getSource(); a=piece.getBounds().x; - 33 - b=piece.getBounds().y; x0=e.getX(); y0=e.getY(); startPoint=piece.getAtPoint(); for(int i=0;i for(int j=0;j public void mouseMoved(MouseEvent e){} public void mouseDragged(MouseEvent e){ //鼠标拖动棋子 ChessPiece piece=null; piece=(ChessPiece)e.getSource(); Container con=(Container)piece.getParent(); a=piece.getBounds().x; b=piece.getBounds().y; x=e.getX(); y=e.getY(); a=a+x; b=b+y; //初始化棋子位置 if(con instanceof JLayeredPane){ ((JLayeredPane)con).setLayer(piece,JLayeredPane.DRAG_LAYER); } if(piece.getIsRed()&&redFirstMove) piece.setLocation(a-x0,b-y0); if(piece.getIsBlack()&&blackFirstMove) piece.setLocation(a-x0,b-y0); } public void PlayMusic3(){ //释放棋子播放声音 try { codebase1 = new URL(\音频文件/吃掉棋子.WAV\ } catch (MalformedURLException m) { m.printStackTrace(); } audio1=Applet.newAudioClip(codebase1); - 34 - audio1.play(); } public void mouseReleased(MouseEvent e){ //鼠标事件,释放鼠标左键,制动实行该方法 PlayMusic3(); ChessPiece piece=null; piece=(ChessPiece)e.getSource(); int w=piece.getBounds().width; int h=piece.getBounds().height; Container con=(Container)piece.getParent(); //getParent() 此组件的父级容器 if(con instanceof JLayeredPane) //con是JLayeredPane实例 ((JLayeredPane)con).setLayer(piece,JLayeredPane.PALETTE_LAYER); //JLayeredPane.PALETTE_LAYER 调色板层位于默认层之上。 //它们对于浮动工具栏和调色板很有用,因此可以位于其他组件之上 Rectangle rect=piece.getBounds(); //Rectangle 指定坐标空间中的一个区域, //通过坐标空间中 Rectangle 对象左上方的点 (x,y)、宽度和高度可以定义这个区域。 for(int i=0;i for(int j=0;j if(rect.contains(point[i][j].getX(),point[i][j].getY())){ endPoint=point[i][j]; break; } } } if(endPoint!=null&&isPlaypoint){ if(endPoint.isHaveChessPiece()){ //isHaveChessPiece() endPoint位置上面有的棋子 if(endPoint.getChessPiece().getIsRed()== startPoint.getChessPiece().getIsRed()) piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); //都是红旗,不能移动,返回初始位置 else{ boolean ok=rule.movePieceRule(piece,startPoint,endPoint); //以上判断是否满足移动规则 if(ok){ //ok==true,可以移动 ChessPiece backToBoxPiece=endPoint.getChessPiece(); Point boxPoint=null; if(backToBoxPiece.getIsRed()) - 35 - boxPoint=redChessBox.putPieceToBox(backToBoxPiece); //返回棋盒是红旗,黑棋占位 else if(backToBoxPiece.getIsBlack()) boxPoint=blackChessBox.putPieceToBox(backToBoxPiece); piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); piece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(piece); startPoint.setHaveChessPiece(false); step.add(startPoint); step.add(endPoint); step.add(boxPoint); if(piece.getIsRed()){ redFirstMove=false; blackFirstMove=true; } //红旗走过,轮到黑棋走 else if(piece.getIsBlack()){ blackFirstMove=false; redFirstMove=true; } } else piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); //不满足规则,返回远点 } } else{ //末位置没有棋子 boolean ok=rule.movePieceRule(piece,startPoint,endPoint); if(ok){ //满足移动规则 piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); piece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(piece); startPoint.setHaveChessPiece(false); step.add(startPoint); step.add(endPoint); step.add(null); if(piece.getIsRed()){ redFirstMove=false; blackFirstMove=true; } - 36 - //红旗走完黑棋走 else if(piece.getIsBlack()){ blackFirstMove=false; redFirstMove=true; } } else piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); //不满足返回远点 } } else piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); } public void cancelAnStep(){ //删除一步,,,悔棋 int length=step.size(); if(length>=3){ Point boxPoint=step.get(length-1); Point endPoint=step.get(length-2); Point startPoint=step.get(length-3); ChessPiece piece=null; if(boxPoint!=null){ piece=endPoint.getChessPiece(); if(piece.getIsRed()){ redFirstMove=true; blackFirstMove=false; } else if(piece.getIsBlack()){ blackFirstMove=true; redFirstMove=false; } int w=piece.getBounds().width; int h=piece.getBounds().height; piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); piece.setAtPoint(startPoint); startPoint.setHaveChessPiece(true); startPoint.setChessPiece(piece); endPoint.setHaveChessPiece(false); piece=boxPoint.getChessPiece(); w=piece.getBounds().width; h=piece.getBounds().height; piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); piece.setAtPoint(endPoint); - 37 - endPoint.setHaveChessPiece(true); endPoint.setChessPiece(piece); boxPoint.setHaveChessPiece(false); } else{ piece=endPoint.getChessPiece(); if(piece.getIsRed()){ redFirstMove=true; blackFirstMove=false; } else if(piece.getIsBlack()){ blackFirstMove=true; redFirstMove=false; } int w=piece.getBounds().width; int h=piece.getBounds().height; piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); piece.setAtPoint(startPoint); startPoint.setHaveChessPiece(true); startPoint.setChessPiece(piece); endPoint.setHaveChessPiece(false); } step.remove(step.size()-1); step.remove(step.size()-1); step.remove(step.size()-1); } } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){} } MoveRule public class MoveRule implements java.io.Serializable{ ChessPiece piece=null; Point [][] point; Point startPoint,endPoint; public void setPoint(Point [][] point){ this.point=point; } public boolean movePieceRule(ChessPiece piece,Point startPoint,Point endPoint){ int startI=-1,startJ=-1,endI=-1,endJ=-1; this.piece=piece; - 38 - this.startPoint=startPoint; this.endPoint=endPoint; boolean isMove=false; for(int i=0;i for(int j=0;j for(int i=0;i for(int j=0;j int minI=Math.min(startI,endI); int maxI=Math.max(startI,endI); int minJ=Math.min(startJ,endJ); int maxJ=Math.max(startJ,endJ); if(piece.getName().equals(\车\車\ if(startI==endI){ int j=0; for(j=minJ+1;j<=maxJ-1;j++){ if(point[startI][j].isHaveChessPiece()){ isMove=false; break; } } if(j==maxJ) isMove=true; } else if(startJ==endJ){ int i=0; for(i=minI+1;i<=maxI-1;i++){ if(point[i][startJ].isHaveChessPiece()){ isMove=false; break; } - 39 - } if(i==maxI) isMove=true; } else isMove=false; } else if(piece.getName().equals(\马\馬\ int xAxle=Math.abs(startI-endI); int yAxle=Math.abs(startJ-endJ); if(xAxle==2&&yAxle==1){ if(endI>startI){ if(point[startI+1][startJ].isHaveChessPiece()) isMove=false; else isMove=true; } if(endI if(point[startI-1][startJ].isHaveChessPiece()) isMove=false; else isMove=true; } } else if(xAxle==1&&yAxle==2){ if(endJ>startJ){ if(point[startI][startJ+1].isHaveChessPiece()) isMove=false; else isMove=true; } if(endJ if(point[startI][startJ-1].isHaveChessPiece()) isMove=false; else isMove=true; } } else isMove=false; } else if(piece.getName().equals(\象\ int centerI=(startI+endI)/2; int centerJ=(startJ+endJ)/2; - 40 - int xAxle=Math.abs(startI-endI); int yAxle=Math.abs(startJ-endJ); if(xAxle==2&&yAxle==2&&endI<=4) { if(point[centerI][centerJ].isHaveChessPiece()) isMove=false; else isMove=true; } else isMove=false; } else if(piece.getName().equals(\相\ int centerI=(startI+endI)/2; int centerJ=(startJ+endJ)/2; int xAxle=Math.abs(startI-endI); int yAxle=Math.abs(startJ-endJ); if(xAxle==2&&yAxle==2&&endI>=5){ if(point[centerI][centerJ].isHaveChessPiece()) isMove=false; else isMove=true; } else isMove=false; } else if(piece.getName().equals(\炮\ int number=0; if(startI==endI){ int j=0; for(j=minJ+1;j<=maxJ-1;j++){ if(point[startI][j].isHaveChessPiece()) number++; } if(number>1) isMove=false; else if(number==1){ if(point[endI][endJ].isHaveChessPiece()) isMove=true; } else if(number==0&&!point[endI][endJ].isHaveChessPiece()) isMove=true; } else if(startJ==endJ){ int i=0; - 41 - for(i=minI+1;i<=maxI-1;i++){ if(point[i][startJ].isHaveChessPiece()) number++; } if(number>1) isMove=false; else if(number==1){ if(point[endI][endJ].isHaveChessPiece()) isMove=true; } else if(number==0&&!point[endI][endJ].isHaveChessPiece()) isMove=true; } else isMove=false; } else if(piece.getName().equals(\兵\ int xAxle=Math.abs(startI-endI); int yAxle=Math.abs(startJ-endJ); if(endI>=5){ if(startI-endI==1&&yAxle==0) isMove=true; else isMove=false; } else if(endI<=4){ if((startI-endI==1)&&(yAxle==0)) isMove=true; else if((endI-startI==0)&&(yAxle==1)) isMove=true; else isMove=false; } } else if(piece.getName().equals(\卒\ int xAxle=Math.abs(startI-endI); int yAxle=Math.abs(startJ-endJ); if(endI<=4){ if(endI-startI==1&&yAxle==0) isMove=true; else isMove=false; } else if(endI>=5){ - 42 - if((endI-startI==1)&&(yAxle==0)) isMove=true; else if((endI-startI==0)&&(yAxle==1)) isMove=true; else isMove=false; } } //--------- else if(piece.getName().equals(\士\仕\ int xAxle=Math.abs(startI-endI); int yAxle=Math.abs(startJ-endJ); boolean c1=(endJ>=3&&endJ<=5); boolean c2=(endI>=7&&endI<=9); boolean d1=(endJ>=3&&endJ<=5); boolean d2=(endI>=0&&endI<=2); boolean ok=(xAxle==1&&yAxle==1); if((ok&&c1&&c2)||(ok&&d1&&d2)) isMove=true; else isMove=false; } else if((piece.getName().equals(\帅\将\ int xAxle=Math.abs(startI-endI); int yAxle=Math.abs(startJ-endJ); boolean c1=(endJ>=3&&endJ<=5); boolean c2=(endI>=7&&endI<=9); boolean d1=(endJ>=3&&endJ<=5); boolean d2=(endI>=0&&endI<=2); boolean ok=(xAxle==1&&yAxle==0)||(xAxle==0&&yAxle==1); if((ok&&c1&&c2)||(ok&&d1&&d2)) isMove=true; else isMove=false; } //------------- if(startPoint.equals(endPoint)) isMove=false; return isMove; } } - 43 - DemoManulDialog import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io.*; public class DemoManulDialog extends JDialog implements ActionListener{ ArrayList Stack JTextArea text; JButton previous,next; JSplitPane split; int stepNumber=1; DemoManulDialog(File f){ file=f; setTitle(\演示棋谱,棋谱文件:\ split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); stackStep=new Stack next=new JButton(\第\步\ previous=new JButton(\返回\ next.addActionListener(this); previous.addActionListener(this); previous.setEnabled(false); text=new JTextArea(); text.setEditable(false); text.setFont(new Font(\宋体\ JPanel west=new JPanel(); west.add(text); JPanel south=new JPanel(); south.add(previous); south.add(next); split.setLeftComponent(new JScrollPane(text)); add(south,BorderLayout.SOUTH); add(split,BorderLayout.CENTER); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); showTextManul(); showBoardManul(); setBounds(10,10,700,570); } - 44 - public void showBoardManul(){ stepNumber=1; stackStep.clear(); stackBack.clear(); if(demoOne!=null) remove(demoOne); try{ FileInputStream file_in=new FileInputStream(file); ObjectInputStream object_in=new ObjectInputStream(file_in); demoOne=(ChessBoard)object_in.readObject(); file_in.close(); object_in.close(); ChessPiece [] redPiece=demoOne.getRedPiece(); ChessPiece [] blackPiece=demoOne.getBlackPiece(); for(int i=0;i MouseListener [] listener=redPiece[i].getMouseListeners(); for(int k=0;k redPiece[i].removeMouseListener(listener[k]); listener=blackPiece[i].getMouseListeners(); for(int k=0;k blackPiece[i].removeMouseListener(listener[k]); MouseMotionListener [] mr=redPiece[i].getMouseMotionListeners(); for(int k=0;k redPiece[i].removeMouseMotionListener(mr[k]); mr=blackPiece[i].getMouseMotionListeners(); for(int k=0;k blackPiece[i].removeMouseMotionListener(mr[k]); } step=demoOne.getStep(); for(int i=step.size()-1;i>=0;i--){ stackStep.push(step.get(i)); } demoOne.remove(demoOne.cancel); restoreChessBoard(step); split.setRightComponent(new JScrollPane(demoOne)); } catch(Exception exp){ add(new JButton(\不是棋谱文件\ } } public void actionPerformed(ActionEvent e){ JButton source=(JButton)e.getSource(); Point startPoint=null,endPoint=null,boxPoint=null; if(source==next&&stackStep.empty()==false){ - 45 - stepNumber++; next.setText(\第\步\ startPoint=stackStep.pop(); stackBack.push(startPoint); ChessPiece startPiece=startPoint.getChessPiece(); int w=startPiece.getBounds().width; int h=startPiece.getBounds().height; endPoint=stackStep.pop(); stackBack.push(endPoint); boxPoint=stackStep.pop(); stackBack.push(boxPoint); if(boxPoint!=null){ ChessPiece endPiece=endPoint.getChessPiece(); endPiece.setLocation(boxPoint.getX()-w/2,boxPoint.getY()-h/2); startPiece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); endPiece.setAtPoint(boxPoint); boxPoint.setHaveChessPiece(true); endPoint.setChessPiece(startPiece); endPoint.setHaveChessPiece(true); startPoint.setHaveChessPiece(false); } else{ startPiece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); startPiece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(startPiece); startPoint.setHaveChessPiece(false); } } if(source==previous&&stackBack.empty()==false){ stepNumber--; next.setText(\第\步\ boxPoint=stackBack.pop(); stackStep.push(boxPoint); endPoint=stackBack.pop(); stackStep.push(endPoint); startPoint=stackBack.pop(); stackStep.push(startPoint); ChessPiece piece=null; if(boxPoint!=null){ piece=endPoint.getChessPiece(); int w=piece.getBounds().width; int h=piece.getBounds().height; piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); - 46 - piece.setAtPoint(startPoint); startPoint.setHaveChessPiece(true); startPoint.setChessPiece(piece); endPoint.setHaveChessPiece(false); piece=boxPoint.getChessPiece(); piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); piece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(piece); boxPoint.setHaveChessPiece(false); } else{ piece=endPoint.getChessPiece(); int w=piece.getBounds().width; int h=piece.getBounds().height; piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); piece.setAtPoint(startPoint); startPoint.setHaveChessPiece(true); startPoint.setChessPiece(piece); endPoint.setHaveChessPiece(false); } } if(stackBack.empty()) previous.setEnabled(false); else previous.setEnabled(true); if(stackStep.empty()){ int n=JOptionPane.showConfirmDialog(this,\演示完毕,重新演示吗?\确认对话框\ JOptionPane.YES_NO_CANCEL_OPTION ); if(n==JOptionPane.YES_OPTION){ stepNumber=1; next.setText(\第\步\ restoreChessBoard(step); stackStep.clear(); stackBack.clear(); previous.setEnabled(false); for(int i=step.size()-1;i>=0;i--){ stackStep.push(step.get(i)); } } else if(n==JOptionPane.NO_OPTION) dispose(); - 47 - } } private void restoreChessBoard(ArrayList piece=endPoint.getChessPiece(); int w=piece.getBounds().width; int h=piece.getBounds().height; piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); startPoint.setHaveChessPiece(true); startPoint.setChessPiece(piece); endPoint.setHaveChessPiece(false); piece=boxPoint.getChessPiece(); piece.setLocation(endPoint.getX()-w/2,endPoint.getY()-h/2); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(piece); boxPoint.setHaveChessPiece(false); } else{ piece=endPoint.getChessPiece(); int w=piece.getBounds().width; int h=piece.getBounds().height; piece.setLocation(startPoint.getX()-w/2,startPoint.getY()-h/2); startPoint.setHaveChessPiece(true); startPoint.setChessPiece(piece); endPoint.setHaveChessPiece(false); } } } private void showTextManul(){ ChessBoard demoTwo=null; try{ FileInputStream file_in=new FileInputStream(file); ObjectInputStream object_in=new ObjectInputStream(file_in); demoTwo=(ChessBoard)object_in.readObject(); file_in.close(); object_in.close(); } catch(Exception exp){ add(new JButton(\不是棋谱文件\ - 48 - } if(demoTwo!=null){ ArrayList StringBuffer buffer=new StringBuffer(); text.append(\棋谱\ Point [][] point=demoTwo.getPoint(); Point startPoint=null,endPoint=null,boxPoint=null; ChessPiece startPiece=null; int m=-1,n=-1,p=-1,q=-1; int index=0,number=0; while(index<=step.size()-1){ startPoint=step.get(index); startPiece=startPoint.getChessPiece(); String name=startPiece.getName(); endPoint=step.get(index+1); boxPoint=step.get(index+2); for(int i=0;i for(int i=0;i char c1=numberToLetter(m); char c2=numberToLetter(p); number++; if(boxPoint!=null){ ChessPiece endPiece=endPoint.getChessPiece(); if(startPiece.getIsRed()){ - 49 - buffer.append(\红\→\ buffer.append(\吃掉黑\ } else if(startPiece.getIsBlack()){ buffer.append(\黑\→\ buffer.append(\吃掉红\ } endPiece.setAtPoint(boxPoint); boxPoint.setHaveChessPiece(true); endPoint.setChessPiece(startPiece); endPoint.setHaveChessPiece(true); startPoint.setHaveChessPiece(false); } else{ if(startPiece.getIsRed()) buffer.append(\红\→\ else if(startPiece.getIsBlack()) buffer.append(\黑\→\ startPiece.setAtPoint(endPoint); endPoint.setHaveChessPiece(true); endPoint.setChessPiece(startPiece); startPoint.setHaveChessPiece(false); } index=index+3; } text.append(new String(buffer)); } } public char numberToLetter(int n){ char c='\\0'; switch(n){ case 1 : c='a'; break; case 2 : c='b'; break; case 3 : c='c'; break; case 4 : c='d'; break; case 5 : c='e'; break; case 6 : c='f'; break; case 7 : c='g'; break; case 8 : c='h'; break; case 9 : c='i'; break; - 50 -
正在阅读:
JAVA中国象棋打谱系统课程设计报告12-17
试验检测仪器设备的管理04-09
打印OCX未正确安装-解决办法(新)03-31
《 解三角形》单元测试卷01-27
婚礼电子邀请函范文11-28
2015小学语文一年级(上)扩词 (1)06-20
2011—2012学年度第一学期生物第一单元检测试题04-11
愉快的科技节活动作文600字06-24
通用技术实验室06-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 打谱
- 中国象棋
- 课程
- 报告
- 设计
- 系统
- JAVA
- 樊哙中学民族精神月总结
- 经济发展战略与规划
- 一般过去时与过去进行时的用法比较
- 2010年全国国际货代考试国际货代业务练习试题(2)-中大网校
- 大湾文明示范矿井建设实施方案-11
- 第三届全国大学生工程训练综合能力竞赛命题及规则
- 苏教版小学语文五年级上册全册教案2
- 党员发展流程图
- 科学教案 小班科学 球宝宝真神奇
- 风电场事故预想汇总
- 小数乘除法计算题目1
- 全新版大学英语学习大厅综合教程第五单元F卷
- 揭秘主力坐庄流程 知己知彼百战不殆
- 2017年人体工学支架工作站行业分析报告
- 低压智能化管理的应用
- 二年级语文上册20月亮姑娘(1)教案湘教版
- 青海省2015年下半年电工进网作业许可考试题
- 俄语语法·句法(单部句和双部句)
- 2007-2010年北京高考生物真题及答案
- 西经宏观复习题