JAVA中国象棋打谱系统课程设计报告.doc_第1页
JAVA中国象棋打谱系统课程设计报告.doc_第2页
JAVA中国象棋打谱系统课程设计报告.doc_第3页
JAVA中国象棋打谱系统课程设计报告.doc_第4页
JAVA中国象棋打谱系统课程设计报告.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

课 程 设 计设计题目:中国象棋打谱系统 学生姓名:郑毅 专业班级:信息管12-2班 指导教师:伍章俊 2014年7月8日目录一、本组课题及程序功能要求- 3 -二、系统需求分析- 3 -2.1 系统名称- 3 -2.2 系统介绍- 3 -三、系统总体设计- 3 -3.1系统功能结构图- 3 -3.2 具体功能实现- 4 -11、CanRule.java- 6 -四、程序代码设计- 6 -ChinaChess- 7 -ChessBoard- 10 -Point- 16 -ChessBox- 17 -InitPieceLocation- 21 -InitCanju- 28 -HandleMouse- 31 -MoveRule- 38 -DemoManulDialog- 43 -CanRule- 50 -五、系统效果演示- 54 -5.1效果图- 54 -5.2时序图- 55 -六、设计体会- 55 -附件一:课程设计小组人员任务分配- 56 -附件二:合肥工业大学课程设计任务书- 57 -一、本组课题及程序功能要求课题名称:Java中国象棋打谱系统改进要求:对中国象棋打谱系统进行改进1) 添加音乐播放功能模块,实现当玩家托起或放下棋子 时,播放一段简短音乐。2) 处理残局是添加一定规则:“士”、“将”必须放在田字格中。二、系统需求分析2.1 系统名称 中国象棋打谱系统2.2 系统介绍中国象棋打谱系统采用的是JavaSE中的基本技术可以实现简单的游戏操作,如下: (1)、制作实战棋谱 (2)、制作残局棋谱 (3)、在移动棋子过程中播放简短音乐三、系统总体设计3.1系统功能结构图制作实战棋谱演示实战棋谱中国象棋演示棋谱演示实战棋谱制作残局棋谱3.2 具体功能实现1、ChinaChess.java(打谱系统的主类) ChinaChess类负责创建中国象棋打谱系统的主窗口,该类含有main方法,程序从该类开始执行。ChinaChess类的成员变量中有5种重要类型的对象:Jmenu,ChessBoard,DemoManulDialog,JtextField,Jbutton。2、ChessBoard.javaChessBoard类创建的对象是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对象就会按着实战开局将棋子摆放在棋盘中的对弈点上;对于制作残局棋谱,InitPieceLocation对象就将棋子摆在棋盒中。7、InitCanju.java InitCanju类创建的对象是ChessBoard的重要成员之一,当用户需要制作残局棋谱时,棋盘的开局要由用户来确定,InitCanju类创建的对象允许用户将棋盒中的棋子拖入棋盘中的对弈点上,以便摆放好残局的开局。并添加一定规则8、HandleMouse.java HandleMouse类创建的对象是ChessBoard的重要成员之一,当用户开始对弈时,HandleMouse类创建的对象负责处理鼠标事件,以便用户拖动棋子走棋。并且在拖动按下或释放棋子时发出声音9、MoveRule.java MoveRule类创建的对象是ChessBoard的重要成员之一,当用户拖动棋子时,MoveRule类创建的对象负责验证用户走法是否符合象棋规则。10、DemoManulDialog.javaDemoManulDialog类创建的对象是ChessBoard的重要成员之一。DemoManulDialog类创建的对象负责演示棋谱。11、CanRule.javaCanRule类创建的对象负责在创建残局的时候,控制棋子的摆放位置,如像必须放在田字格中,将士必须在米子格中。四、程序代码设计ChinaChessimport 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(棋谱); 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(细黑,Font.PLAIN,15); /设置当前字体 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, 请单击菜单,选择制作棋谱的方式或演示已有的棋谱,提示对话框, 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(); /文件对话框,打开或保存一个文件 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(); ChessBoardimport 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; Point playPoint; String redName=帅,士,士,相,相,马,马,车,车,炮,炮, 兵,兵,兵,兵,兵; String blackName=将,仕,仕,象,象,馬,馬,車,車,炮,炮, 卒,卒,卒,卒,卒; ChessPiece redPiece; ChessPiece blackPiece; ChessBox redChessBox,blackChessBox; InitPieceLocation initPieceLocation; InitCanju initCanju; HandleMouse handleMouse; ArrayList step; JButton cancel; public ChessBoard() setLayout(null); step=new ArrayList(); initPointAndPiece(); redChessBox=new ChessBox(distance,11,7); blackChessBox=new ChessBox(distance,11,1); for(int i=0;iredPiece.length;i+) redChessBox.putPieceToBox(redPiecei); for(int i=0;iblackPiece.length;i+) blackChessBox.putPieceToBox(blackPiecei); 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); cancel.addActionListener(this); private void initPointAndPiece() removeAll(); playPoint=new Pointmn; int Hspace=distance,Vspace=distance; for(int i=0;im;i+) for(int j=0;jn;j+) playPointij=new Point(distance+Hspace,Vspace); playPointij.setIsPlayPoint(true); Hspace=Hspace+distance; Hspace=distance; Vspace=Vspace+distance; redPiece=new ChessPieceredName.length; int size=distance; for(int i=0;iredPiece.length;i+) redPiecei=new ChessPiece(); add(redPiecei,JLayeredPane.PALETTE_LAYER); redPiecei.setSize(size,size); redPiecei.setIsRed(true); redPiecei.setName(redNamei); redPiecei.repaint(); blackPiece=new ChessPieceblackName.length; for(int i=0;iblackPiece.length;i+) blackPiecei=new ChessPiece(); add(blackPiecei,JLayeredPane.PALETTE_LAYER); blackPiecei.setSize(size,size); blackPiecei.setIsBlack(true); blackPiecei.setName(blackNamei); blackPiecei.repaint(); public ArrayList getStep() return step; public Point getPoint() return playPoint; public void setShizhanPlay() handleMouse.setRedFirstMove(true); handleMouse.initStep(); cancel.setVisible(false); initPieceLocation.putAllPieceToPlayChessArea(); for(int i=0;iredPiece.length;i+) MouseListener listener=redPiecei.getMouseListeners(); for(int k=0;klistener.length;k+) redPiecei.removeMouseListener(listenerk); listener=blackPiecei.getMouseListeners(); for(int k=0;klistener.length;k+) blackPiecei.removeMouseListener(listenerk); MouseMotionListener mr=redPiecei.getMouseMotionListeners(); for(int k=0;kmr.length;k+) redPiecei.removeMouseMotionListener(mrk); mr=blackPiecei.getMouseMotionListeners(); for(int k=0;kmr.length;k+) blackPiecei.removeMouseMotionListener(mrk); public void setCanjuPlay() handleMouse.setRedFirstMove(true); handleMouse.initStep(); cancel.setVisible(false); initPieceLocation.putAllPieceToChessBox(); for(int i=0;iredPiece.length;i+) MouseListener listener=redPiecei.getMouseListeners(); for(int k=0;klistener.length;k+) redPiecei.removeMouseListener(listenerk); listener=blackPiecei.getMouseListeners(); for(int k=0;klistener.length;k+) blackPiecei.removeMouseListener(listenerk); MouseMotionListener mr=redPiecei.getMouseMotionListeners(); for(int k=0;kmr.length;k+) redPiecei.removeMouseMotionListener(mrk); mr=blackPiecei.getMouseMotionListeners(); for(int k=0;kmr.length;k+) blackPiecei.removeMouseMotionListener(mrk); redPiecei.addMouseListener(initCanju); blackPiecei.addMouseListener(initCanju); redPiecei.addMouseMotionListener(initCanju); blackPiecei.addMouseMotionListener(initCanju); public void startMakeManul() cancel.setVisible(true); handleMouse.setRedFirstMove(true); handleMouse.initStep(); for(int i=0;iredPiece.length;i+) MouseListener listener=redPiecei.getMouseListeners(); for(int k=0;klistener.length;k+) redPiecei.removeMouseListener(listenerk); listener=blackPiecei.getMouseListeners(); for(int k=0;klistener.length;k+) blackPiecei.removeMouseListener(listenerk); MouseMotionListener mr=redPiecei.getMouseMotionListeners(); for(int k=0;kmr.length;k+) redPiecei.removeMouseMotionListener(mrk); mr=blackPiecei.getMouseMotionListeners(); for(int k=0;kmr.length;k+) blackPiecei.removeMouseMotionListener(mrk); redPiecei.addMouseListener(handleMouse); blackPiecei.addMouseListener(handleMouse); redPiecei.addMouseMotionListener(handleMouse); blackPiecei.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(playPoint00.x,playPoint00.y,8*distance,9*distance); g.setColor(Color.black); for(int i=0;i=m-1;i+) g.drawLine(playPointi0.x,playPointi0.y, playPointin-1.x,playPointin-1.y); for(int j=0;j0&j0)/绘制左上方的标志 g.drawL

温馨提示

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

评论

0/150

提交评论