魔板游戏Java课程设计报告.doc_第1页
魔板游戏Java课程设计报告.doc_第2页
魔板游戏Java课程设计报告.doc_第3页
魔板游戏Java课程设计报告.doc_第4页
魔板游戏Java课程设计报告.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

魔板游戏 GUI 应用开发(应用开发(JAVA)期末报告)期末报告 学学 号:号: 06 姓姓 名:马伟名:马伟 班班 级:级:Y122092 班班 老老 师:谢从华师:谢从华 魔板游戏 2 目目 录录 目 录2 1 概 述1 1.1 课程设计目的 1 1.2 课程设计内容 1 2 系统需求分析1 2.1 系统目标 1 2.2 主体功能 1 2.3 开发环境 2 3 系统概要设计2 3.1 系统的功能模块划分 2 3.2 系统流程图 4 4 系统详细设计 6 5 测试7 5.1 测试方案 7 5.2 测试结果 7 6 小结8 附 录.10 附录 1 源程序清单 10 附录 1 1.1PUZZLEFRAME 模块源程序 10 附录 1.2 PUZZLEPAD 模块源程序 .12 附录 1.3 SQUAREPOINT 类模块源程序 .19 魔板游戏 0 模板游戏的设计模板游戏的设计 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 幅小图像,除去最后一幅小图像(图像的右下角),将其余各幅小 图像打乱顺序后放在魔板方块上,最终目标是通过移动方块恢复原始图像(不包 括图像的右下角)。 2 系统需求分析 2.1 系统目标 设计 GUI 界面的魔板游戏程序。 2.2 主体功能 这个程序定义了一些组件,工具栏按钮,文本区和菜单。魔板游戏程序设计 通过 PuzzleFrame.java、PuzzlePad.java、SquarePoint.java 3 个类来实现魔板游戏的 整体功能。 2.3 开发环境 操作系统:Microsoft Windows 7 开发工具:jdk1.6.0_22 、MyEclipse8.5 Java 程序设计课程设计报告(2011) 1 3 系统概要设计 3.1 系统的功能模块划分 在设计魔板游戏时,需要编写 3 个 java 源文件: PuzzleFrame.java、PuzzlePad.java、SquarePoint.java。 魔板游戏除了需要编写的上述 3 个 Java 源文件所给出的类外,还需要 Java 系统提供的一些重要的类,如 JMenuItem、JButton 和 JRadioButton 等类。 3.1.23.1.2 PuzzleFrame.java 类模块 PuzzleFrame 类负责创建魔板游戏的主窗口,该类含有 main 方法,程序从该 类开始。PuzzleFrame 类的成员变量中有 4 种重要类型的对象: PuzzlePad、JmenuItem、JRadioButton 和 JButton。PuzzleFrame 类的主要成员的作 用将在后面的详细设计中阐述,PuzzleFrame 类主要成员变量(属性)和主要方法 如表 3-1、3-2 所示。 成员变量描述变量类型名称 魔板 开始游戏的按钮 选择玩法 PuzzlePad Jbutton JradioButton PuzzlePad 开始 数字玩法,图像玩法 表表 3-13-1 PuzzleFrame.javava 主要成员变量(属性)主要成员变量(属性) 名称功能备注 PuzzleFrame actionPerformed main 创建程序主窗口 处理 ActionEvent 事件 程序开始运行的方法 构造方法 接口方法 表表 3-23-2 PuzzleFrame.java 主要方法主要方法 3.1.33.1.3 PuzzlePad.java 类模块 PuzzlePad 类创建的对象是 PuzzleFrame 类最重要的成员之一,代表“魔板” 。 该类的成员变量中有 5 种重要类型的对象:Point、Block 和 Image。PuzzlePad 类 类主要成员变量(属性)和主要方法如表 3-3、3-4 所示。 魔板游戏 2 描述变量类型名称 魔板中的行数和列数 魔板中方块的宽和高 魔板中二维点数组 魔板中而为方块数组 模板可能用到的图像 int int SquarePoint JButton Image rows,colums width,height point block image 表表 3-33-3 PuzzlePad.java a 主要成员变量(属性)主要成员变量(属性) 名称功能备注 PuzzlePad 随机排列数字 随机排列图像 paintComponent actionPerformed 创建魔板对象 随机排列魔板中方块上的数字 随机排列魔板中方块上的图像 绘制图像 处理 ActionEvent 事件 构造方法 接口方法 表表 3-43-4 PuzzlePad.java 主要方法主要方法 3.1.43.1.4 SquarePoint.java 类模块 SquarePoint 类负责创建确定位置的对象,使用 Point 对象可以确定 Block 对象 在 PuzzlePad 对象中的位置,即确定“方块”在“魔板”中的位置。 SquarePoint.java 类主要成员变量(属性)和主要方法如表 3-5、3-6 所示。 描述变量类型名称 判断点上是否有方块 点上的方块对象 boolean JButton 有方块 block 表表 3-53-5 SquarePoint.java 主要成员变量(属性)主要成员变量(属性) 名称功能备注 SquarePoint get 有方块 set 有方块 setBlock getBlock 创建“点”对象 判断点上是否有方块 设置点上是否有方块 在点上放置方块 获取点上的方块 构造方法 表表 3-63-6 SquarePoint.java 主要方法主要方法 3.2 系统流程图 根据对模板游戏的功能分析,设计得到魔板游戏总流程,如图 2-2 所示: Java 程序设计课程设计报告(2011) 3 开始 魔板游戏开始界面 Switch 改变游戏玩法 选择数字玩法 数字玩法图片玩法 确定玩法 退出 结束 YES NO 图图 2-22-2 系统流程图系统流程图 4 系统详细设计 4.1 运行效果 1、将三个 java 文件和图像文件保存到一个文件夹中,例如 C:moban。将三 个 java 文件分别编译生成相应的字节码文件(class) 。然后,用 java 解释器运行主 类: 魔板游戏 4 E:Eclipse(实验)java PuzzleFrame 效果如图 4-1 所示。 图 4-1 数字玩法主界面 本程序实现的游戏分为初级和高级模式,可以在单机选择级别之后进行选择 级别模式。初级的话共分为 9 格魔板,一个为空,8 个魔板上下左右自由移动,直 至排列完成;高级的话分为 16 格魔板,一个为空,15 个魔板上下左右自由移动, 直至排列完成。该游戏可分为数字玩法和图像玩法,在单击图像玩法或者数字玩 法之后可以进行相应的玩法选择,选择之后单击开始。如果玩家想重新开始,只 需要再次单击开始按钮即可。 5 测试 5.1 测试方案 游戏难度级别设置为数字玩法,进行测试。用 java 解释器运行主类: E:Eclipse(实验)java PuzzleFrame Java 程序设计课程设计报告(2011) 5 5.2 测试结果 图 5-1 测试结果 6 小结 通过这次实验,使我在软件开发方面也累积了不少经验,对 java 的知识重要 性的认识更深了。通过设计过程的锻炼,自己分析问题和解决问题的能力都得到 了锻炼和提高,完善了自己的知识结构,加深了对所学知识的理解。 通过课程设计,我学习到不少的 JAVA 编程语言的知识,但由于自己的理论 知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题,甚 至错误。这些我会在以后的工作学习和实践中加以改进和提高。 魔板游戏 6 附附 录录 附录附录 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); Java 程序设计课程设计报告(2011) 7 group=new ButtonGroup(); 数字玩法=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() 魔板游戏 8 puzzlePad.随机排列图像(); 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 Java 程序设计课程设计报告(2011) 9 int rows ,colums; 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;i0) 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 程序设计课程设计报告(2011) 13 画图像=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;i0) 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) Java 程序设计课程设计报告(2011) 15 g.drawImage(image,colums*width+80,height,colums*width,rows*height,this); for(int i=0;irows;i+) g.setColor(Color.white); g.drawLine(colums*width+80,height+i*height, colums*width+80+colu

温馨提示

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

评论

0/150

提交评论