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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

魔板游戏课程设计报告.docx

1、魔板游戏课程设计报告Java与面向对象技术课程设计报告( 2010 - 2011 年度第 1 学期)魔板游戏 专业计算机科学与应用学生姓名蒋晓勇班级BM计算机071学号0751401127指导教师徐 静完成日期2010年9月 14日魔板游戏1 概 述 1.1 课程设计目的利用所学高级语言的语法特性,结合数据结构算法、网络知识、文件处理和数据库等知识完成综合题目的设计和代码实现,并培养锻炼分析程序、撰写报告等能力。1.2课程设计内容(1)设计一款经典的智力游戏,魔板游戏。魔板由3*3或4*4个格子组成。对于3*3魔板,在前8个格子里随即放置8个编号1-8的方块,最后一个格子是未放置方块的空格子;

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

3、弹出对话框,提示用户成功的消息。(5)魔板游戏分为两个级别,用户可以通过界面上提供的菜单来选择“初级”或“高级”两个级别。对于“初级”级别,魔板由3*3个格子组成;对于“高级”级别,魔板由4*4个格子组成。(6)“魔板游戏”提供一幅默认图像,用户可以使用该图像来玩魔板游戏。用户也可以使界面提供的菜单选择一幅新图像,然后使用这个新的图像来玩魔板游戏。2 需求分析2.1 设计目标熟悉Java语言和NetBeansIDE6.8等开发工具。2.2 主体功能这个程序定义了一些组件,工具栏按钮,文本区和菜单。魔板游戏程序设计通过PuzzleGame.java、PuzzlePad.java、Point.ja

4、va、Block.java、HandleImage.java、VerifySuccsee.java和HandleMove.java7个类来实现魔板游戏的整体功能。2.3 开发环境操作系统:Microsoft Windows 98/2000/XP硬件要求:处理器:2.6 GHz Intel Pentium IV 或具有同等性能的处理器内存:2 GB硬盘空间:1 GB 可用硬盘空 间开发工具:NetBeans IDE 6.83 概要设计3.1 系统的功能模块划分在设计魔板游戏时,需要编写7个java源文件:PuzzleGame.java、PuzzlePad.java、Point.java、Bloc

5、k.java、HandleImage.java、VerifySuccsee.java和HandleMove.java。魔板游戏除了需要编写的上述7个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JMenuItem、JButton和JRadioButton等类。魔板游戏所用到的一些重要的类以及之间的组合关系如图1.1所示。图1-1 类之间的组合关系3.1.1PuzzleGame.java类模块 PuzzleGame类负责创建魔板游戏的主窗口,该类含有main方法,程序从该类开始。PuzzleGame类的成员变量中有4种重要类型的对象:PuzzlePad、JMenu、JRad

6、ioButton和JButton。PuzzleGame类的主要成员的作用将在后面的详细设计中阐述,PuzzleGame类创建的窗口以及其中的主要成员对象如图6.3所示。3.1.2 PuzzlePad.java类模块PuzzlePad类创建的对象是PuzzleGame类最重要的成员之一,代表“魔板”。该类的成员变量中有5种重要类型的对象:Point、Block、HandleMove、HandleImage和Image。PuzzlePad类的主要成员的作用将在后面的详细设计中阐述。3.1.3 Block.java类模块Block类是JTextField的一个子类,创建的对象是PuzzlePad类的

7、重要成员之一,用来表示“魔板”中的“方块”。3.1.4 Point.java类模块Point类负责创建确定位置的对象,使用Point对象可以确定Block对象在PuzzlePad对象中的位置,即确定“方块”在“魔板”中的位置。3.1.5 HandleImage.java类模块HandImage类所创建的对象负责处理鼠标事件。3.1.6 HandleMove.java类模块HandMove类所创建的对象负责处理鼠标事件。3.1.7 VerifySuccess.java类模块VerifySuccess类所创建的对象负责验证用户是否按要求成功排列魔板中的方块。3.2 系统流程图图2-1 总体功能图根

8、据对模板游戏的功能分析,设计得到魔板游戏总流程,如图2-2所示: 图2-2 总体流程图4 详细设计本程序实现的游戏分为初级和高级模式,可以在单机选择级别之后进行选择级别模式。初级的话共分为9格魔板一个为空,8个魔板上下左右自由移动,直至排列完成。该游戏初始默认为数字玩法,不过在单击图像玩法之后可以进行图像的选择也可选择默认图像(dog.jpg)单击开始,如果图像不能立刻显示,那么再单击一次就会出现图像魔板了。如图3.1所示:图3-1初级的图像玩法图如果想要选择了一幅新的图像,只要单击选择图像中的选择一幅新图像就可出现如下界面,如图3.3:图3-2图像选择界面在选择了新图像之后单击开始按钮,就会

9、有一张新的图片替换了刚刚所使用的默认图像了。此时如果再选择高级的模式图像就会被分成16快随即小魔板,如图3.4所示:图3-3高级的图像玩法图由上图的底部可以看出还有一个计时器功能,当你开始移动魔板是它就开始计时直至完成魔板的正确排列。5 测试5.1 测试方案我以最简单的方案初级的数字玩法进行了测试如图4.1:图4-1测试方案图5.2 测试结果点击开始后,经过了109秒的努力,我终于把魔板游戏给测试完成了。我亲自验证了这神奇的一刻,如图4.2:图4-2测试结果图这就是魔板游戏完成后的界面,系统会提示你成功了!以表示祝贺,并且底部还会有你完成本次游戏所用的时间。6 小结上学期我们专业课开设了Jav

10、a语言,初步了解java语言的特点及相关知识,虽然之学了很短一段时间,但还是在其中学到很多东西的。这学期老师通知要做java课程设计之后,我就到图书馆查阅资料,借相关的书籍,在网上查找了一些资料开始了我的课程设计之旅。在制作过程中,遇到了自己从所未有的困难,由于java学的不是那么透彻,因此在分析程序代码必然会遇到很大的困扰。其中遇到了一个问题,就是使用图像玩法的时候选择图片选不到,一开始不知道是什么问题但是通过翻阅书籍,上网查阅资料,同学之间的相互讨论,原来是格式不对,它只能选择一些小规模的图片如dog.jpg等格式而电脑的图片都是JPEG格式,了解这点之后这些问题也就迎刃而解了。但重要的这

11、不是最困难的地方,难得地方在运行程序上面,当把代码输入完之后,无法运行,经受着“百般折磨”后,各种思考,才把这部分解决了,确实很不容易,还得归功于同学的团结。这次的课程设计为我提供了一次锻炼的机会,经过开发这个系统,这不仅仅是一次课程设计,不仅仅是学会了一门开发语言,更重要的是在学习的过程中,所有的问题要自已去面对,有问题也只有靠自已去解决,在学习和解决这些困难的过程中提高了我学习的能力、解决问题的能力和实际工作的能力,学到了许多书本以外的知识经历过这次以后,我对前面学过的许多课程有了更为深刻的理解,也是我对这三年所学的东西的一个综合体现。然而这次设计让我感受颇深,让我真正体会到了在整个过程给

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

13、, 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; JMenuBar bar; JMenu gradeMenu,choiceImage; JMenuItem oneGrade,t

14、woGrade,newImage,defaultImage; JRadioButton digitPlay,imagePlay; ButtonGroup group = null; JButton startButton; Image image; Toolkit tool; /* Creates new form PuzzleGame */ public PuzzleGame() tool = getToolkit(); bar = new JMenuBar(); gradeMenu = new JMenu(选择级别); choiceImage = new JMenu(选择图像); oneG

15、rade = new JMenuItem(初级); twoGrade = new JMenuItem(高级); newImage = new JMenuItem(选择一幅新图像); defaultImage = new JMenuItem(使用默认图像); gradeMenu.add(oneGrade); gradeMenu.add(twoGrade); choiceImage.add(newImage); choiceImage.add(defaultImage); bar.add(gradeMenu); bar.add(choiceImage); setJMenuBar(bar); one

16、Grade.addActionListener(this); twoGrade.addActionListener(this); newImage.addActionListener(this); defaultImage.addActionListener(this); startButton = new JButton(开始); startButton.addActionListener(this); group = new ButtonGroup(); digitPlay = new JRadioButton(数字玩法,true); imagePlay = new JRadioButto

17、n(图像玩法,false); group.add(digitPlay); group.add(imagePlay); puzzlePad = new PuzzlePad(); puzzlePad.setGrade(1); puzzlePad.setIsDigitPlay(); add(puzzlePad,BorderLayout.CENTER); JPanel pNorth = new JPanel(); pNorth.add(digitPlay); pNorth.add(imagePlay); pNorth.add(startButton); pNorth.add(new JLabel(如果

18、图像不能立刻显示,请再单击一次按钮); add(pNorth,BorderLayout.NORTH); add(puzzlePad.getHandleMove(),BorderLayout.SOUTH); validate(); setVisible(true); setBounds(100,50,550,380); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try image = tool.createImage(new File(dog.jpg).toURI().toURL(); puzzlePad.setImage(image); c

19、atch(Exception exp) public void actionPerformed(ActionEvent e) if(e.getSource()=startButton) if(digitPlay.isSelected() puzzlePad.setIsDigitPlay(); else if(imagePlay.isSelected() puzzlePad.setImage(image); puzzlePad.setIsImagePlay(); else if(e.getSource() = oneGrade) puzzlePad.setGrade(1); else if(e.

20、getSource() = twoGrade) puzzlePad.setGrade(2); else if(e.getSource() = newImage) FileNameExtensionFilter filter = new FileNameExtensionFilter(JPG&GIF Image,jpg,gif); JFileChooser chooser = new JFileChooser(); chooser.setFileFilter(filter); int state = chooser.showOpenDialog(null); File file = choose

21、r.getSelectedFile(); if(file!=null&state = JFileChooser.APPROVE_OPTION) try image = tool.createImage(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);

22、catch(Exception exp) / private void initComponents() setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane(); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swi

23、ng.GroupLayout.Alignment.LEADING) .addGap(0, 400, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 300, Short.MAX_VALUE) ); pack(); / public static void main(String args) new PuzzleGame(); 附录1.2PuzzlePad模块源程序import javax.sw

24、ing.*;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() setBackgro

25、und(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) this.i

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

27、 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;i m;i+)

28、 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); blockij.

29、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); pointij.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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1