版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、魔板游戏Java 课程设计 设计(论文)题目: 魔板游戏 所 在 院: 信息工程学院 专 业 班 级: 学 生 姓 名 学 号: 指 导 教 师: 年 月 日Java 程序设计课程设计报告(2012)课程设计(论文)任务书课程设计(论文)任务书设计题目:设计题目:魔板游戏专业班级:专业班级: 学号:学号: 姓名:姓名: 主要内容主要内容设计一个 java 语言的魔板游戏,主要包含:魔板游戏主窗口模块、游戏魔板模块、魔板中“方块”定位模块。此游戏运用的是非常直观易操作的图形用户界面,通过对界面上的菜单、子菜单、以及单选按钮进行操作即可使本游戏顺利进行。编辑平台选用Eclipse 。其中用到了图形
2、用户界面、异常处理、类的构成以及继承等 java知识点。基本要求:基本要求:能够使所设计的游戏正常的运行,要保证无差错现象。而且使用户更加方便去操作,要有一定的功能来体现 java 语言的精简性、稳固性、兼容性强等特性。完成期限:完成期限: 2013 年 1 月 6 日 指导教师签名:指导教师签名: 评审小组负责人签名:评审小组负责人签名: Java 程序设计课程设计报告(2012)目目 录录1 概 述.11.1 课程设计目的 .11.2 课程设计内容 .12 系统需求分析.12.1 系统目标 .12.2 主体功能 .22.3 开发环境 .23 系统概要设计.23.1 系统的功能模块划分 .2
3、3.2 系统流程图 .54 系统详细设计 .65 测试.75.1 测试方案 .75.2 测试结果 .76 小结.8附录 .9附录 1 模块清单.9附录 1.1 PUZZLEFRAME 模块 .9附录 1.2 PUZZLEPAD 模块 .12附录 1.3 SQUAREPOINT 模块 .20附录 2 ECLIPSE 运行源程序清单.22参考文献 .32Java 程序设计课程设计报告(2012)1模板游戏的设计模板游戏的设计1 概 述 1.1 课程设计目的利用所学高级语言的语法特性,结合数据结构算法、java 语言使用规则、java 的基本应用等知识完成综合题目的设计和代码实现,并培养锻炼分析程序
4、、撰写报告等能力。1.2 课程设计内容(1)设计一款经典的智力游戏,魔板游戏。魔板由 3*3 或 4*4个格子组成。对于 3*3 魔板,在前 8 个格子里随即放置 8 个编号 1-8 的方块,最后一个格子是未放置方块的空格子;对于 4*4 的魔板,在前 15 格子里随即放置 15 编号 1-15 的方块,最后一个格子是未放置方块的空格子。(2)用鼠标单击任何与空格子水平或垂直相邻的方块可以把该方块移入空格子,而当前方块移动之前所在的格子成为空格子。通过不断地移动方块可以将方块一行一行地按数字顺序排好,例如,对于 3*3 格子组成的魔板,要求方块最后带有顺序排列,最后一格为空格。(3)魔板游戏也
5、可以使用图像来代替数字。例如,对于 4*4的魔板,将一幅图像分成 4*4 幅小图像,除去最后一幅小图像(图像的右下角),将其余各幅小图像打乱顺序后放在魔板方块上,最终目标是通过移动方块恢复原始图像(不包括图像的右下角)。2 系统需求分析2.1 系统目标设计 GUI 界面的魔板游戏程序。Java 程序设计课程设计报告(2012)22.2 主体功能这个程序定义了一些组件,工具栏按钮,文本区和菜单。魔板游戏程序设计通过PuzzleFrame.java、PuzzlePad.java、SquarePoint.java 3 个类来实现魔板游戏的整体功能。2.3 开发环境操作系统:Microsoft Win
6、dows 7开发工具:jdk 、Eclipse3 系统概要设计3.1 系统的功能模块划分在设计魔板游戏时,需要编写 3 个 java 源文件:PuzzleFrame.java、PuzzlePad.java、SquarePoint.java。魔板游戏除了需要编写的上述 3 个 Java 源文件所给出的类外,还需要 Java 系统提供的一些重要的类,如 JMenuItem、JButton 和JRadioButton 等类。3.1.13.1.1 PuzzleFrame.java 类模块PuzzleFrame 类负责创建魔板游戏的主窗口,该类含有 main 方法,程序从该类开始。PuzzleFrame
7、 类的成员变量中有 4 种重要类型的对象:PuzzlePad、JmenuItem、JRadioButton 和JButton。PuzzleFrame 类的主要成员的作用将在后面的详细设计中阐述,PuzzleFrame 类主要成员变量(属性)和主要方法如表 3-1、3-2 所示。成员变量描述变量类型名称魔板开始游戏的按钮选择玩法PuzzlePadJbuttonJradioButtonPuzzlePad开始数字玩法,图Java 程序设计课程设计报告(2012)3像玩法表表 3-13-1 PuzzleFrame.javava 主要成员变量(属性)主要成员变量(属性)名称功能备注PuzzleFrame
8、actionPerformedmain创建程序主窗口处理 ActionEvent 事件程序开始运行的方法构造方法接口方法表表 3-23-2 PuzzleFrame.java 主要方法主要方法3.1.23.1.2 PuzzlePad.java 类模块PuzzlePad 类创建的对象是 PuzzleFrame 类最重要的成员之一,代表“魔板” 。该类的成员变量中有 5 种重要类型的对象:Point、Block 和 Image。PuzzlePad 类主要成员变量(属性)和主要方法如表 3-3、3-4 所示。描述变量类型名称魔板中的行数和列数魔板中方块的宽和高魔板中二维点数组魔板中二维方块数组模板可能
9、用到的图像intintSquarePointJButtonImagerows,columswidth,heightpointblockimage表表 3-33-3 PuzzlePad.java a 主要成员变量(属性)主要成员变量(属性)Java 程序设计课程设计报告(2012)4名称功能备注PuzzlePad随机排列数字随机排列图像paintComponentactionPerformed创建魔板对象随机排列魔板中方块上的数字随机排列魔板中方块上的图像绘制图像处理 ActionEvent 事件构造方法接口方法表表 3-43-4 PuzzlePad.java 主要方法主要方法3.1.33.1.
10、3 SquarePoint.java 类模块SquarePoint 类负责创建确定位置的对象,使用 Point 对象可以确定 Block 对象在 PuzzlePad 对象中的位置,即确定“方块”在“魔板”中的位置。SquarePoint.java 类主要成员变量(属性)和主要方法如表 3-5、3-6 所示。描述变量类型名称判断点上是否有方块点上的方块对象booleanJButton有方块block表表 3-53-5 SquarePoint.java 主要成员变量(属性)主要成员变量(属性)名称功能备注SquarePointget 有方块set 有方块setBlockgetBlock创建“点”对
11、象判断点上是否有方块设置点上是否有方块在点上放置方块获取点上的方块构造方法表表 3-63-6 SquarePoint.java 主要方法主要方法Java 程序设计课程设计报告(2012)53.2 系统流程图根据对模板游戏的功能分析,设计得到魔板游戏总流程,如图 2-2所示:Java 程序设计课程设计报告(2012)6开始魔板游戏开始界面Switch改变游戏玩法选择数字玩法数字玩法图片玩法确定玩法退出结束YESNO图图 2-22-2 系统流程图系统流程图Java 程序设计课程设计报告(2012)74 系统详细设计4.1 运行效果1、将三个 java 文件合并为一个文件 PuzzleFrame.c
12、lass,在eclipse 编译环境下将此源代码输入。运行结果如下:图 4-1 数字玩法主界面本程序实现的游戏分为初级和高级模式,可以在单机选择级别之后进行选择级别模式。初级的话共分为 9 格魔板,一个为空,8个魔板上下左右自由移动,直至排列完成;高级的话分为 16 格魔板,一个为空,15 个魔板上下左右自由移动,直至排列完成。该游戏可分为数字玩法和图像玩法,在单击图像玩法或者数字玩法之后可以进行相应的玩法选择,选择之后单击开始。如果玩家想重新开Java 程序设计课程设计报告(2012)8始,只需要再次单击开始按钮即可。5 测试5.1 测试方案游戏难度级别设置为数字玩法,进行测试。在 Ecli
13、pse(实验)下测试 PuzzleFrame 结果如下:5.2 测试结果图 5-1 测试结果Java 程序设计课程设计报告(2012)96 小结通过本次实训,不但使我对 java 语言更加熟悉和认识,而且还让我对这门语言产生了更大的兴趣。这是一次实践性的学习,从中让我认识到了自己平时不能意识到的弱点和缺陷,尤其是在 java设计的结构和算法上面。这不但是一次课程设计而且还是一次带着学习的实验。希望自己能够今后能够对实验感兴趣,而且让自己的知识更加完善,更加全备,以应对一年后无论是工作还是实习中的需要。Java 程序设计课程设计报告(2012)10附附 录录附录附录 1 1 模块清单模块清单附录
14、 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; publi
15、c PuzzleFrame() bar=new JMenuBar(); fileMenu=new JMenu(魔板游戏); 初级=new JMenuItem(初级); 高级=new JMenuItem(高级); fileMenu.add(初级); fileMenu.add(高级);Java 程序设计课程设计报告(2012)11 bar.add(fileMenu); setJMenuBar(bar); 初级.addActionListener(this); 高级.addActionListener(this); 开始=new JButton(开始玩); 开始.addActionListener(
16、this); 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(图像玩法); pNo
17、rth.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();Java 程序设计课程设计报告(2012)12 public void actionPerformed(ActionEvent e) if(e.getSource
18、()=开始) if(数字玩法.isSelected() puzzlePad.随机排列数字(); else if(图像玩法.isSelected() 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);
19、 puzzlePad=new PuzzlePad(4,4,50,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate();Java 程序设计课程设计报告(2012)13 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.*;i
20、mport java.util.Vector;import java.awt.image.*;public class PuzzlePad extends JPanel implements ActionListener 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 blockI
21、mage; boolean 画图像=true; Java 程序设计课程设计报告(2012)14 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 JButtonrowsc
22、olums; point=new SquarePointrowscolums; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if(i=rows-1)&(j=colums-1) else Java 程序设计课程设计报告(2012)15 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+) p
23、ointij=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; int y=button.getBounds().y; int m=0,n=0;Java 程序设计课程设计报告(2012)16 for(int i=0
24、;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 有方块()=
25、false) point下n.setBlock(button,this); pointmn.set 有方块(false); else if(pointm左.get 有方块()=false) Java 程序设计课程设计报告(2012)17 pointm左.setBlock(button,this); pointmn.set 有方块(false); else if(pointm右.get 有方块()=false) pointm右.setBlock(button,this); pointmn.set 有方块(false); public void 随机排列数字() vector.removeAllE
26、lements(); for(int i=0;irows;i+) for(int j=0;j0) Java 程序设计课程设计报告(2012)18 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+; 画图像=false; repaint(); public void
27、随机排列图像() 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; Java 程序设计课程设计报告(2012)19 pg=new PixelGra
28、bber(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 ImageI
29、con(blockImagenum); b.setBorder(null); b.setText();Java 程序设计课程设计报告(2012)20 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.drawIm
30、age(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+colums*width,height+i*height); for(int j=0;jcolums;j+)Java 程序设计课程设计报告(2012)21 g.drawLine(colums*width+80+j*width,height, colums*
31、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
32、; public SquarePoint(int x,int y) this.x=x; this.y=y; public boolean get 有方块() Java 程序设计课程设计报告(2012)22 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.a
33、dd(block); block.setLocation(x,y); 有方块=true; con.validate(); public JButton getBlock() return block; Java 程序设计课程设计报告(2012)23附录附录 2 2 EclipseEclipse 运行源程序清单运行源程序清单import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;import java.awt.image.*;import javax.swing.JButton;
34、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(初级
35、); 高级=new JMenuItem(高级); fileMenu.add(初级); fileMenu.add(高级); bar.add(fileMenu); setJMenuBar(bar); 初级.addActionListener(this); 高级.addActionListener(this); 开始=new JButton(开始玩); 开始.addActionListener(this); group=new ButtonGroup(); 数字玩法=new JRadioButton(数字玩法,true); 图像玩法=new JRadioButton(图像玩法,false); gro
36、up.add(数字玩法); group.add(图像玩法);Java 程序设计课程设计报告(2012)24 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(); addWindowListene
37、r(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.随机排列图像(); else if(e.
38、getSource()=初级) con.remove(puzzlePad); puzzlePad=new PuzzlePad(3,3,50,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate(); Java 程序设计课程设计报告(2012)25 else if(e.getSource()=高级) con.remove(puzzlePad); puzzlePad=new PuzzlePad(4,4,50,50); con.add(puzzlePad,BorderLayout.CENTER); con
39、.validate(); this.validate(); public static void main(String args) new PuzzleFrame(); class PuzzlePad extends JPanel implements ActionListener int rows ,colums; int width,height; SquarePoint point; JButton block; Vector vector; int leftX=50,leftY=50; Image image=null; Toolkit tool=null; MediaTracker
40、 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;Java 程序设计课程设计报告(2012)26 height=h; tool=getToolkit(); try image=tool.createImage(气球.jpg); mt.addImage(image,1); mt.waitForAll(); catch(Exce
41、ption e) block=new JButtonrowscolums; point=new SquarePointrowscolums; for(int i=0;irows;i+) 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;jcolum
42、s;j+) pointij=new SquarePoint(50+j*width,50+i*height); if(i=rows-1)&(j=colums-1) else pointij.setBlock(blockij,this); Java 程序设计课程设计报告(2012)27 public void actionPerformed(ActionEvent e) JButton button=(JButton)e.getSource(); int x=button.getBounds().x; int y=button.getBounds().y; int m=0,n=0; for
43、(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有
44、方块()=false) point下n.setBlock(button,this); pointmn.set有方块(false); else if(pointm左.get有方块()=false) Java 程序设计课程设计报告(2012)28 pointm左.setBlock(button,this); pointmn.set有方块(false); else if(pointm右.get有方块()=false) pointm右.setBlock(button,this); pointmn.set有方块(false); public void 随机排列数字() vector.removeAllE
45、lements(); 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+; 画图像=false; repaint(); public void 随机排列图像()Java 程序设计课程设计报告(
46、2012)29 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); blockIma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南张家界高新区国有公司高层及中层管理人员招聘11人笔试参考题库附带答案详解(3卷合一版)
- 2025浙江丽水市松阳县建投集团下属子公司松阳县工程建设监理有限公司招聘监理员3人笔试参考题库附带答案详解(3卷)
- 2025年山东省环保发展集团生态有限公司权属企业职业经理人招聘笔试参考题库附带答案详解(3卷)
- 2025国铁工程监理(北京)有限公司第二批招聘5人笔试参考题库附带答案详解(3卷)
- 河北省2024年河北保定市公开招聘大学生农业职业经理人1000名笔试历年参考题库典型考点附带答案详解(3卷合一)
- 嵊泗县2024浙江舟山市嵊泗县面向大学毕业生退役士兵招聘事业单位人员1人笔试历年参考题库典型考点附带答案详解(3卷合一)
- 会计基础与财务管理实务面试题及答案
- 企业内部物资调度与配送协调员答案参考
- 初中天文社团:自制天文望远镜的观测精度与误差分析教学研究课题报告
- 反对霸凌课件
- 《企业估值方法》课件
- 皮影艺术资源引入初中美术教学的应用研究
- 贵州省生态文明教育读本(高年级) -教案(教学设计)
- 《财务会计-学习指导习题与实训》全书参考答案
- 2021大庆让胡路万达广场商业购物中心开业活动策划方案预算-67P
- 2022年福建翔安区社区专职工作者招聘考试真题
- 2023年考研考博-考博英语-湖南师范大学考试历年真题摘选含答案解析
- 英语电影的艺术与科学智慧树知到答案章节测试2023年中国海洋大学
- 2023-2024学年新疆维吾尔自治区乌鲁木齐市小学数学六年级上册期末模考测试题
- GB/T 15814.1-1995烟花爆竹药剂成分定性测定
- GB/T 11446.7-2013电子级水中痕量阴离子的离子色谱测试方法
评论
0/150
提交评论