1、魔板游戏Java课程设计报告1设计目的 本次课程设计是通过Java语言编制一个魔板游戏,它是一款经典的智力游戏。而Java语言是当今较为流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。这次课程设计,还有利于加深对Java课程的进一步了解,也可以巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法。利用所学高级语言的语法特性,结合数据结构算法、网络知识、文件处理和数
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所示。图2-1程序模块3 关键技术3.1 系
3、统的功能模块划分在设计魔板游戏时,需要编写3个java源文件:PuzzleFrame.java、PuzzlePad.java、SquarePoint.java。魔板游戏除了需要编写的上述3个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JMenuItem、JButton和JRadioButton等类。3.1.1 PuzzleFrame.java类模块PuzzleFrame类负责创建魔板游戏的主窗口,该类含有main方法,程序从该类开始。PuzzleFrame类的成员变量中有4种重要类型的对象:PuzzlePad、JmenuItem、JRadioButton和JButton
4、。PuzzleFrame类的主要成员的作用将在后面的详细设计中阐述,PuzzleFrame类主要成员变量(属性)和主要方法如表3-1、3-2所示。成员变量描述变量类型名称魔板开始游戏的按钮选择玩法PuzzlePadJbuttonJradioButtonPuzzlePad开始数字玩法,图像玩法表3-1 PuzzleFrame.java主要成员变量(属性)名称功能备注PuzzleFrameactionPerformedmain创建程序主窗口处理ActionEvent事件程序开始运行的方法构造方法接口方法表3-2 PuzzleFrame.java主要方法3.1.2 PuzzlePad.java类模块
5、PuzzlePad类创建的对象是PuzzleFrame类最重要的成员之一,代表“魔板”。该类的成员变量中有5种重要类型的对象:Point、Block和Image。PuzzlePad类类主要成员变量(属性)和主要方法如表3-3、3-4所示。描述变量类型名称魔板中的行数和列数魔板中方块的宽和高魔板中二维点数组魔板中而为方块数组模板可能用到的图像intintSquarePointJButtonImagerows,columswidth,heightpointblockimage表3-3 PuzzlePad.java主要成员变量(属性)名称功能备注PuzzlePad随机排列数字随机排列图像paintC
6、omponentactionPerformed创建魔板对象随机排列魔板中方块上的数字随机排列魔板中方块上的图像绘制图像处理ActionEvent事件构造方法接口方法表3-4 PuzzlePad.java主要方法3.1.3 SquarePoint.java类模块SquarePoint类负责创建确定位置的对象,使用Point对象可以确定Block对象在PuzzlePad对象中的位置,即确定“方块”在“魔板”中的位置。SquarePoint.java类主要成员变量(属性)和主要方法如表3-5、3-6所示。描述变量类型名称判断点上是否有方块点上的方块对象booleanJButton有方块block表3
7、-5 SquarePoint.java主要成员变量(属性)名称功能备注SquarePointget有方块set有方块setBlockgetBlock创建“点”对象判断点上是否有方块设置点上是否有方块在点上放置方块获取点上的方块构造方法表3-6 SquarePoint.java主要方法4程序流程根据对模板游戏的功能分析,设计得到魔板游戏总流程,如图4-1所示:图4-1 系统流程图流程解释:程序分为两种玩法,数字玩法和图片玩法,又分为初级和高级两种模式,进入游戏选择游戏难度,后选择玩法,数字或图片玩法,系统将各切片顺序打乱,移动切片,判断顺序是否正确,正确游戏结束,不正确继续移动,程序结束。5主要
8、源代码5.1PuzzleFrame模块源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PuzzleFrame extends JFrame implements ActionListener PuzzlePad puzzlePad; JButton 开始; JMenuBar bar; JMenu fileMenu; JMenuItem 初级,高级; JRadioButton 数字玩法,图像玩法; ButtonGroup group=null; Container con=null; p
9、ublic PuzzleFrame() bar=new JMenuBar(); fileMenu=new JMenu(魔板游戏); 初级=new JMenuItem(初级); 高级=new JMenuItem(高级); fileMenu.add(初级); fileMenu.add(高级); bar.add(fileMenu); setJMenuBar(bar); 初级.addActionListener(this); 高级.addActionListener(this); 开始=new JButton(开始玩); 开始.addActionListener(this); group=new Bu
10、ttonGroup(); 数字玩法=new JRadioButton(数字玩法,true); 图像玩法=new JRadioButton(图像玩法,false); group.add(数字玩法); group.add(图像玩法); puzzlePad=new PuzzlePad(3,3,50,50); con=getContentPane(); con.add(puzzlePad,BorderLayout.CENTER); JPanel pNorth=new JPanel(); pNorth.add(数字玩法); pNorth.add(图像玩法); pNorth.add(开始); con.ad
11、d(pNorth,BorderLayout.NORTH); con.validate(); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(100,50,440,360); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=开始) if(数字玩法.isSelected() puzzlePad.随机排列
12、数字(); else if(图像玩法.isSelected() puzzlePad.随机排列图像(); else if(e.getSource()=初级) con.remove(puzzlePad); puzzlePad=new PuzzlePad(3,3,50,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate(); else if(e.getSource()=高级) con.remove(puzzlePad); puzzlePad=new PuzzlePad(4,4,50,50); con.a
13、dd(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate(); public static void main(String args) new PuzzleFrame(); 5.2 PuzzlePad模块源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.util.Vector;import java.awt.image.*;public class Puzzle
14、Pad extends JPanel implements ActionListener int rows ,colums; int width,height; SquarePoint point; JButton block; Vector vector; int leftX=50,leftY=50; Image image=null; Toolkit tool=null; MediaTracker mt; int 图像的宽,图像的高; Image blockImage; boolean 画图像=true; public PuzzlePad(int r,int c,int w,int h)
15、setLayout(null); vector=new Vector(); rows=r; colums=c; width=w; height=h; tool=getToolkit(); try image=tool.createImage(dog.jpg); mt.addImage(image,1); mt.waitForAll(); catch(Exception e) block=new JButtonrowscolums; point=new SquarePointrowscolums; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if(
16、i=rows-1)&(j=colums-1) else blockij=new JButton(); blockij.setSize(width,height); blockij.addActionListener(this); vector.add(blockij); for(int i=0;irows;i+) for(int j=0;jcolums;j+) pointij=new SquarePoint(50+j*width,50+i*height); if(i=rows-1)&(j=colums-1) else pointij.setBlock(blockij,this); public
17、 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.getY()=y) m=i; n=j; int 上=Math.max(0,m-1); int 下=Math.min(rows-1,m+1); int 左=Math
18、.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左.get有方块()=false) pointm左.setBlock(button,this); pointmn.set有方块(false); else
19、 if(pointm右.get有方块()=false) pointm右.setBlock(button,this); pointmn.set有方块(false); public void 随机排列数字() vector.removeAllElements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(Math.random()*vector.size(); JButton b=(JButton)vector.elementAt(n); b.setText(+i); b.setIcon(null); b.setBorder(Border
20、Factory.createLineBorder(Color.blue,1); vector.remove(n); i+; 画图像=false; repaint(); public void 随机排列图像() try 图像的宽=image.getWidth(this); 图像的高=image.getHeight(this); int w=图像的宽/colums; int h=图像的高/rows; blockImage=new Imagerows*colums; int k=0; PixelGrabber pg=null; ImageProducer ip=null; for(int i=0;i
21、rows;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+; vector.removeAllElements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(Math.random()*vec
22、tor.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.black); g.fillRect(leftX,leftY
23、,colums*width,rows*height); if(画图像=true) g.drawImage(image,colums*width+80,height,colums*width,rows*height,this); for(int i=0;irows;i+) g.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.drawLine(colums*width+
24、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.3 SquarePoint类模块源程序import java.awt.*;import javax.swing.JButton;public class SquarePoint int x,y; boolean 有方块; JButton block
25、=null; Container con=null; public SquarePoint(int x,int y) this.x=x; this.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; this.block=block; con.ad
26、d(block); block.setLocation(x,y); 有方块=true; con.validate(); public JButton getBlock() return block; 6 运行结果及结论6.1 测试方案游戏难度级别分别设置为数字玩法图片玩法,进行测试。用java解释器运行主类:E:Eclipse(实验)java PuzzleFrame6.2 运行结果图6-1 数字玩法测试结果图6-2 图片玩法测试结果本程序实现的游戏分为初级和高级模式,可以在单机选择级别之后进行选择级别模式。初级的话共分为9格魔板,一个为空,8个魔板上下左右自由移动,直至排列完成;高级的话分为1
27、6格魔板,一个为空,15个魔板上下左右自由移动,直至排列完成。该游戏可分为数字玩法和图像玩法,在单击图像玩法或者数字玩法之后可以进行相应的玩法选择,选择之后单击开始。如果玩家想重新开始,只需要再次单击开始按钮即可。6. 3小结通过这次实验,使我在软件开发方面也累积了不少经验,对java的知识重要性的认识更深了。通过设计过程的锻炼,自己分析问题和解决问题的能力都得到了锻炼和提高,完善了自己的知识结构,加深了对所学知识的理解。 通过课程设计,我学习到不少的JAVA编程语言的知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题,甚至错误。这些我会在以后的工作学习和实践中加以改进和提高。 7.参考文献1. Java面向对象的程序设计 董小园 清华大学出版社 参考页数P160-P3172. Java程序设计自学手册 王国辉,李钟尉,王毅 北京:人民邮电出版社 参考页数P288-P3313. Java语言与面向对象程序设计 刘洋,陈裼祯,李马宏 北京:机械工业出版社 参考页数P67-P1284. Java2从入门到精通 陈国
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2