ImageVerifierCode 换一换
格式:DOC , 页数:24 ,大小:352.18KB ,
资源ID:865466      下载积分:10 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-865466.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(魔板游戏课程设计.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

魔板游戏课程设计.doc

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