




免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书 NO.1魔板游戏1.课程设计的目的利用所学高级语言的语法特性,结合数据结构算法、网络知识、文件处理和数据库等知识完成综合题目的设计和代码实现,并培养锻炼分析程序、撰写报告等能力。进一步熟悉软件的各种功能,掌握各知识要点。2. 设计方案论证2.1概要设计2.1.1系统功能描述(1)设计一款经典的智力游戏,魔板游戏。魔板由3*3或4*4个格子组成。对于3*3魔板,在前8个格子里随即放置8个编号1-8的方块,最后一个格子是未放置方块的空格子;对于4*4的魔板,在前15格子里随即放置15编号1-15的方块,最后一个格子是未放置方块的空格子。(2)用鼠标单击任何与空格子水平或垂直相邻的方块可以把该方块移入空格子,而当前方块移动之前所在的格子成为空格子。通过不断地移动方块可以将方块一行一行地按数字顺序排好,例如,对于3*3格子组成的魔板,要求方块最后排列的顺序如图6.1所示。(3)魔板游戏也可以使用图像来代替数字。例如,对于3*3的魔板,将一幅图像分成3*3幅小图像,除去最后一幅小图像(图像的右下角),将其余各幅小图像打乱顺序后放在魔板方块上,最终目标是通过移动方块恢复原始图像(不包括图像的右下角)。(4)当用户按要求排列好方块后,程序弹出对话框,提示用户成功的消息。(5)魔板游戏分为两个级别,用户可以通过界面上提供的菜单来选择“初级”或“高级”两个级别。对于“初级”级别,魔板由3*3个格子组成;对于“高级”级别,魔板由4*4个格子组成。(6)“魔板游戏”提供一幅默认图像,用户可以使用该图像来玩魔板游戏。用户也可以使界面提供的菜单选择一幅新图像,然后使用这个新的图像来玩魔板游戏。 沈 阳 大 学课程设计说明书 NO.2这个程序定义了一些组件,工具栏按钮,文本区和菜单。魔板游戏程序设计通过PuzzleGame.java、PuzzlePad.java、Point.java、Block.java、HandleImage.java、VerifySuccsee.java和HandleMove.java7个类来实现魔板游戏的整体功能。2.1.2系统开发环境操作系统:Microsoft Windows 98/2000/XP内存:2 GB硬盘空间:1 GB 可用硬盘空间开发工具:NetBeans IDE 6.8硬件环境:处理器:2.6 GHz Intel Pentium IV 或具有同等性能的处理器软件环境:JDK、Jcreator等软件2.2详细设计2.2.1 程序流程图根据对魔板游戏的分析,设计得到魔板游戏总体功能如图1所示图1总体功能图 沈 阳 大 学课程设计说明书 NO.3根据对魔板游戏的分析,设计得到魔板游戏总流程图如图2所示图2总体流程图 沈 阳 大 学课程设计说明书 NO.42.2.2程序中自定义类说明(1)PuzzlePad.java类模块PuzzlePad类创建的对象是PuzzleGame类最重要的成员之一,代表“魔板”。该类的成员变量中有5种重要类型的对象:Point、Block、HandleMove、HandleImage和Image。PuzzlePad类的主要成员的作用将在后面的详细设计中阐述。(2)Block.java类模块Block类是JTextField的一个子类,创建的对象是PuzzlePad类的重要成员之一,用来表示“魔板”中的“方块”。(3)Point.java类模块Point类负责创建确定位置的对象,使用Point对象可以确定Block对象在PuzzlePad对象中的位置,即确定“方块”在“魔板”中的位置。(4)HandleImage.java类模块HandImage类所创建的对象负责处理鼠标事件。(5)HandleMove.java类模块HandMove类所创建的对象负责处理鼠标事件。(6)VerifySuccess.java类模块VerifySuccess类所创建的对象负责验证用户是否按要求成功排列魔板中的方块。综上可得程序中的各种类及其功能如表1所示表1类名表类名作用父类PuzzleGame.java负责创建魔板游戏的主窗口 JFramePuzzlePad.java代表“魔板”JPanelBlock.java用来代表“魔板中的“方块”JTxtField 沈 阳 大 学课程设计说明书 NO.5Point.java确定“方块”在“魔板”中的位置HandleImage.java负责将一幅图像分成若干个笑图像JComponentHandleMove.java负责处理鼠标事件JPanelVerfySuccess.java负责验证用户是否按要求成功排列模板中的方块2.2.3程序中主要方法说明PuzzledGame()是够着方法,负责完成窗口的初始化操作PuzzeldGame类创建的窗口是菜单中的菜单项、单选框以及按钮上的ActionEvent事件监视器。Main方法是程序运行的入口方法PuzzledPad对象调用setImage方法设置image对象。PuzzlePad对象调用setGrade方法设置魔板的级别。Block对象调用setAtPoint方法设置自己所在的“点”,即返回point对象的引用。Block对象调用getObject返回自己所在的“点”,即返回point对象的引用。Block对象调用setObject方法设置自己的成员object,当前设置object是Integer对象时,当前Block对象将显示Interger对象中的数字。Point对象调用isHaveBlock()方法返回一个boolean型数据,如果当前point对象上有Block对象,isHaveBlock()方法返回true;否则返回false.HandleImage()是构造方法,负责完成HandleImage对象的初始化。getImages方法将参数指定的Image图像分解成若干个更小饿图像,并将这些图像存放到一个Image数组中,然后返回数组。程序中设计的各种主要方法及其功能如表2所示 沈 阳 大 学课程设计说明书 NO.6表2方法名表方法名主要功能PuzzleGame()负责完成窗口的初始化操作 actionPerformed是PuzzleGame类实现ActionListener接口中的方法PuzzledPad()负责创建Puzzled的对象Point()用来创建Point对象 3. 设计结果与分析3.1 程序运行结果本程序实现的游戏分为初级和高级模式,可以在单机选择级别之后进行选择级别模式。初级的话共分为9格魔板一个为空,8个魔板上下左右自由移动,直至排列完成。该游戏初始默认为数字玩法,不过在单击图像玩法之后可以进行图像的选择也可选择默认图像(dog.jpg)单击开始,如果图像不能立刻显示,那么再单击一次就会出现图像魔板了。如图3所示:图3初级的图像玩法图 沈 阳 大 学课程设计说明书 NO.7如果想要选择了一幅新的图像,只要单击选择图像中的选择一幅新图像就可出现如下界面,如图4:图4图像选择界面在选择了新图像之后单击开始按钮,就会有一张新的图片替换了刚刚所使用的默认图像了。此时如果再选择高级的模式图像就会被分成16快随即小魔板,如图5所示:图5高级的图像玩法图 沈 阳 大 学课程设计说明书 NO.8由上图的底部可以看出还有一个计时器功能,当你开始移动魔板是它就开始计时直至完成魔板的正确排列。6. 附录附录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,twoGrade,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(选择图像); oneGrade = 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); 沈 阳 大 学课程设计说明书 NO.9 oneGrade.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 JRadioButton(图像玩法,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(如果图像不能立刻显示,请再单击一次按钮); 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); catch(Exception exp) public void actionPerformed(ActionEvent e) if(e.getSource()=startButton) if(digitPlay.isSelected() puzzlePad.setIsDigitPlay(); else if(imagePlay.isSelected() 沈 阳 大 学课程设计说明书 NO.10 else if(e.getSource() = oneGrade) puzzlePad.setGrade(1); else if(e.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 = chooser.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); 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); 沈 阳 大 学课程设计说明书 NO.11 layout.createParallelGroup(javax.swing.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.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() setBackground(Color.gray); setLayout(null); handleMove = new HandleMove(); handleMove.initSpendTime(); handleImage = new HandleImage(); verifySuccess = new VerifySuccess(); handleMove.setVerifySuccess(verifySuccess); public HandleMove getHandleMove() return handleMove; 沈 阳 大 学课程设计说明书 NO.12 public void setImage(Image image) this.image = 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 = 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; 沈 阳 大 学课程设计说明书 NO.13 else for(int j = 0;jn-1;j+) blockij = new Block(); blockij.addMouseListener(handleMove); k+; 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 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 = handleImage.getImages(image,m,n); for(int k=0;kblockImage.length-1;k+) 沈 阳 大 学课程设计说明书 NO.14 repaint(); public void paintComponent(Graphics g) super.paintComponent(g); if(isDigitPlay = false) try g.drawImage(image,20+distance*(m+1),point00.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(+Value(); else if(object instanceof Image) repaint(); 沈 阳 大 学课程设计说明书 NO.15 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 = handleImage.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); blockij.repaint(); blockij.setBorder(null); k+; else for(int j=0;jn-1;j+) blockij.setObject(imageList.get(k); blockij.repaint(); blockij.setBorder(null); k+; 沈 阳 大 学课程设计说明书 NO.16 repaint(); public void paintComponent(Graphics g) super.paintComponent(g); if(isDigitPlay = false) try g.drawImage(image,20+distance*(m+1),point00.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(+Value(); else if(object instanceof Image) repaint(); 沈 阳 大 学课程设计说明书 NO.17 public Object getObject() return object; public void paintComponent(Graphics g) super.paintComponent(g); int w=getBounds().width; int h=getBounds().height; try g.drawImage(Image)object,0,0,w,h, this); catch(Exception exp) 附录1.4Point类模块源程序public class Point int x,y; boolean haveBlock; Block block=null; public Point(int x,int y) this.x=x; this.y=y; public boolean isHaveBlock() return haveBlock; public void setHaveBlock(boolean boo) haveBlock=boo; public int getX() return x; public int getY() return y; public boolean equals(Point p) if(p.getX()=this.getX()&p.getY()=this.getY() return true; 沈 阳 大 学课程设计说明书 NO.18 else return false; public void setBlock(Block block) this.block=block; public Block getBlock() return block; 附录1.5HandleImage类模块源程序import java.awt.*;import javax.swing.*;import java.awt.image.*;public class HandleImage extends JComponent int imageWidth,imageHeight; Toolkit tool; HandleImage() tool=getToolkit(); public ImagegetImages(Image image,int rows,int colums) ImageblockImage=new Imagerows*colums; try imageWidth=image.getWidth(this); imageHeight=image.getHeight(this); int w=imageWidth/colums; int h=imageHeight/rows; 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); blockImagek=tool.createImage(ip); k+; 沈 阳 大 学课程设计说明书 NO.19 catch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师招聘之《幼儿教师招聘》模拟题库带答案详解(考试直接用)
- 2025年教师招聘之《幼儿教师招聘》题库及答案详解【全优】
- 2025一建《水利水电工程管理与实务》押题卷A卷
- 乳品新产品平台创新创业项目商业计划书
- 押题宝典教师招聘之《小学教师招聘》通关考试题库及参考答案详解(模拟题)
- 教师招聘之《小学教师招聘》能力提升题库及参考答案详解【突破训练】
- 2025内蒙古呼伦贝尔农垦集团有限公司招聘笔试及答案详解(名校卷)
- 教师招聘之《小学教师招聘》模拟考试高能附参考答案详解【b卷】
- 教师招聘之《小学教师招聘》提分评估复习附参考答案详解(培优b卷)
- 教师招聘之《小学教师招聘》考前冲刺分析附答案详解【a卷】
- 劳动课种植教学方案
- 2024年全国职业院校技能大赛高职组(环境检测与监测赛项)考试题库(含答案)
- 实验-大肠杆菌感受态细胞的制备及转化
- 2025年中考语文阅读复习:理解词语含义(含练习题及答案)
- GB/T 44421-2024矫形器配置服务规范
- 磷酸哌嗪宝塔糖的毒理学研究
- 【课件】2025届高三生物一轮复习备考策略研讨
- 灵芝培训课件
- 环形开挖预留核心土法
- 妇科医生进修汇报课件
- 《科室管理方案》课件
评论
0/150
提交评论