1、(2)用户可以根据个人需要来选择魔板游戏的级别:“初级”或者“高级”。2.2.3 系统功能结构在设计魔板游戏时,要编写7个Java源文件:、和。魔板游戏除了需要编写的上述7个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JMenuItem、JButton和JRadioButton等类。魔板游戏所用到的一些重要的类以及之间的组合关系如图1所示。图1 类之间的组合关系 设计过程2.3.1 系统流程图系统的流程图如图2所示。图2 魔板游戏系统流程图2.3.2 总体设计(1)(主类)PuzzleGame类负责创建魔板游戏的主窗口,该类含有main方法,程序从该类开始执行。Puzz
2、leGame雷的成员变量中有4种重要类型的对象:PuzzlePad、JMenu、JRadioButton和JButton。PuzzleGame类的主要成员的作用将在后面的详细设计中阐述,PuzzleGame类创建的窗口以及其中的主要成员对象如图3所示。图3 PuzzleGame窗口及主要的成员对象(2)PuzzlePad类创建的对象是PuzzleGame类最重要的成员之一,代表“魔板”。该类的成员变量中有5种重要类型的对象:Point、Block、HandleMovee、HandleImage和Image。PuzzlePad类的主要成员的作用将在后面的详细设计中阐述。(3)Block类是JTe
3、xtField的一个子类创建的对象是PuzzlePad类的重要成员之一,用来表示“魔板”中的“方块”。(4)Point类负责创建确定位置的对象,使用Point对象可以确定Block对象在PuzzlePad对象中的位置,即确定“方块”在“魔板”中的位置。(5)HandleImage类所创建的对象负责将一幅图像分成若干个小图像。(6)HandleMove类所创建的对象负责处理鼠标事件。(7)VerifySuccess类所创建的对象负责验证用户是否按要求成功排列魔板中的方块。2.3.3 详细设计(1)PuzzleGame类效果图:PuzzleGame创建的窗口效果如图4(数字玩法)、图5(图像玩法)
4、所示。 图4 PuzzleGame创建的窗口(数字玩法) 图5 PuzzleGame创建的窗口(图像玩法)图6 PuzzleGame类的UML图UML图:MazeWindow类是包中JFrame的一个子类,并实现了ActionListener接口,该类的主要成员变量和方法的UML图如图6所示。以下是UML图中有关数据和方法的详细说明。1成员变量PuzzlePad是PuzzlePad类声明的对象,用来刻画魔板,是PuzzleGame类中最重要的成员之一。Bar是JMenuBar创建的菜单条,用来添加菜单。Bar被放置在窗口的顶部。gradeMenu和choiceImage是JMenu创建的菜单,
5、其名字分别为“选择级别”和“选择图像”。gradeMenu和choiceImage被添加到菜单条中。oneGrade、twoGrade、newImage和defaultImage是JMenuItem创建的菜单项,名字依次为“初级”、“高级”、“选择一幅新图像”和“使用默认图像”,oneGrade和twoGrade菜单项被添加到菜单GradeMenu中。oneGrade、twoGrade、newImage和defaultImage都将当前窗口注册为自己的ActionEvent事件监视器。digitPlay和imagePlay是JRadioButton创建的属于同一选择组中的单选框,名字依次为“数
6、字玩法”,“图像玩法”。同一时刻,digitPlay和imagePlay中只能有一个处于选中状态。startButton是JButton创建的按钮对象,名字为“开始”。startButton将当前窗口注册为自己的ActionEvent事件监视器。image是Image声明的对象。Tool是Toolkit对象,负责创建image对象。方法PuzzleGame()构造方法,负责完成窗口的初始化操作。actionPerformed(ActionEvent)方法是PuzzleGame类实现ActionListener接口中的方法。PuzzleGame类创建的窗口是菜单中的菜单项、单选框以及按钮上的Ac
7、tionEvent事件监视器。如果用户选中oneGrade或twoGrade菜单项时actionPerformed(ActionEvent)方法所执行的操作分别让puzzlePad对象将自己的级别设置为以及或二级。如果用户选中newImage或defaultImage菜单项时,actionPerformed(ActionEvent)方法所执行的操作就是分别改变image对象。当用户单击start按钮后,如果单选框disPlay处于被选中状态,那么actionPerformed (ActionEvent)方法所执行的操作就是让puzzlePad对象使用数字魔板,如果单选框imagePlay被选中
8、时,那么actionPerformed (ActionEvent)方法所执行的操作就是让puzzlePad对象使用图像魔板。(2)PuzzlePad类PuzzlePad创建的魔板对象效果如图7所示。(a)数字魔板 (b)图像魔板图7 PuzzlePad创建的魔板对象PuzzlePad类是包中JPanel容器的子类,所创建的对象:puzzlePad是PuzzleGame类中最重要的成员之一,作为一个容器添加到PuzzleGame窗口的中心。标明PuzzlePad类的主要成员变量、方法以及和PuzzleGame类之间组合关系的UML图如图8所示。图8 PuzzllePad类的UML图Point是P
9、oint类型的二维数组,其单元为Point类创建的对象,用来确定魔板中方块的位置,即确定Block对象在PuzzlePad容器中的位置。block是Block类型的二维数组,其单元为Block类创建的对象,用来表示方块。Distance,grade,m和n是int型数据。Point对象根据distance的值来进行初始化,以便确定Point对象之间的距离。m和n是二维数组block和point的行数和列数,m和n的值都是3。Grade的值代表魔板的级别,默认值是1。handleMove是HandleMove类创建的对象,负责处理Block对象上的鼠标事件。handleImage是HandIma
10、ge类创建的对象,负责将一幅图像分成若干幅小图像。2方法PuzzlePad()是构造方法,负责创建PuzzlePad对象。PuzzlePad对象调用getHandleMove()方法返回其中的HandleMove对象PuzzlePad对象调用setImage(Image)方法设置image对象。PuzzlePad对象调用getGrade()方法返回grade.PuzzlePad对象调用setIsDigitPlay()方法将魔板设置为数字玩法。PuzzlePad对象调用setIsImagePlay()方法将魔板设置为图像玩法。图9 Block创建的2个对象图10 Block类的UML图(3)Bl
11、ock类Block创建的对象效果图如图9所示。Block类是包中JTextField类中的一个子类,创建的对象是二维数组block的单元中的对象。Block型数组block是PuzzlePad类的重要成员之一。标明Block类的主要成员变量和方法以及和PuzzlePad类之间组合关系的UML图如图10所示。(4)Point类Point创建的对象负责确定Block对象在PuzzlePad魔板容器中的所在位置。Point创建的对象没有可以显示的效果图。Point创建的对象含有两个重要int型数据,分别用来表示PuzzlePad魔板容器坐标系中的X轴坐标和Y轴坐标值,坐标系的原点是PuzzlePad
12、魔板容器的左上角,向右是X轴的正向,向下是Y轴的正向。Point类创建的对象是二维数组point的单元中的对象。Point型二维数组point是PuzzlePad魔板容器的重要成员之一,其单元中的Point对象用来确定Block对象在PuzzlePad魔板容器中的位置。标明Point类的主要成员变量和方法以及和PuzzlePad类之间组合关系的UML图如图11所示。图11 Point类的UML图(5)HandleImage类HandleImage创建的对象负责将一幅图像分解为若干个小的图像,没有可显示的效果图。HandleImage类是包中JComponent类的一个子类,创建的对象Handl
13、eImage负责将一幅图像分解为若干个小的图像,是PuzzlePad类的重要成员之一。HandleImage类的主要成员变量和方法以及和PuzlePad类之间的组合关系的UML图如图12所示。图12 HandleImage类的UML图(6)HandleMove类HandleMove创建的对象效果图如图13所示。图13 HandleMove创建的对象图14 HandleMove类的UML图HandleMove是包中JPanel容器的一个子类,并实现了MouseListener和ActionListener接口,创建的对象handleMove是PuzzlePad类的成员之一,负责监视PuzzleP
14、ad类中的Block对象上的鼠标事件。当用户鼠标点击Block对象后,handleMove对象负责给出移动Block对象的有关算法,并显示用户的用时。标明HandleMove类的主要成员变量。方法以及和PuzzlePad类之间组合关系的UML图如图14所示。(7)VerifuSuccessVerifuSuccess创建的对象负责验证用户是否按要求成功排列魔板中的方块,没有可显示的效果图。块,创建的对象VerifuSuccess是PuzzlePad类的重要成员之一。标明VerifuSuccess类的主要成员变量和方法以及和PuzzlePad类之间组合关系的UML图如图15所示。图15 Verif
15、ySuccess类的UML图3设计结果与分析图16 运行程序界面 程序运行结果(1)在JCreater平台下编译并运行源程序,界面显示如上图16所示。(2) 单击JMenu中的“选择级别”,可供用户根据个人需要选择“初级”或“高级”,如图17所示。图17 魔板游戏级别选择(3)单击JMenu中的“选择图像”,用户可以对图像进行选择,“选择一幅新图像”或“使用默认图像”进行魔板游戏。如图18所示。图18 魔板游戏图像选择(4) 单击“选择一幅新图像”后,在弹出的对话框中选择路径找到想要用来玩魔板游戏的图像,如图19所示。图19 选择一幅新图像(5)选择图像后单击“打开”,图像随即改变。如图20所
16、示。图20 重新选择新图像(6)在JRadioButton上可以选择游戏方式,即“数字玩法”或“图像玩法”,如图21所示。图21 选择游戏玩法(数字或图像)(7) 当点击开始并用鼠标触发魔板后,系统自动启动计时器,如图22所示。图22 魔板游戏计时器 程序分析本魔板游戏程序分别具备两种级别以及两种形式的玩法,即游戏级别“初级”或者“高级”,游戏玩法“数字”或“图像”。同时系统提供计算器功能,方便用户掌握自己的游戏时间。此游戏的图像玩法还可根据用户的喜好选择喜欢的图片进行魔板游戏,更能满足用户的需求,从而使用户更充分的在娱乐中强化智商。4总结Java语言是一个支持网络计算的面向对象程序设计语言。
17、Java语言具有简单易学、面向对象、平台无关性,分布式、可靠性、安全性、支持多线程、支持网络编程和编译与解释共存等特点。这次课程设计的内荣是运用Java理论知识设计魔板游戏给我最大的感受就是如果对什么事物产生了兴趣,就立刻动手去实践,困难在勇气和毅力下是甘拜下风的。从做这个Java魔板游戏开始每当遇到什么困难,我都未曾想过要放弃。出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。在老师及同学的帮助下,我最终完成了这次Java课程设计,不过这只是我学习路上的一个驿站而已,各种计算机语言原本就是相通的,学习Java语言的目的主要是为了深入的了解其编程设计思想。通过这次课程设计,不仅锻炼了
18、我自主学习的能力,与此同时,通过我的动手实践操作,也使我把书本上的所学知识进一步融会贯通在了一起。这使我的操作能力得到了进一步的锻炼和提高。并且对我以后的程序设计以及软件开发等打下了夯实的基础也提供了丰富的实践经验。总而言之,这次课程设计使我学到了很多东西,巩固和深化了解了之前学过的理论知识,对Java理论有了更进一步的了解,从各个方面看,都是受益匪浅。5. 参考文献1刘洋,陈裼祯,李马宏.Java语言与面向对象程序设计M.北京:机械工业出版社, :67-1282王国辉,李钟尉,王毅.Java程序设计自学手册M.北京:人民邮电出版社,:288-3313朱福喜,尹为民,余振坤. Java语言与面
19、向对象程序设计M. 武汉: 武汉大学出版社, :4 陈国君,陈 磊.Java 2从入门到精通M.北京:清华大学出版社,:13-985苗春义. Java项目开发全程实录(软件项目开发全程实录)M.北京:20-956 朱站立,沈伟. Java程序设计实用教程M.北京:北京大学出版社, :53-606附录:import .*;import class PuzzleGame extends JFrame implements ActionListener PuzzlePad puzzlePad; JMenuBar bar; JMenu gradeMenu,choiceImage; JMenuItem
20、oneGrade,twoGrade,newImage,defaultImage; JRadioButton digitPlay,imagePlay; ButtonGroup group=null; JButton startButton; Image image; Toolkit tool; public PuzzleGame() tool=getToolkit(); bar=new JMenuBar(); gradeMenu=new JMenu(选择级别); choiceImage=new JMenu(选择图像 oneGrade=new JMenuItem(初级 twoGrade=new J
21、MenuItem(高级 newImage=new JMenuItem(选择一幅新图像 defaultImage=new JMenuItem(使用默认图像 (oneGrade); (twoGrade); (newImage); (defaultImage); (gradeMenu); (choiceImage); setJMenuBar(bar); (this); startButton=new JButton(开始 group=new ButtonGroup(); digitPlay=new JRadioButton(数字玩法,true); imagePlay=new JRadioButton
22、(图像玩法,false); (digitPlay); (imagePlay); puzzlePad=new PuzzlePad(); (1); (); add(puzzlePad,; JPanel pNorth=new JPanel(); (startButton); (new JLabel(如果图像不能立刻显示,请再单击一次按扭); add(pNorth,; add(),; validate(); setVisible(true); setBounds(100,50,550,380); setDefaultCloseOperation; try image=(new File().toURI
23、().toURL(); (image); catch(Exception exp) public void actionPerformed(ActionEvent e) if()=startButton) if() else if() else if()=oneGrade) else if()=twoGrade) (2); else if()=newImage) FileNameExtensionFilter filter = new FileNameExtensionFilter( JPG & GIF Images, jpggif JFileChooser chooser=new JFile
24、Chooser(); (filter); int state=(null); File file=(); if(file!=null&state= try image=().toURL(); catch(Exception exp) else if()=defaultImage) image=(new File( public static void main(String args) new PuzzleGame(); public class Block extends JTextField Point point; Object object; Block() setEditable(f
25、alse); setHorizontalAlignment; setFont(new Font(Arial,16); setForeground; public void setAtPoint(Point p) point=p; public Point getAtPoint() return point; public void setObject(Object object) =object; if(object instanceof Integer) Integer number=(Integer)object; setText(+(); else if(object instanceof Image) repaint(); public Object getObject() return object; public void paintComponent(Graphics g) (g); int w=getBounds().width; int h=getBounds().height; try (Image)object,0,0,w,h,this); catch(Exception exp)import class HandleIma
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1