资源描述
J Ja av va a 程程序序设设计计 课课程程设设计计报报告告XXX魔板游戏魔板游戏专业专业XXX学生姓名学生姓名XXX班级班级XXX学号学号XXX指导教师指导教师XXX完成日期完成日期XXX魔板游戏目目 录录目 录.21 概 述.11.1 课程设计目的 .11.2 课程设计内容 .12 系统需求分析.12.1 系统目标 .12.2 主体功能 .12.3 开发环境 .23 系统概要设计.23.1 系统的功能模块划分 .23.2 系统流程图 .44 系统详细设计 .65 测试.75.1 测试方案 .75.2 测试结果 .76 小结.8参考文献.9附 录.10附录 1 源程序清单 .10附录 1 1.1PUZZLEFRAME 模块源程序 .10附录 1.2 PUZZLEPAD 模块源程序 .12附录 1.3 SQUAREPOINT 类模块源程序 .19Java 程序设计课程设计报告(2010)1模板游戏的设计模板游戏的设计1 概 述 1.1 课程设计目的利用所学高级语言的语法特性,结合数据结构算法、网络知识、文件处理和数据库等知识完成综合题目的设计和代码实现,并培养锻炼分析程序、撰写报告等能力。1.2 课程设计内容(1)设计一款经典的智力游戏,魔板游戏。魔板由 3*3 或 4*4 个格子组成。对于 3*3 魔板,在前 8 个格子里随即放置 8 个编号 1-8 的方块,最后一个格子是未放置方块的空格子;对于 4*4 的魔板,在前 15 格子里随即放置 15 编号 1-15 的方块,最后一个格子是未放置方块的空格子。(2)用鼠标单击任何与空格子水平或垂直相邻的方块可以把该方块移入空格子,而当前方块移动之前所在的格子成为空格子。通过不断地移动方块可以将方块一行一行地按数字顺序排好,例如,对于 3*3 格子组成的魔板,要求方块最后排列的顺序如图 6.1 所示。(3)魔板游戏也可以使用图像来代替数字。例如,对于 4*4 的魔板,将一幅图像分成 4*4 幅小图像,除去最后一幅小图像(图像的右下角),将其余各幅小图像打乱顺序后放在魔板方块上,最终目标是通过移动方块恢复原始图像(不包括图像的右下角)。(4)魔板游戏分为两个级别,用户可以通过界面上提供的菜单来选择“初级”或“高级”两个级别。对于“初级”级别,魔板由 3*3 个格子组成;对于“高级”级别,魔板由 4*4 个格子组成 2 系统需求分析2.1 系统目标设计 GUI 界面的魔板游戏程序。2.2 主体功能这个程序定义了一些组件,工具栏按钮,文本区和菜单。魔板游戏程序设计通过 PuzzleFrame.java、PuzzlePad.java、SquarePoint.java 3 个类来实现魔板游戏的整体功能。魔板游戏22.3 开发环境操作系统:Microsoft Windows XP/7开发工具:jdk1.6.0_22 、UltraEdit3 系统概要设计3.1 系统的功能模块划分在设计魔板游戏时,需要编写 3 个 java 源文件:PuzzleFrame.java、PuzzlePad.java、SquarePoint.java。魔板游戏除了需要编写的上述 3 个 Java 源文件所给出的类外,还需要 Java系统提供的一些重要的类,如 JMenuItem、JButton 和 JRadioButton 等类。魔板游戏的总体功能图如图 3-1 所示。主界面开始选择级别选择图像数字玩法图像玩法初级高级图图 3-13-1 总体功能图总体功能图3.1.23.1.2 PuzzleFrame.java 类模块PuzzleFrame 类负责创建魔板游戏的主窗口,该类含有 main 方法,程序从该类开始。PuzzleFrame 类的成员变量中有 4 种重要类型的对象:PuzzlePad、JmenuItem、JRadioButton 和 JButton。PuzzleFrame 类的主要成员的作用将在后面的详细设计中阐述,PuzzleFrame 类主要成员变量(属性)和主要方法Java 程序设计课程设计报告(2010)3如表 3-1、3-2 所示。成员变量描述变量类型名称魔板开始游戏的按钮选择玩法选择级别PuzzlePadJbuttonJradioButtonJmenuItemPuzzlePad开始数字玩法,图像玩法初级,高级表表 3-13-1 PuzzleFrame.javava 主要成员变量(属性)主要成员变量(属性)名称功能备注PuzzleFrameactionPerformedmain创建程序主窗口处理 ActionEvent 事件程序开始运行的方法构造方法接口方法表表 3-23-2 PuzzleFrame.java 主要方法主要方法3.1.33.1.3 PuzzlePad.java 类模块PuzzlePad 类创建的对象是 PuzzleFrame 类最重要的成员之一,代表“魔板” 。该类的成员变量中有 5 种重要类型的对象:Point、Block 和 Image。PuzzlePad 类类主要成员变量(属性)和主要方法如表 3-3、3-4 所示。描述变量类型名称魔板中的行数和列数魔板中方块的宽和高魔板中二维点数组魔板中而为方块数组模板可能用到的图像intintSquarePointJButtonImagerows,columswidth,heightpointblockimage表表 3-33-3 PuzzlePad.java a 主要成员变量(属性)主要成员变量(属性)名称功能备注PuzzlePad随机排列数字随机排列图像paintComponentactionPerformed创建魔板对象随机排列魔板中方块上的数字随机排列魔板中方块上的图像绘制图像处理 ActionEvent 事件构造方法接口方法魔板游戏4表表 3-43-4 PuzzlePad.java 主要方法主要方法3.1.43.1.4 SquarePoint.java 类模块SquarePoint 类负责创建确定位置的对象,使用 Point 对象可以确定 Block 对象在 PuzzlePad 对象中的位置,即确定“方块”在“魔板”中的位置。SquarePoint.java 类主要成员变量(属性)和主要方法如表 3-5、3-6 所示。描述变量类型名称判断点上是否有方块点上的方块对象booleanJButton有方块block表表 3-53-5 SquarePoint.java 主要成员变量(属性)主要成员变量(属性)名称功能备注SquarePointget 有方块set 有方块setBlockgetBlock创建“点”对象判断点上是否有方块设置点上是否有方块在点上放置方块获取点上的方块构造方法表表 3-63-6 SquarePoint.java 主要方法主要方法3.2 系统流程图根据对模板游戏的功能分析,设计得到魔板游戏总流程,如图 2-2 所示:Java 程序设计课程设计报告(2010)5开始魔板游戏开始界面Switch改变游戏难度选初级初级高级重新放置方块改变游戏玩法选择数字玩法数字玩法图像玩法确定玩法退出结束是否是否图图 2-22-2 系统流程图系统流程图魔板游戏64 系统详细设计4.1 运行效果1、将三个 java 文件和图像文件保存到一个文件夹中,例如 C:moban。将三个 java 文件分别编译生成相应的字节码文件(class) 。然后,用 java 解释器运行主类:C:mobanjava PuzzleFrame 效果如图 4-1、4-2 所示。图 4-1 数字玩法主界面图 4-2 图像玩法主界面Java 程序设计课程设计报告(2010)7本程序实现的游戏分为初级和高级模式,可以在单机选择级别之后进行选择级别模式。初级的话共分为 9 格魔板,一个为空,8 个魔板上下左右自由移动,直至排列完成;高级的话分为 16 格魔板,一个为空,15 个魔板上下左右自由移动,直至排列完成。该游戏可分为数字玩法和图像玩法,在单击图像玩法或者数字玩法之后可以进行相应的玩法选择,选择之后单击开始。如果玩家想重新开始,只需要再次单击开始按钮即可。5 测试5.1 测试方案游戏难度级别设置为初级级别,进行测试。用 java 解释器运行主类:C:mobanjava PuzzleFrame5.2 测试结果图 5-1 测试结果魔板游戏86 小结这次我做的课题是“模板游戏”,通过这次的课程设计,我不仅拓宽了自己的知识面,还在实践过程中巩固和加深了自己所学的理论知识,使自己的技术素质和实践能力有了进一步的提高,同时我的专业水平也有了很大的进步。 同时,在软件开发方面也累积了不少经验,对 java 的知识重要性的认识更深了。通过设计过程的锻炼,自己分析问题和解决问题的能力都得到了锻炼和提高,完善了自己的知识结构,加深了对所学知识的理解。 这次课程设计完成后,体会颇多,在学与做的过程中,取长补短,不断学习新的知识,吸取经验,达到进步的目的。在学与做的过程中自身的努力以及相关图书资料的帮助,对 java 编程的理解也从能够使用提高到了熟练使用,对程序开发的一般过程和对数据库知识的运用也有了进一步的了解。 通过课程设计,我学习到不少的 JAVA 编程语言的知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题,甚至错误。这些我会在以后的工作学习和实践中加以改进和提高。 通过这次课程设计使我获得了很多东西。其一编程的重要步骤是分析。分析问题的本身和现实要求。分析过程中采用画流程图的方法能使我的思路特别清晰。拿到一个题目不要仅仅局限在一种思想上,要尽量的多尝试其他的做法,然后比较,集各家之所长,拿出最优秀的程序来。Java 程序设计课程设计报告(2010)9参考文献参考文献1耿祥义,张跃平. Java2 实用教程(第三版)M . 北京:清华大学出版社, 2006 2耿祥义. Java 课程设计(第三版)M . 北京:清华大学出版社, 20043张跃平.Java2 实用教程实验指导与习题解答(第三版)M. 北京:清华大学出版社, 2004魔板游戏10附附 录录附录附录 1 源程序清单源程序清单附录 1 1.1PuzzleFrame 模块源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PuzzleFrame extends JFrame implements ActionListener PuzzlePad puzzlePad; JButton 开始; JMenuBar bar; JMenu fileMenu; JMenuItem 初级,高级; JRadioButton 数字玩法,图像玩法; ButtonGroup group=null; Container con=null; public PuzzleFrame() bar=new JMenuBar(); fileMenu=new JMenu(魔板游戏); 初级=new JMenuItem(初级); 高级=new JMenuItem(高级); fileMenu.add(初级); fileMenu.add(高级); bar.add(fileMenu); setJMenuBar(bar); 初级.addActionListener(this); 高级.addActionListener(this); 开始=new JButton(开始玩); 开始.addActionListener(this); group=new ButtonGroup();Java 程序设计课程设计报告(2010)11 数字玩法=new JRadioButton(数字玩法,true); 图像玩法=new JRadioButton(图像玩法,false); group.add(数字玩法); group.add(图像玩法); puzzlePad=new PuzzlePad(3,3,50,50); con=getContentPane(); con.add(puzzlePad,BorderLayout.CENTER); JPanel pNorth=new JPanel(); pNorth.add(数字玩法); pNorth.add(图像玩法); pNorth.add(开始); con.add(pNorth,BorderLayout.NORTH); con.validate(); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(100,50,440,360); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=开始) if(数字玩法.isSelected() puzzlePad.随机排列数字(); else if(图像玩法.isSelected() puzzlePad.随机排列图像();魔板游戏12 else if(e.getSource()=初级) con.remove(puzzlePad); puzzlePad=new PuzzlePad(3,3,50,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate(); else if(e.getSource()=高级) con.remove(puzzlePad); puzzlePad=new PuzzlePad(4,4,50,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate(); public static void main(String args) new PuzzleFrame(); 附录 1.2 PuzzlePad 模块源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.util.Vector;import java.awt.image.*;public class PuzzlePad extends JPanel implements ActionListener int rows ,colums; Java 程序设计课程设计报告(2010)13 int width,height; SquarePoint point; JButton block; Vector vector; int leftX=50,leftY=50; Image image=null; Toolkit tool=null; MediaTracker mt; int 图像的宽,图像的高; Image blockImage; boolean 画图像=true; public PuzzlePad(int r,int c,int w,int h) setLayout(null); vector=new Vector(); rows=r; colums=c; width=w; height=h; tool=getToolkit(); try image=tool.createImage(气球.jpg); mt.addImage(image,1); mt.waitForAll(); catch(Exception e) block=new JButtonrowscolums; point=new SquarePointrowscolums; for(int i=0;irows;i+) 魔板游戏14 for(int j=0;jcolums;j+) if(i=rows-1)&(j=colums-1) else blockij=new JButton(); blockij.setSize(width,height); blockij.addActionListener(this); vector.add(blockij); for(int i=0;irows;i+) for(int j=0;jcolums;j+) pointij=new SquarePoint(50+j*width,50+i*height); if(i=rows-1)&(j=colums-1) else pointij.setBlock(blockij,this); public void actionPerformed(ActionEvent e) JButton button=(JButton)e.getSource(); int x=button.getBounds().x;Java 程序设计课程设计报告(2010)15 int y=button.getBounds().y; int m=0,n=0; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if(pointij.getX()=x&pointij.getY()=y) m=i; n=j; int 上=Math.max(0,m-1); int 下=Math.min(rows-1,m+1); int 左=Math.max(0,n-1); int 右=Math.min(colums-1,n+1); if(point上n.get 有方块()=false) point上n.setBlock(button,this); pointmn.set 有方块(false); else if(point下n.get 有方块()=false) point下n.setBlock(button,this); pointmn.set 有方块(false); else if(pointm左.get 有方块()=false) pointm左.setBlock(button,this); pointmn.set 有方块(false);魔板游戏16 else if(pointm右.get 有方块()=false) pointm右.setBlock(button,this); pointmn.set 有方块(false); public void 随机排列数字() vector.removeAllElements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(Math.random()*vector.size(); JButton b=(JButton)vector.elementAt(n); b.setText(+i); b.setIcon(null); b.setBorder(BorderFactory.createLineBorder(Color.blue,1); vector.remove(n); i+; Java 程序设计课程设计报告(2010)17 画图像=false; repaint(); public void 随机排列图像() try 图像的宽=image.getWidth(this); 图像的高=image.getHeight(this); int w=图像的宽/colums; int h=图像的高/rows; blockImage=new Imagerows*colums; int k=0; PixelGrabber pg=null; ImageProducer ip=null; for(int i=0;irows;i+) for(int j=0;jcolums;j+) int pixels= new intw*h; pg=new PixelGrabber(image,j*w,i*h,w,h,pixels,0,w); pg.grabPixels(); ip=new MemoryImageSource(w,h,pixels,0,w); blockImagek=tool.createImage(ip); k+; vector.removeAllElements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(Math.random()*vector.size(); JButton b=(JButton)vector.elementAt(n); b.setIcon(new ImageIcon(blockImagenum); b.setBorder(null); b.setText(); vector.remove(n); num+; 画图像=true; repaint(); catch(Exception ee) public void paintComponent(Graphics g) super.paintComponent(g); g.setColor(Color.black); g.fillRect(leftX,leftY,colums*width,rows*height); if(画图像=true) g.drawImage(image,colums*width+80,height,colums*width,rows*height,this);Java 程序设计课程设计报告(2010)19 for(int i=0;irows;i+) g.setColor(Color.white); g.drawLine(colums*width+80,height+i*height, colums*width+80+colums*width,height+i*height); for(int j=0;jcolums;j+) g.drawLine(colums*width+80+j*width,height, colums*width+80+j*width,height+rows*height); g.setColor(Color.black); g.fillRect(colums*width+80+(colums-1)*width, height+(rows-1)*height, width, height); 附录 1.3 SquarePoint 类模块源程序import java.awt.*;import javax.swing.JButton;public class SquarePoint int x,y; boolean 有方块; JButton block=null; Container con=null; public SquarePoint(int x,int y) this.x=x; this.y=y; 魔板游戏20 public boolean get 有方块() return 有方块; public void set 有方块(boolean boo) 有方块=boo; public int getX() return x; public int getY() return y; public void setBlock(JButton block,Container con) this.con=con; this.block=block; con.add(block); block.setLocation(x,y); 有方块=true; con.validate(); public JButton getBlock() return block;
展开阅读全文