魔板游戏课程设计.doc

上传人:精*** 文档编号:865466 上传时间:2023-10-05 格式:DOC 页数:24 大小:352.18KB
下载 相关 举报
魔板游戏课程设计.doc_第1页
第1页 / 共24页
魔板游戏课程设计.doc_第2页
第2页 / 共24页
魔板游戏课程设计.doc_第3页
第3页 / 共24页
魔板游戏课程设计.doc_第4页
第4页 / 共24页
魔板游戏课程设计.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、目 录目 录21 概 述11.1 课程设计目的1课程设计任务书12 需求分析22.1 设计目标22.2 主体功能12.3 开发环境13 概要设计23.1 系统的功能模块划分23.1.1PuzzleGame.java类模块23.1.4 Point.java类模块33.2 系统流程图44 详细设计65 测试75.1 测试方案75.2 测试结果76 小结8参考文献10附 录11附录1 源程序清单11附录1.1PuzzleGame模块源程序11附录1.2PuzzlePad模块源程序13附录1.3Block类模块源程序16附录1.4Point类模块源程序17附录1.5HandleImage类模块源程序1

2、7附录1.6HandleMove类模块源程序18附录1.7VertfySuccess类模块源程序20附录1.8Sound类模块源程序21附录1.8Sound类模块源程序213魔板游戏1 概 述 1.1 课程设计目的利用所学高级语言的语法特性,结合数据结构算法、网络知识、文件处理和数据库等知识完成综合题目的设计和代码实现,并培养锻炼分析程序、撰写报告等能力。1.2课程设计任务书学 院信息学院专 业电子信息工程学生姓名吴才奇班级学号1103030429课程设计题目基于Java的魔板游戏软件设计实践教学要求与任务:采用java技术设计魔板游戏软件,设计要求如下:(1) 魔板由3*3或4*4个格子组成

3、。对于3*3魔板,在前8个格子里随机放置8个编号18的方块,最后一个格子是未放置方块的空格子;对于4*4的魔板,在前15个格子里随机放置15个编号115的方块,最后一个格子是未放置方块的空格子。(2) 用鼠标单击任何与格子水平或垂直相邻的方块就可以把该方块移入空格子,而当前方块移动之前所在的格子成为空格子。通过不断地移动方块可以将方块一行一行地按数顺序排好。(3) 魔板游戏也可以使用图像来代替数字。例如,对于3*3的魔板,将一幅图像分成3*3个小图像,除去最后一幅小图像(图像的右下角),将其余的各幅小图像打乱顺序后放在魔板的方块上,最终目标是通过移动方块回复原始图像(不包括图像的右下角)。(4

4、) 当用户按要求排列好方块后,程序弹出对话框,提示用户成功的消息。(5) 模板游戏分为两个级别,用户可以通过界面上提供的菜单来选择“初级”或“高级”两个级别。对于“初级”级别,魔板由3*3个格子组成;对于“高级”级别,魔板由4*4个格子组成。“模板游戏”提供一幅默认图像,用户可以使用该图像来玩魔板游戏。用户也可以使界面提供的菜单选择一幅新图像,然后使用这个新的图像来玩魔板游戏。 工作计划与进度安排: 第18周:布置课程设计任务,查阅资料,分组设计,程序调试。第19周:程序调试,编写课程设计报告,验收,答辩。指导教师: 2012年 月 日专业负责人: 2012年 月 日学院教学副院长: 2012

5、年 月 日2 需求分析2.1 设计目标熟悉Java语言和NetBeansIDE6.8等开发工具。2.2 主体功能这个程序定义了一些组件,工具栏按钮,文本区和菜单。魔板游戏程序设计通过PuzzleGame.java、PuzzlePad.java、Point.java、Block.java、HandleImage.java、VerifySuccsee.java和HandleMove.java7个类来实现魔板游戏的整体功能。2.3 开发环境操作系统:Microsoft Windows 98/2000/XP硬件要求:处理器:2.6 GHz Intel Pentium IV 或具有同等性能的处理器内存:

6、2 GB硬盘空间:1 GB 可用硬盘空 间开发工具:NetBeans IDE 6.83 概要设计3.1 系统的功能模块划分在设计魔板游戏时,需要编写7个java源文件:PuzzleGame.java、PuzzlePad.java、Point.java、Block.java、HandleImage.java、VerifySuccsee.java和HandleMove.java。魔板游戏除了需要编写的上述7个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JMenuItem、JButton和JRadioButton等类。魔板游戏所用到的一些重要的类以及之间的组合关系如图1.1所

7、示。PuzzleGameJMenuPuzzlePadJRadioButtonJButtonPointBlockHandleMoveImageHandleImageVerifySuccess图1-1 类之间的组合关系3.1.1PuzzleGame.java类模块 PuzzleGame类负责创建魔板游戏的主窗口,该类含有main方法,程序从该类开始。PuzzleGame类的成员变量中有4种重要类型的对象:PuzzlePad、JMenu、JRadioButton和JButton。PuzzleGame类的主要成员的作用将在后面的详细设计中阐述,PuzzleGame类创建的窗口以及其中的主要成员对象如图

8、6.3所示。3.1.2 PuzzlePad.java类模块PuzzlePad类创建的对象是PuzzleGame类最重要的成员之一,代表“魔板”。该类的成员变量中有5种重要类型的对象:Point、Block、HandleMove、HandleImage和Image。PuzzlePad类的主要成员的作用将在后面的详细设计中阐述。3.1.3 Block.java类模块Block类是JTextField的一个子类,创建的对象是PuzzlePad类的重要成员之一,用来表示“魔板”中的“方块”。3.1.4 Point.java类模块Point类负责创建确定位置的对象,使用Point对象可以确定Block对

9、象在PuzzlePad对象中的位置,即确定“方块”在“魔板”中的位置。3.1.5 HandleImage.java类模块HandImage类所创建的对象负责处理鼠标事件。3.1.6 HandleMove.java类模块HandMove类所创建的对象负责处理鼠标事件。3.1.7 VerifySuccess.java类模块VerifySuccess类所创建的对象负责验证用户是否按要求成功排列魔板中的方块。3.2 系统流程图主界面开始选择级别选择图像数字玩法图像玩法初级高级使用一幅新图像使用默认图像图2-1 总体功能图根据对模板游戏的功能分析,设计得到魔板游戏总流程,如图2-2所示:开始魔板游戏开始

10、界面Switch开始游戏计时器计时开始移动方块改变游戏难度完成游戏选初级初级高级重新放置方块改变游戏玩法选择数字玩法数字玩法图像玩法选择一幅新图像选择默认图像确定玩法退出结束是否是否 图2-2 总体流程图4 详细设计本程序实现的游戏分为初级和高级模式,可以在单机选择级别之后进行选择级别模式。初级的话共分为9格魔板一个为空,8个魔板上下左右自由移动,直至排列完成。该游戏初始默认为数字玩法,不过在单击图像玩法之后可以进行图像的选择也可选择默认图像(dog.jpg)单击开始,如果图像不能立刻显示,那么再单击一次就会出现图像魔板了。如图3.1所示:图3-1初级的图像玩法图如果想要选择了一幅新的图像,只

11、要单击选择图像中的选择一幅新图像就可出现如下界面,如图3.3:图3-2图像选择界面在选择了新图像之后单击开始按钮,就会有一张新的图片替换了刚刚所使用的默认图像了。此时如果再选择高级的模式图像就会被分成16快随即小魔板,如图3.4所示:图3-3高级的图像玩法图由上图的底部可以看出还有一个计时器功能,当你开始移动魔板是它就开始计时直至完成魔板的正确排列。5 测试5.1 测试方案我以最简单的方案初级的数字玩法进行了测试如图4.1:图4-1测试方案图5.2 测试结果点击开始后,经过了109秒的努力,我终于把魔板游戏给测试完成了。我亲自验证了这神奇的一刻,如图4.2:图4-2测试结果图这就是魔板游戏完成

12、后的界面,系统会提示你成功了!以表示祝贺,并且底部还会有你完成本次游戏所用的时间。6 小结这学期我们专业课开设了Java语言,初步了解java语言的特点及相关知识,虽然之学了很短一段时间,但还是在其中学到很多东西的。这学期老师通知要做java课程设计之后,我就到图书馆查阅资料,借相关的书籍,在网上查找了一些资料开始了我的课程设计之旅。在制作过程中,遇到了自己从所未有的困难,由于java学的不是那么透彻,因此在分析程序代码必然会遇到很大的困扰。其中遇到了一个问题,就是使用图像玩法的时候选择图片选不到,一开始不知道是什么问题但是通过翻阅书籍,上网查阅资料,同学之间的相互讨论,原来是格式不对,它只能

13、选择一些小规模的图片如dog.jpg等格式而电脑的图片都是JPEG格式,了解这点之后这些问题也就迎刃而解了。但重要的这不是最困难的地方,难得地方在运行程序上面,当把代码输入完之后,无法运行,经受着“百般折磨”后,各种思考,才把这部分解决了,确实很不容易,还得归功于同学的团结。这次的课程设计为我提供了一次锻炼的机会,经过开发这个系统,这不仅仅是一次课程设计,不仅仅是学会了一门开发语言,更重要的是在学习的过程中,所有的问题要自已去面对,有问题也只有靠自已去解决,在学习和解决这些困难的过程中提高了我学习的能力、解决问题的能力和实际工作的能力,学到了许多书本以外的知识经历过这次以后,我对前面学过的许多

14、课程有了更为深刻的理解,也是我对这三年所学的东西的一个综合体现。然而这次设计让我感受颇深,让我真正体会到了在整个过程给我带来的无奈与快乐。看来学好java这门语言真的要花上很大的努力,而且它的用处太大了。回想这两周所经历的,自己所收获到的远远超越自己受到的痛苦,我体会了“不经历风雨怎么见彩虹”的真正内涵,这次课程设计让我学到了更多东西,我会更加努力的去学习java语言以及其他语言,更加充实自己的大脑,使自己更加丰富,将来成为一个有用的人,为社会作贡献的人。21参考文献1耿祥义,张跃平. Java2实用教程(第三版)M . 北京:清华大学出版社, 2006 2耿祥义. Java课程设计(第三版)

15、M . 北京:清华大学出版社, 20043张跃平.Java2实用教程实验指导与习题解答(第三版)M. 北京:清华大学出版社, 2004附 录附录1 源程序清单附录1.1PuzzleGame模块源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import javax.swing.filechooser.*;public class PuzzleGame extends JFrame implements ActionListener PuzzlePad puzzlePad; JM

16、enuBar bar; JMenu gradeMenu,choiceImage;JMenu yinyue; JMenuItem oneGrade,twoGrade,newImage,defaultImage; JMenuItem bofang; JRadioButton digitPlay,imagePlay; ButtonGroup group=null; JButton startButton; Image image; Toolkit tool; public PuzzleGame() tool=getToolkit(); bar=new JMenuBar(); gradeMenu=ne

17、w JMenu(选择级别);yinyue=new JMenu(音乐); choiceImage=new JMenu(选择图像); oneGrade=new JMenuItem(初级); twoGrade=new JMenuItem(高级); newImage=new JMenuItem(选择一幅新图像); defaultImage=new JMenuItem(使用默认图像); bofang=new JMenuItem(播放);yinyue.add(bofang); gradeMenu.add(oneGrade); gradeMenu.add(twoGrade); choiceImage.add

18、(newImage); choiceImage.add(defaultImage); bar.add(gradeMenu);bar.add(yinyue); bar.add(choiceImage); setJMenuBar(bar);bofang.addActionListener(this); oneGrade.addActionListener(this); twoGrade.addActionListener(this); newImage.addActionListener(this); defaultImage.addActionListener(this); startButto

19、n=new JButton(开始); startButton.addActionListener(this); group=new ButtonGroup(); digitPlay=new JRadioButton(数字玩法,true); imagePlay=new JRadioButton(图像玩法,false); group.add(digitPlay); group.add(imagePlay); puzzlePad=new PuzzlePad(); puzzlePad.setGrade(1); puzzlePad.setIsDigitPlay(); add(puzzlePad,Bord

20、erLayout.CENTER); JPanel pNorth=new JPanel(); pNorth.add(digitPlay); pNorth.add(imagePlay); pNorth.add(startButton); pNorth.add(new JLabel(如果图像不能立刻显示,请再单击一次按扭); add(pNorth,BorderLayout.NORTH); add(puzzlePad.getHandleMove(),BorderLayout.SOUTH); validate(); setVisible(true); setBounds(100,50,550,380);

21、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try image=tool.createImage(new File(dog.jpg).toURI().toURL(); puzzlePad.setImage(image); catch(Exception exp) public void actionPerformed(ActionEvent e) if(e.getSource()=startButton) if(digitPlay.isSelected() puzzlePad.setIsDigitPlay(); else if(imageP

22、lay.isSelected() puzzlePad.setImage(image); puzzlePad.setIsImagePlay(); else if(e.getSource()=bofang)Sound s=new Sound(D:wcqfu.wav); s.start(); else if(e.getSource()=oneGrade) puzzlePad.setGrade(1); else if(e.getSource()=twoGrade) puzzlePad.setGrade(2); else if(e.getSource()=newImage) FileNameExtens

23、ionFilter filter = new FileNameExtensionFilter( JPG & GIF Images, jpg, gif); JFileChooser chooser=new JFileChooser(); chooser.setFileFilter(filter); int state=chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) try image=tool.createImag

24、e(file.toURI().toURL(); puzzlePad.setImage(image); catch(Exception exp) else if(e.getSource()=defaultImage) try image=tool.createImage(new File(dog.jpg).toURI().toURL(); puzzlePad.setImage(image); catch(Exception exp) public static void main(String args) new PuzzleGame(); 附录1.2PuzzlePad模块源程序import j

25、avax.swing.*;import java.io.*;import java.util.*;import java.awt.*;public class PuzzlePad extends JPanel Point point; Block block; int distance = 56,grade,m = 3,n =3; HandleMove handleMove; HandleImage handleImage; VerifySuccess verifySuccess; Image image; boolean isDigitPlay; public PuzzlePad() set

26、Background(Color.gray); setLayout(null); handleMove = new HandleMove(); handleMove.initSpendTime(); handleImage = new HandleImage(); verifySuccess = new VerifySuccess(); handleMove.setVerifySuccess(verifySuccess); public HandleMove getHandleMove() return handleMove; public void setImage(Image image)

27、 this.image = image; public void setGrade(int grade) this.grade = grade; if(grade = 1) m = 4; n = 4; else if(grade = 2) m = 5; n = 5; public int getGrade() return grade; private void needInit() handleMove.initSpendTime(); removeAll(); point = new Pointmn; block = new Blockmn; int Hspace = distance,V

28、space = distance; for (int i = 0;im;i+) for(int j = 0;jn;j+) pointij = new Point(Hspace,Vspace); Hspace = Hspace + distance; Hspace = distance; Vspace = Vspace + distance; handleMove.setPoint(point); verifySuccess.setPoint(point); handleMove.setVerifySuccess(verifySuccess); int k = 0; for(int i = 0;

29、i m;i+) if(im-1) for(int j =0;jn;j+) blockij = new Block(); blockij.addMouseListener(handleMove); k+; else for(int j = 0;jn-1;j+) blockij = new Block(); blockij.addMouseListener(handleMove); k+; for(int i = 0;i m;i+) if(i m-1) for(int j = 0;j n;j+) add(blockij); blockij.setSize(distance,distance); b

30、lockij.setLocation(pointij.getX(),pointij.getY(); blockij.setAtPoint(pointij); pointij.setBlock(blockij); pointij.setHaveBlock(true); else for(int j = 0; j n-1;j+) add(blockij); blockij.setSize(distance,distance); blockij.setLocation(pointij.getX(),pointij.getY(); blockij.setAtPoint(pointij); pointi

31、j.setBlock(blockij); pointij.setHaveBlock(true); public void setIsDigitPlay() needInit(); isDigitPlay = true; ArrayListnumberList =new ArrayList(); for(int k =0;km*n-1;k+) numberList.add(k+1); Objectobject = numberList.toArray(); verifySuccess.setObject(object); Collections.shuffle(numberList); int

32、k = 0; for(int i =0; im;i+) if(im-1) for(int j= 0;jn;j+) blockij.setObject(numberList.get(k); k+; else for(int j = 0;j n-1;j+) blockij.setObject(numberList.get(k); k+; repaint(); public void setIsImagePlay() needInit(); isDigitPlay = false; ArrayListimageList = new ArrayList(); Image blockImage = ha

33、ndleImage.getImages(image,m,n); for(int k=0;kblockImage.length-1;k+) imageList.add(blockImagek); Objectobject = imageList.toArray(); verifySuccess.setObject(object); Collections.shuffle(imageList); int k = 0; for(int i = 0;im;i+) if(im-1) for(int j = 0;jn;j+) blockij.setObject(imageList.get(k); bloc

34、kij.repaint(); blockij.setBorder(null); k+; else for(int j=0;jn-1;j+) blockij.setObject(imageList.get(k); blockij.repaint(); blockij.setBorder(null); k+; repaint(); public void paintComponent(Graphics g) super.paintComponent(g); if(isDigitPlay = false) try g.drawImage(image,20+distance*(m+1),point00

35、.getY(), distance*m,distance*n,this); catch(Exception exp) 附录1.3Block类模块源程序import javax.swing.*;import java.awt.*;public class Block extends JTextField Point point; Object object; Block() setEditable(false); setHorizontalAlignment(JTextField.CENTER); setForeground(Color.blue); public void setAtPoint(Point p) point=p; public Point getAtPoint() return point; public void setObject(Object object) this.object=object; if(object instanceof Integer) Integer number=(Integer)object; setText(+number.intValue(); else if(object instanceof Image) repaint(); public Object getOb

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

当前位置:首页 > 技术资料 > 课程设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922