中国象棋棋谱设计Java课程设计实验报告分析(共22页).doc

上传人:飞****2 文档编号:6934060 上传时间:2022-02-15 格式:DOC 页数:22 大小:579.50KB
返回 下载 相关 举报
中国象棋棋谱设计Java课程设计实验报告分析(共22页).doc_第1页
第1页 / 共22页
中国象棋棋谱设计Java课程设计实验报告分析(共22页).doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《中国象棋棋谱设计Java课程设计实验报告分析(共22页).doc》由会员分享,可在线阅读,更多相关《中国象棋棋谱设计Java课程设计实验报告分析(共22页).doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上课程设计报告课程名称: Java程序设计 设计题目: 中国象棋棋谱设计 专 业 : 信息与计算科学 班 级 : 信111 姓 名 : 侯晓晓 学 号 : 指导教师: 邓全才 河北建筑工程学院数理系2014 年 5 月 5 日课程设计题目(问题)描述Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承,很好的融合了“面向对象”、“跨平台”和“编程简洁”等特性。随着Java语言的不断发展,它的应用前景将更为宽阔。本课程设计主要是使用Swing这个J

2、ava自带的图形开发工具实现中国象棋棋子及棋盘的绘制,并根据相应的象棋规则,可以设计棋谱,完成棋谱的保存和对已保存的棋谱的演示,方便现在爱棋人士对残局的收藏于研究,而且达到了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练的应用面向对象的思想和设计方法解决实际问题的能力的目的。本 组 成 员 情 况姓 名学号承 担 的 任 务成 绩侯晓晓棋盘界面设计,对弈规则的实现,保存下棋的步骤从而实现悔棋的实现,设计棋谱,完成保存棋谱教 师 评 语 签名: 一、本 组 设 计 的 功 能 描 述一、 基本界面设计:1.棋子的设计;(1)声明一个ChessPiece类,完

3、成各个棋子的外观设计;public class ChessPiece extends JLabel String name; Color backColor=null,foreColor; String 颜色类别=null; ChessBoard board=null; int width,height; public ChessPiece(String name,Color fc,Color bc,int width,int height,ChessBoard board) this.name=name; this.board=board; this.width=width; this.he

4、ight=height; foreColor=fc; backColor=bc; setSize(width,height); setBackground(bc); addMouseMotionListener(board); addMouseListener(board); public void paint(Graphics g) g.setColor(foreColor); g.fillOval(2,2,width-2,height-2); g.setColor(Color.white); g.setFont(new Font(隶书,Font.BOLD,28); g.drawString

5、(name,7,height-8); g.setColor(Color.yellow); g.drawOval(2,2,width-2,height-2); public int getWidth()return width; public int getHeight()return height; public String getName()return name; public Color 获取棋子颜色() return foreColor; public void set棋子类别(String 类别)颜色类别=类别; public String 棋子类别()return 颜色类别;(2

6、)实现各个棋子外观;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class ChessBoard extends JPanel implements MouseListener,MouseMotionListenerpublic ChessPoint point; public int unitWidth,unitHeight; int x轴长,y轴长; int x,y; boolean move=false; public String 红方颜色=红色,黑方颜色=黑色;ChessPiece 红车1

7、,红车2,红马1,红马2,红相1,红相2,红帅,红士1,红士2,红兵1,红兵2,红兵3,红兵4,红兵5,红炮1,红炮2;ChessPiece 黑车1,黑车2,黑马1,黑马2,黑将,黑士1,黑士2,黑卒1,黑卒2,黑卒3,黑卒4,黑卒5,黑象1,黑象2,黑炮1,黑炮2; int startX,startY; int startI,startJ; public boolean 红方走棋=true,黑方走棋=false; Rule rule=null; public MakeChessManual record=null; public ChessBoard(int w,int h,int r,in

8、t c) setLayout(null); addMouseListener(this); addMouseMotionListener(this); Color bc=getBackground(); unitWidth=w; unitHeight=h; x轴长=r; y轴长=c; point=new ChessPointr+1c+1; for(int i=1;i=r;i+) for(int j=1;j=c;j+)pointij=new ChessPoint(i*unitWidth,j*unitHeight,false); rule=new Rule(this,point); record=

9、new MakeChessManual(this,point) ; 红车1=new ChessPiece(车,Color.red,bc,w-4,h-4,this); 红车1.set棋子类别(红方颜色); /分别是红方各个棋子的设计 红兵5=new ChessPiece(兵,Color.red,bc,w-4,h-4,this); 红兵5.set棋子类别(红方颜色); 黑将=new ChessPiece(将,Color.blue,bc,w-4,h-4,this); 黑将.set棋子类别(黑方颜色); /分别是黑方各个棋子的设计 黑卒5=new ChessPiece(卒,Color.blue,bc,

10、w-4,h-4,this); 黑卒5.set棋子类别(黑方颜色); point110.setPiece(红车1,this); /红方的每个棋子放到与生活中棋盘位置一样 point97.setPiece(红兵5,this); point11.setPiece(黑车1,this); /黑方的每个棋子放到与生活中棋盘位置一样 point94.setPiece(黑卒5,this); (3)棋盘的设计: public void paintComponent(Graphics g) super.paintComponent(g); for(int j=1;j=y轴长;j+) g.drawLine(poin

11、t1j.x,point1j.y,pointx轴长j.x,pointx轴长j.y); for(int i=1;i=x轴长;i+) if(i!=1&i!=x轴长) g.drawLine(pointi1.x,pointi1.y,pointiy轴长-5.x,pointiy轴长-5.y); g.drawLine(pointiy轴长-4.x,pointiy轴长-4.y,pointiy轴长.x,pointiy轴长.y); else g.drawLine(pointi1.x,pointi1.y,pointiy轴长.x,pointiy轴长.y); g.drawLine(point41.x,point41.y,p

12、oint63.x,point63.y);g.drawLine(point61.x,point61.y,point43.x,point43.y); g.drawLine(point48.x,point48.y,point6y轴长.x,point6y轴长.y);g.drawLine(point4y轴长.x,point4y轴长.y,point68.x,point68.y); for(int i=1;i=x轴长;i+) g.drawString(+i,i*unitWidth,unitHeight/2);int j=1; for(char c=A;c=J;c+) g.drawString(+c,unit

13、Width/4,j*unitHeight);j+; (4)实现棋子按照生活中的对弈规则走棋的程序如下:public boolean movePieceRule(ChessPiece piece,int startI,int startJ,int endI,int endJ) this.piece=piece;this.startI=startI;this.startJ=startJ; this.endI=endI; this.endJ=endJ; int minI=Math.min(startI,endI); int maxI=Math.max(startI,endI); int minJ=M

14、ath.min(startJ,endJ); int maxJ=Math.max(startJ,endJ);boolean 可否走棋=false;if(piece.getName().equals(车)if(startI=endI) int j=0;for(j=minJ+1;j=maxJ-1;j+) if(pointstartIj.isPiece()可否走棋=false;break; if(j=maxJ)可否走棋=true;else if(startJ=endJ) int i=0;for(i=minI+1;i=maxI-1;i+) if(pointistartJ.isPiece()可否走棋=fa

15、lse;break; if(i=maxI)可否走棋=true;else可否走棋=false;else if(piece.getName().equals(马)./以及各个棋子规则的设计(5)实现棋子按对弈规则的移动并记录棋子移动的位置;界面如下: 代码如下 public void mousePressed(MouseEvent e) ChessPiece piece=null;Rectangle rect=null; if(e.getSource()=this)move=false; if(move=false) if(e.getSource() instanceof ChessPiece)

16、piece=(ChessPiece)e.getSource(); startX=piece.getBounds().x; startY=piece.getBounds().y; rect=piece.getBounds(); for(int i=1;i=x轴长;i+) for(int j=1;j=y轴长;j+) int x=pointij.getX(); int y=pointij.getY(); if(rect.contains(x,y) startI=i;startJ=j;break; public void mouseMoved(MouseEvent e) public void mou

17、seDragged(MouseEvent e) ChessPiece piece=null; if(e.getSource() instanceof ChessPiece) piece=(ChessPiece)e.getSource(); move=true; e=SwingUtilities.convertMouseEvent(piece,e,this); if(e.getSource()=this)if(move&piece!=null) x=e.getX(); y=e.getY(); if(红方走棋&(piece.棋子类别().equals(红方颜色)piece.setLocation(

18、x-piece.getWidth()/2,y-piece.getHeight()/2); if(黑方走棋&(piece.棋子类别().equals(黑方颜色) piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2); public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) 2

19、.图中中国象棋是个菜单包括制作棋谱、保存棋谱、演示棋谱三个菜单项(1)保存棋谱设计界面为:当你制作棋谱文件时可以选择路径保存棋谱文件(2)演示棋谱设计界面为:A可以从文件中选择你要演示的棋谱文件B选择文件后开始演示棋谱文件自动演示中可以按照你设计棋谱时的步骤一次生成保存的棋谱文件,也可以设置时间间隔,使得生成文件时一步和下一步的时间安装你设置的时间进行,也可以收手动操作,一步一步的进行。并在旁边记录棋子移动位置的记录设计actionPerformed事件的代码为:public void actionPerformed(ActionEvent e) if(e.getSource()=制作棋谱)

20、con.removeAll();保存棋谱.setEnabled(true); this.setTitle(制作棋谱.getText(); board=new ChessBoard(45,45,9,10); record=board.record; JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,board,record); split.setDividerSize(5); split.setDividerLocation(460); con.add(split,BorderLayout.CENTER); vali

21、date(); if(e.getSource()=保存棋谱) int state=fileChooser.showSaveDialog(null); File saveFile =fileChooser.getSelectedFile();if(saveFile!=null&state=JFileChooser.APPROVE_OPTION) tryFileOutputStream outOne=newFileOutputStream(saveFile); ObjectOutputStream outTwo=new ObjectOutputStream(outOne); outTwo.writ

22、eObject(record.获取棋谱() ; outOne.close(); outTwo.close(); catch(IOException event) if(e.getSource()=演示棋谱) con.removeAll();con.repaint();con.validate(); validate(); 保存棋谱.setEnabled(false); int state=fileChooser.showOpenDialog(null); File openFile =fileChooser.getSelectedFile(); if(openFile!=null&state=

23、JFileChooser.APPROVE_OPTION) tryFileInputStream inOne=new FileInputStream(openFile); ObjectInputStream inTwo=new ObjectInputStream(inOne); 棋谱=(LinkedList)inTwo.readObject() ; inOne.close();inTwo.close();ChessBoard board=new ChessBoard(45,45,9,10);demon=new Demon(board); demon.set棋谱(棋谱);con.add(demon

24、,BorderLayout.CENTER);con.validate(); validate();this.setTitle(演示棋谱.getText()+:+openFile); catch(Exception event)JLabel label=new JLabel(不是棋谱文件); label.setFont(new Font(隶书,Font.BOLD,60);label.setForeground(Color.red); label.setHorizontalAlignment(SwingConstants.CENTER);con.add(label,BorderLayout.CEN

25、TER);con.validate(); this.setTitle(没有打开棋谱); validate(); elseJLabel label=new JLabel(没有打开棋谱文件呢); label.setFont(new Font(隶书,Font.BOLD,50); label.setForeground(Color.pink); label.setHorizontalAlignment(SwingConstants.CENTER); con.add(label,BorderLayout.CENTER); con.validate(); this.setTitle(没有打开棋谱文件呢);

26、 validate(); 二、本 组 设 计 的 主 要 特 色主要特色分为三大点:1、 采用程序设计棋子与棋盘,使得棋子更加可观,棋子和生活中真实存在的棋子相仿,使得用户使用软件布置棋谱更加习惯,且有悔棋功能方便了用户使用在界面上有用户设计棋谱的步骤使得棋谱从一开始状态到现在状态的过程,满足用户的需要。2、 增加打开棋谱文件功能,增加设计棋谱的作用,增加设计过的棋谱的可读性,也可以修改已存的棋谱文件。3、 具有演示功能,演示棋局的形成,可以手动一步一步的观察现有棋局的形成,也可以让软件自动形成,还可以设置电脑自动形成的时间间隔,增加与用户之间的互动性,使得软件更加人性化。三、系 统 分 析

27、与 设 计功能简单图如下:自动操作手动操作制作棋谱保存棋谱演示棋谱中国象棋棋谱设计软件四、系 统 调 试 出 现 的 问 题 及 解 决 情 况由于能力不足,该程序在功能上还不够完善,以至于在调试过程中不能按照理想状态进行,例如:1 当两方有一方将(帅)被吃掉后,程序不能自动结束或提示游戏结束,但想到该程序并不是要进行两方对弈,而是要设计棋谱所以在能力实现范围内可以允许该事件发生;2 用户不能自动的将棋子删除,使得在摆棋谱过程中增加了工作量,必须从一开始进行,记录每一个棋子的行走过程,因为该程序给用户提供按照一定的思路设计防止其他非专业用户乱走和乱摆。五、系 统 运 行 报 告(测 试 的 结 果)1.系统运行情况:打开界面:菜单中制作棋谱:菜单中保存棋谱:打开保存文件菜单中演示棋谱:(1) 打开棋谱(2) 如果没有选择棋谱文件则会有如下:(3) 打开棋谱文件后:可以手动演示和自动演示,还可以设置演示时间间隔。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 教育教学

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁