魔板游戏JAVA课程设计报告.pdf

上传人:叶*** 文档编号:36173127 上传时间:2022-08-25 格式:PDF 页数:21 大小:247.35KB
返回 下载 相关 举报
魔板游戏JAVA课程设计报告.pdf_第1页
第1页 / 共21页
魔板游戏JAVA课程设计报告.pdf_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《魔板游戏JAVA课程设计报告.pdf》由会员分享,可在线阅读,更多相关《魔板游戏JAVA课程设计报告.pdf(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1目录目录1 设计目的-22 总体设计-23 关键技术- 33.1 系统的功能模块划分.33.1.1 PUZZLEFRAME.JAVA 类模块.33.1.2 PUZZLEPAD.JAVA 类模块.43.1.3 SQUAREPOINT.JAVA 类模块.44程序流程-55 主要源代码-75.1PUZZLEFRAME 模块源程序.75.2 PUZZLEPAD 模块源程序.105.3 SQUAREPOINT 类模块源程序.176 运行结果及结论-196.1 测试方案.196.2 运行结果.196. 3 小结.207.参考文献-2121 1 设设计计目目的的本次课程设计是通过 Java 语言编制一个魔

2、板游戏,它是一款经典的智力游戏。而 Java语言是当今较为流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。这次课程设计,还有利于加深对 Java 课程的进一步了解,也可以巩固所学 Java 语言基本知识,增进Java 语言编辑基本功,掌握 JDK、Editplus、Eclipse、JCreator 等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握 Java 语言的编程思想及面向对象程序设计的方法。利用所学高级语言的语法特性,结合数据结构算法、网络知识、文件处理和数据库等知识完成综合题目的设计和代码实现,并培养锻炼分析程序、

3、撰写报告等能力。2 2 总体设计总体设计在设计魔板游戏时, 要编写 7 个 Java 源文件: PuzzleGame.java、 PuzzlePad.java、 Point.java、Block.java、HandleImage.java、VerifySuccess.java 和 HandleMove.java。魔板游戏除了需要编写的上述 7 个 Java 源文件所给出的类外,还需要 Java 系统提供的一些重要的类,如 JMenuItem、JButton 和 JRadioButton 等类。魔板游戏所用到的一些重要的类以及之间的组合关系如图 1 所示。PuzzleGameJMenuPuzzl

4、ePadJRadioButtonJButtonPointBlockHandleMoveImageHandleImageVerifySuccess图图 2-12-1 程序模块程序模块33 3 关键技术关键技术3.13.1 系统的功能模块划分系统的功能模块划分在设计魔板游戏时,需要编写 3 个 java 源文件:PuzzleFrame.java、PuzzlePad.java、SquarePoint.java。魔板游戏除了需要编写的上述 3 个 Java 源文件所给出的类外, 还需要 Java 系统提供的一些重要的类,如 JMenuItem、JButton 和 JRadioButton 等类。3.1

5、.13.1.1 PuzzleFrame.javaPuzzleFrame.java 类模块类模块PuzzleFrame 类负责创建魔板游戏的主窗口,该类含有 main 方法,程序从该类开始。PuzzleFrame 类的成员变量中有 4 种重要类型的对象:PuzzlePad、JmenuItem、JRadioButton和 JButton。PuzzleFrame 类的主要成员的作用将在后面的详细设计中阐述,PuzzleFrame 类主要成员变量(属性)和主要方法如表 3-1、3-2 所示。成员变量描述变量类型名称魔板开始游戏的按钮选择玩法PuzzlePadJbuttonJradioButtonPuz

6、zlePad开始数字玩法,图像玩法表表 3-13-1 PuzzleFrame.jaPuzzleFrame.javava 主要成员变量(属性)主要成员变量(属性)名称功能备注PuzzleFrameactionPerformedmain创建程序主窗口处理 ActionEvent 事件程序开始运行的方法构造方法接口方法表表 3-23-2 PuzzleFrame.javaPuzzleFrame.java 主主要方法要方法43.1.23.1.2 PuzzlePad.javaPuzzlePad.java 类模块类模块PuzzlePad 类创建的对象是 PuzzleFrame 类最重要的成员之一,代表“魔板

7、” 。该类的成员变量中有 5 种重要类型的对象:Point、Block 和 Image。PuzzlePad 类类主要成员变量(属性)和主要方法如表 3-3、3-4 所示。描述变量类型名称魔板中的行数和列数魔板中方块的宽和高魔板中二维点数组魔板中而为方块数组模板可能用到的图像intintSquarePointJButtonImagerows,columswidth,heightpointblockimage表表 3-33-3 PuzzlePadPuzzlePad.jav.java a 主要成员变量(属性)主要成员变量(属性)名称功能备注PuzzlePad随机排列数字随机排列图像paintComp

8、onentactionPerformed创建魔板对象随机排列魔板中方块上的数字随机排列魔板中方块上的图像绘制图像处理 ActionEvent 事件构造方法接口方法表表 3-43-4 PuzzlePadPuzzlePad.java.java 主要方法主要方法3.1.33.1.3 SquarePoint.javaSquarePoint.java 类模块类模块SquarePoint 类负责创建确定位置的对象,使用 Point 对象可以确定 Block 对象在PuzzlePad 对象中的位置,即确定“方块”在“魔板”中的位置。SquarePoint.java 类主要成员变量(属性)和主要方法如表 3-

9、5、3-6 所示。描述变量类型名称判断点上是否有方块点上的方块对象booleanJButton有方块block表表 3-53-5 SquarePointSquarePoint.java.java 主要成员变量(属性)主要成员变量(属性)5名称功能备注SquarePointget 有方块set 有方块setBlockgetBlock创建“点”对象判断点上是否有方块设置点上是否有方块在点上放置方块获取点上的方块构造方法表表 3-63-6 SquarePointSquarePoint.java.java 主要方法主要方法4 4程序流程程序流程根据对模板游戏的功能分析,设计得到魔板游戏总流程,如图 4

10、-1 所示:6图图 4-14-1 系统流程图系统流程图流程解释:程序分为两种玩法,数字玩法和图片玩法,又分为初级和高级两种模式,进入游戏选择游戏难度,后选择玩法,数字或图片玩法,系统将各切片顺序打乱,移动切片,判断顺序是否正确,正确游戏结束,不正确继续移动,程序结束。75 5 主要源代码主要源代码5.1PuzzleFrame5.1PuzzleFrame 模块源程序模块源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PuzzleFrame extends JFrame implement

11、s ActionListenerPuzzlePad puzzlePad;JButton 开始;JMenuBar bar;JMenu fileMenu;JMenuItem 初级,高级;JRadioButton 数字玩法,图像玩法;ButtonGroup group=null;Container con=null;public PuzzleFrame()bar=new JMenuBar();fileMenu=new JMenu(魔板游戏);初级=new JMenuItem(初级);高级=new JMenuItem(高级);fileMenu.add(初级);fileMenu.add(高级);bar.

12、add(fileMenu);setJMenuBar(bar);初级.addActionListener(this);高级.addActionListener(this);8开始=new JButton(开始玩);开始.addActionListener(this);group=new ButtonGroup();数字玩法=new JRadioButton(数字玩法,true);图像玩法=new JRadioButton(图像玩法,false);group.add(数字玩法);group.add(图像玩法);puzzlePad=new PuzzlePad(3,3,50,50);con=getCo

13、ntentPane();con.add(puzzlePad,BorderLayout.CENTER);JPanel pNorth=new JPanel();pNorth.add(数字玩法);pNorth.add(图像玩法);pNorth.add(开始);con.add(pNorth,BorderLayout.NORTH);con.validate();addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0););setVisible(true);setBounds(1

14、00,50,440,360);validate();public void actionPerformed(ActionEvent e) if(e.getSource()=开始)if(数字玩法.isSelected()9puzzlePad.随机排列数字();else if(图像玩法.isSelected()puzzlePad.随机排列图像();else if(e.getSource()=初级)con.remove(puzzlePad);puzzlePad=new PuzzlePad(3,3,50,50);con.add(puzzlePad,BorderLayout.CENTER);con.va

15、lidate();this.validate();else if(e.getSource()=高级)con.remove(puzzlePad);puzzlePad=new PuzzlePad(4,4,50,50);con.add(puzzlePad,BorderLayout.CENTER);con.validate();this.validate();publicstatic void main(String args)new PuzzleFrame();105.25.2 PuzzlePadPuzzlePad 模块源程序模块源程序import java.awt.*;import java.aw

16、t.event.*;import javax.swing.*;import javax.swing.border.*;import java.util.Vector;import java.awt.image.*;public class PuzzlePad extends JPanel implements ActionListenerint rows ,colums;int width,height;SquarePoint point;JButton block;Vector vector;int leftX=50,leftY=50;Image image=null;Toolkit too

17、l=null;MediaTracker 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;height=h;11tool=getToolkit();tryimage=tool.createImage(dog.jpg);mt.addImage(image,1);mt.waitForAll();catch(Exception e)block=new

18、 JButtonrowscolums;point=new SquarePointrowscolums;for(int i=0;irows;i+)for(int j=0;jcolums;j+)if(i=rows-1)&(j=colums-1)elseblockij=new JButton();blockij.setSize(width,height);blockij.addActionListener(this);vector.add(blockij);for(int i=0;irows;i+)for(int j=0;jcolums;j+)12pointij=new SquarePoint(50

19、+j*width,50+i*height);if(i=rows-1)&(j=colums-1)elsepointij.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;for(int i=0;irows;i+)for(int j=0;jcolums;j+)if(pointij.getX()=x&pointij.

20、getY()=y)m=i;n=j;13int 上=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 有方块()=false)point下n.setBlock(button,this);pointmn.set 有方块(false);else if(pointm左.

21、get 有方块()=false)pointm左.setBlock(button,this);pointmn.set 有方块(false);else if(pointm右.get 有方块()=false)pointm右.setBlock(button,this);pointmn.set 有方块(false);public void 随机排列数字()vector.removeAllElements();for(int i=0;irows;i+)14for(int j=0;j0)int n=(int)(Math.random()*vector.size();JButton b=(JButton)ve

22、ctor.elementAt(n);b.setText(+i);b.setIcon(null);b.setBorder(BorderFactory.createLineBorder(Color.blue,1);vector.remove(n);i+;画图像=false;repaint();public void 随机排列图像()try图像的宽=image.getWidth(this);15图像的高=image.getHeight(this);int w=图像的宽/colums;int h=图像的高/rows;blockImage=new Imagerows*colums;int k=0;Pix

23、elGrabber 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=newMemoryImageSource(w,h,pixels,0,w);blockImagek=tool.createImage(ip);k+;vector.removeAllElements();for(int i=0;irows;i+)for

24、(int j=0;j0)int n=(int)(Math.random()*vector.size();JButton b=(JButton)vector.elementAt(n);b.setIcon(new ImageIcon(blockImagenum);b.setBorder(null);b.setText();vector.remove(n);num+;画图像=true;repaint();catch(Exception ee)public void paintComponent(Graphics g)super.paintComponent(g);g.setColor(Color.b

25、lack);g.fillRect(leftX,leftY,colums*width,rows*height);if(画图像=true)g.drawImage(image,colums*width+80,height,colums*width,rows*height,this);for(int i=0;irows;i+)17g.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+)g.

26、drawLine(colums*width+80+j*width,height,colums*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);5.35.3 SquarePointSquarePoint 类模块源程序类模块源程序import java.awt.*;import javax.swing.JButton;public class SquarePoi

27、ntint x,y;boolean 有方块;JButtonblock=null;Container con=null;public SquarePoint(int x,int y)this.x=x;18this.y=y;public boolean get 有方块()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;t

28、his.block=block;con.add(block);block.setLocation(x,y);有方块=true;con.validate();public JButton getBlock()return block;196 6 运行结果及结论运行结果及结论6.16.1 测试方案测试方案游戏难度级别分别设置为数字玩法图片玩法,进行测试。用 java 解释器运行主类:E:Eclipse(实验)java PuzzleFrame6.26.2 运行结果运行结果图图 6-16-1 数字玩法测试结果数字玩法测试结果20图图 6-26-2 图片玩法测试结果图片玩法测试结果本程序实现的游戏分为初

29、级和高级模式, 可以在单机选择级别之后进行选择级别模式。 初级的话共分为 9 格魔板,一个为空,8 个魔板上下左右自由移动,直至排列完成;高级的话分为 16 格魔板,一个为空,15 个魔板上下左右自由移动,直至排列完成。该游戏可分为数字玩法和图像玩法, 在单击图像玩法或者数字玩法之后可以进行相应的玩法选择, 选择之后单击开始。如果玩家想重新开始,只需要再次单击开始按钮即可。6.6. 3 3 小结小结通过这次实验,使我在软件开发方面也累积了不少经验,对 java 的知识重要性的认识更深了。通过设计过程的锻炼,自己分析问题和解决问题的能力都得到了锻炼和提高,完善了自己的知识结构,加深了对所学知识的

30、理解。通过课程设计, 我学习到不少的 JAVA 编程语言的知识, 但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题,甚至错误。这些我会在以后的工21作学习和实践中加以改进和提高。7.7.参考文献参考文献1.Java面向对象的程序设计 董小园 清华大学出版社 参考页数P160-P3172.Java 程序设计自学手册 王国辉,李钟尉,王毅 北京:人民邮电出版社 参考页数P288-P3313.Java 语言与面向对象程序设计 刘洋,陈裼祯,李马宏北京:机械工业出版社 参考页数P67-P1284.Java2从入门到精通 陈国君,陈 磊北京:清华大学出版社 参考页数P13-P985.Java程序设计实用教程 朱站立,沈伟 北京:北京大学出版社 参考页数P53-P60

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

当前位置:首页 > 应用文书 > 公文通知

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁