基于Java的动物换位游戏软件设计说明

上传人:be****l 文档编号:76543564 上传时间:2022-04-18 格式:DOC 页数:16 大小:3.41MB
收藏 版权申诉 举报 下载
基于Java的动物换位游戏软件设计说明_第1页
第1页 / 共16页
基于Java的动物换位游戏软件设计说明_第2页
第2页 / 共16页
基于Java的动物换位游戏软件设计说明_第3页
第3页 / 共16页
资源描述:

《基于Java的动物换位游戏软件设计说明》由会员分享,可在线阅读,更多相关《基于Java的动物换位游戏软件设计说明(16页珍藏版)》请在装配图网上搜索。

1、 目 录1.软件主要功能22.类总体设计22.1 类组合关系图22.2 系统流程图32.3 主类42.4 其他类42.4.1 Animal.java42.4.2 Point.java42.4.3 Stone.java42.4.4 HandleMouse.java42.4.5 AutoMoveAnimal.java42.4.6 Customdlg.java42.4.7 People.java42.4.8 Record.java42.4.9 ShowRecordDialog.java43. 类详细设计43.1 主类43.2 其他类64. 关键成员函数代码75. 软件运行结果15结 论16参考文献1

2、61. 软件主要功能采用java技术设计动物换位游戏软件,设计要求如下:(1)程序分为3个级别,用户可以通过界面上提供的菜单来选择“初级”、“中级”和“高级”这三个级别。对于“初级”级别,在水平排列的7块石头上的左右各有3个类型一样的动物,中间的石头上没有动物;对于“中级”级别,在水平排列的9块石头上的左右各有4个类型一样的动物,中间的石头上没有动物;对于“高级”级别,在水平排列的11块石头上的左右各有5个类型一样的动物,中间的石头上没有动物。(2)用鼠标单击一个动物,如果该动物的前方的石头上没有动物,该动物就跳跃到该石头上,如果该动物前方的石头上有其他的动物,但隔位上的石头没有动物,该动物就

3、越过自己前面的动物跳跃到石头上,其他情形时,该动物不跳跃(跳跃时不能超过2块石头)。(3)左面的动物只能向右方跳跃,右面的动物只能向左方跳跃。(4)用户可以通过单击界面上提供的按钮,让程序自动完成动物换位。(5)可以随时单击界面上提供的按钮,重新开始当前的级别。(6)用户通过菜单选项,可以选择左、右动物的图像。2. 类总体设计2.1 类组合关系图在设计动物换位时需要编写10个Java源文件:ChangeAnimalWindow.java、Animal.java、Point.java、Stone.java、HandleMouse.java、AutoMoveAnimal.java、Customdl

4、g.java、People.java、Record.java和ShowRecordDialog.java。动物换位除了需要编写上述10个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如:JmenuItem、File和utton类等。动物换位所用到的一些重要的类以与之间组合关系如图2.1所示。ChangeAnimalWindowAnimalPointStoneHandleMouseAutoMoveAnimalCustomdlgPeopleRecorduttonFileJmenuItemShowRecordDialog图2.1 类之间的组合关系2.2 系统流程图开始进入游戏界面

5、是否选择级别进入所选级别等级是否选择动物图像进入选择动物图像界面游戏开始是否相邻两个图片一样游戏终止自动演示游戏结果是否要重新开始是否要自动演示是否达到英雄榜记录撤销游戏输入游戏者信息是否游戏成功继续游戏游戏结束是否是否是否否否否是是是是否图2.2 系统流程图2.3 主类ChangeAnimalWindow类负责创建动物换位的主窗口,该类含有main方法,程序从该类开始执行。2.4 其他类2.4.1 Animal.javaAnimal类是JPanel的一个子类,创建的对象是ChangeAnimalWindow类的重要成员之一,用来表示“动物”。2.4.2 Point.javaPoint类负责创

6、建确定位置的对象,使用Point对象,可以确定Animal以与Stone对象在窗体中的位置。2.4.3 Stone.javaStone类是utton的一个子类,创建的对象表示“石头”。2.4.4 HandleMouse.javaHandleMouse类所创建的对象负责处理鼠标事件。2.4.5 AutoMoveAnimal.javaAutoMoveAnimal类所创建的对象使用算法完成动物的自动换位。2.4.6 Customdlg.javaCustomdlg类所创建的对象用来设置“自定义”级别的动物数量。2.4.7 People.javaPeople对象封装用户的名字和成绩,以便ShowReco

7、rdDialog对象可以排序。2.4.8 Record.javaRecord类是javax.swing包中JDialog对话框的子类,当用户成功完成相应级别的游戏时,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。2.4.9 ShowRecordDialog.javaShowRecordDialog类是javax.swing包中JDialog对话框的子类,当用户单击查看相应的级别排行榜时,ShowRecordDialog创建的对象负责显示用户的成绩。3. 类详细设计3.1 主类 图3.1 ChangeAnimalWindow类的UML图(1)成员变量l amoutOfAnim

8、al是int型数据,默认值是6。amoutOfAnimal的值用来确定ChangeAnimalWindow窗体中“动物”的数目,即Animal对象的数目。l distance是int型数据,默认值是80。distance的值用来确定Point对象之间的距离,进而可以确定Animal之间,Stone之间的距离以与Animal和Stone对象外观的大小。l animal是Animal型数组,其长度为amoutOfAnimal。l point是Point型数组,其长度为amoutOfAnimal+1。l stone是Stone型数组,其长度为amoutOfAnimal+1。l handleMouse

9、是HandleMouse类创建的鼠标事件监视器,用来监视animal数组中Animal对象触发的鼠标事件。l autoMoveAnimal是AutoMoveAnimal类创建的对话框。通过该对话框可以实现程序自动将左右动物交换位置。l bar是JMenuBar创建的菜单条,用来添加菜单。bar被放置在窗口的顶部。l menuGrade是JMenu创建的菜单,其名字为“选择级别”。menuImage也是JMenu创建的菜单,其名字为“选择动物图像(JPG,GIF)”。menuHelp也是JMenu创建的菜单,其名字为“帮助”。menuHero也是JMenu创建的菜单,其名字为“英雄榜”。menu

10、Grade、menuImage、menuHero和menuHelp被添加到菜单条bar中。l oneGradeItem、twoGradeItem、threeGradeItem和custom是JMenuItem创建的菜单项,它们的名字依次为“初级”、“中级”、“高级”和“自定义”,这四个菜单项被添加到菜单项menuGrade中。leftImage、rightImage和defaultImage也是JMenuItem创建的菜单项,其名字依次为“左面动物的图像”、“右面动物的图像”和“左右面动物的默认图像”,这三个菜单项被添加到菜单项menuImage中。oneGradeResult、twoGrad

11、eResult、threeGradeResult、customGradeResult和limitTime也是JMenuItem创建的菜单项,其名字依次为“初级英雄榜”、“中级英雄榜”、“高级英雄榜”、“自定义英雄榜”、“我超时了吗”,这五个菜单项被添加到菜单项menuHero中。helpcontent和aboutUs是JMenuItem创建的菜单项,它们的名字依次为“游戏规则”、和“关于我们”,这两个菜单项被添加到菜单项menuHelp中。oneGradeItem、twoGradeItem、threeGradeItem和custom以与leftImage、rightImage和defaultI

12、mage等菜单项都将当前窗口注册为自己的ActionEvent事件监视器。renew、quit和autoButton是utton创建的按钮对象,名字依次为“重新开始”、“撤销”和“自动演示”。renew、quit和autoButton都将当前窗口注册为自己的 ActionEvent事件监视器。(2)方法l ChangeAnimalWindow()是构造方法,负责完成窗口的初始化。l init()方法负责完成Animal、Stone和Point对象的创建。l setAmoutOfAnimal(int)方法负责设置动物的个数,即amountOfAnimal的值。l removeAnimalAndS

13、tone()方法负责从窗体中移掉动物和石头,即移掉Animal对象和Stone对象。l needDoing()方法负责执行一些经常需要重复执行的代码。l actionPerformed(ActionEvent)方法是ChangeAnimalWindow类实现的ActionListener接口中的方法。ChangeAnimalWindow创建的窗口是oneGradeItem、twoGradeItem、threeGradeItem、custom、leftImage、rightImage、defaultImage等菜单项和renew、quit、autoButton按钮的ActionEvent事件监视

14、器。当用户选中某个菜单项或单击按钮时,窗口将执行actionPerformed(ActionEvent)方法进行相应的操作。如果用户选中oneGradeItem、twoGradeItem、threeGradeItem和custom四个菜单项的某一项时,actionPerformed(ActionEvent)方法所执行的操作就是改变amountOfAnimal的值,并执行needDoing()方法,完成必要的初始化。如果用户选中leftImage和rightImage菜单项的某一个时,actionPerformed(ActionEvent)方法所执行的操作就是改变leftImageFile和ri

15、ghtImageFile的引用。当用户单击renew按钮时,actionPerformed(ActionEvent)方法所进行的操作是保持当前的amountOfAnimal的值,并执行needDoing()方法,完成必要的初始化,当用户单击quit按钮时,actionPerformed(ActionEvent)方法所进行的操作是撤销当前“动物”的前一次跳跃。当用户单击autoButton按钮时,actionPerformed(ActionEvent)方法所进行的操作是弹出autoMoveAnimal对话框,用户可以通过该对话框让程序显示动物换位过程。main(String)方法是程序运行的入口

16、方法。3.2 其他类 图3.2 Animal类的UML图图3.3 Point类的UML图 图3.4 Stone类的UML图 图3.5 HandleMouse类的UML图 图3.6 AutoMoveAnimal类的UML图4. 关键成员函数代码ChangeAnimalWindow.java(主类)import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.ArrayList;import java.io.*;import javax.swing.filechooser.*;public class

17、 ChangeAnimalWindow extends JFrame implements ActionListener int amountOfAnimal=6; int distance=80; Animal animal; Point point; Stone stone; HandleMouse handleMouse; AutoMoveAnimal autoMoveAnimal; File leftImageFile,rightImageFile; File fileOneGrade,fileTwoGrade,fileThreeGrade,filecustomGrade; utton

18、 renew,quit,autoButton=null; JMenuBar bar; JMenu menuGrade,menuImage,menuHelp,menuHero; JMenuItem oneGradeResult,twoGradeResult,threeGradeResult,customGradeResult; JMenuItem oneGradeItem,twoGradeItem,threeGradeItem,limitTime; JMenuItem custom; JMenuItem helpcontent,aboutUs; JMenuItem leftIamge,right

19、Iamge,defaultImage; JPanel pCenter; ShowRecordDialog showDiolag=null; ChangeAnimalWindow() fileOneGrade=new File(初级英雄排行榜.txt); fileTwoGrade=new File(中级英雄排行榜.txt); fileThreeGrade=new File(高级英雄排行榜.txt); filecustomGrade=new File(自定义英雄排行榜.txt); pCenter=new JPanel(); pCenter.setBackground(Color.pink); pC

20、enter.setLayout(null); handleMouse=new HandleMouse(); autoMoveAnimal=new AutoMoveAnimal(); leftImageFile=new File(dog.jpg); rightImageFile=new File(cat.jpg); init(); bar=new JMenuBar(); menuGrade=new JMenu(选择级别); menuImage=new JMenu(选择动物图像(JPG,GIF); menuHero=new JMenu(英雄榜); menuHelp=new JMenu(帮助); o

21、neGradeItem=new JMenuItem(初 级); twoGradeItem=new JMenuItem(中 级); threeGradeItem=new JMenuItem(高 级); custom=new JMenuItem(自定义); leftIamge=new JMenuItem(左面动物的图像); rightIamge=new JMenuItem(右面动物的图像); defaultImage=new JMenuItem(左右面动物的默认图像); oneGradeResult=new JMenuItem(初级英雄榜); twoGradeResult=new JMenuIte

22、m(中级英雄榜); threeGradeResult=new JMenuItem(高级英雄榜); customGradeResult=new JMenuItem(自定义英雄榜); limitTime=new JMenuItem(我超时了吗); helpcontent=new JMenuItem(游戏规则); aboutUs=new JMenuItem(关于我们); menuGrade.add(oneGradeItem); menuGrade.add(twoGradeItem); menuGrade.add(threeGradeItem); menuGrade.add(custom); menu

23、Image.add(leftIamge); menuImage.add(rightIamge); menuImage.add(defaultImage); menuHero.add(oneGradeResult); menuHero.add(twoGradeResult); menuHero.add(threeGradeResult); menuHero.add(customGradeResult); menuHero.add(limitTime); menuHelp.add(helpcontent); menuHelp.add(aboutUs); bar.add(menuGrade); ba

24、r.add(menuImage); bar.add(menuHero); bar.add(menuHelp); setJMenuBar(bar); oneGradeItem.addActionListener(this); twoGradeItem.addActionListener(this); threeGradeItem.addActionListener(this); custom.addActionListener(this); leftIamge.addActionListener(this); rightIamge.addActionListener(this); default

25、Image.addActionListener(this); oneGradeResult.addActionListener(this); twoGradeResult.addActionListener(this); threeGradeResult.addActionListener(this); customGradeResult.addActionListener(this); limitTime.addActionListener(this); helpcontent.addActionListener(this); aboutUs.addActionListener(this);

26、 renew=new utton(重新开始); renew.addActionListener(this); autoButton=new utton(自动演示); autoButton.addActionListener(this); quit=new utton(撤消); quit.addActionListener(this); JPanel north=new JPanel(); north.add(renew); north.add(quit); north.add(autoButton); String mess=互换左右动物位置; JLabel hintMess=new JLab

27、el(mess,JLabel.CENTER); north.add(hintMess); add(north,BorderLayout.NORTH); add(pCenter,BorderLayout.CENTER); JPanel south=new JPanel(); south.add(handleMouse); add(south,BorderLayout.SOUTH); setVisible(true); setBounds(60,60,710,300); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); if(!

28、fileOneGrade.exists() try fileOneGrade.createNewFile(); catch(IOException exp) if(!fileTwoGrade.exists() try fileTwoGrade.createNewFile(); catch(IOException exp) if(!fileThreeGrade.exists() try fileThreeGrade.createNewFile(); catch(IOException exp) if(!filecustomGrade.exists() try filecustomGrade.cr

29、eateNewFile(); catch(IOException exp) handleMouse.gradeFile=fileOneGrade; showDiolag=new ShowRecordDialog(); public void init() animal=new AnimalamountOfAnimal; point=new PointamountOfAnimal+1; stone=new StoneamountOfAnimal+1; int space=distance; for(int i=0;ipoint.length;i+) pointi=new Point(space,

30、100); space=space+distance; for(int i=0;ianimal.length;i+) animali=new Animal(); animali.addMouseListener(handleMouse); if(ianimal.length/2) animali.setIsLeft(false); /else if(i=animal.length/2+1) / /if(animali.equals(animali) /animali.setIsLeft(true); /else / animali.setIsLeft(false); / for(int i=0

31、;istone.length;i+) stonei=new Stone(); pCenter.add(stonei); stonei.setSize(distance*8/9,18); int w=stonei.getBounds().width; int h=stonei.getBounds().height; stonei.setLocation(pointi.getX()-w/2,pointi.getY(); pointi.setThisStone(stonei); for(int i=0;ianimal.length;i+) animali.setSize(distance*6/7,d

32、istance*3/4); int w=animali.getBounds().width; int h=animali.getBounds().height; pCenter.add(animali); if(i=2&m%2=0) amountOfAnimal=m; public void removeAnimalAndStone() for(int i=0;ipoint.length;i+) if(pointi.getThisAnimal()!=null) pCenter.remove(pointi.getThisAnimal(); for(int i=0;istone.length;i+

33、) if(pointi.getThisStone()!=null) pCenter.remove(pointi.getThisStone(); pCenter.validate(); pCenter.repaint(); public void needDoing() init(); handleMouse.initStep(); handleMouse.initSpendTime(); handleMouse.setCountTime(true); autoMoveAnimal.setPoint(point); public void actionPerformed(ActionEvent

34、e) if(e.getSource()=oneGradeItem) handleMouse.gradeFile=fileOneGrade; /good.getname(初级英雄排行榜.txt); distance=80; removeAnimalAndStone(); setAmountOfAnimal(6); needDoing(); else if(e.getSource()=twoGradeItem) handleMouse.gradeFile=fileTwoGrade; /good.getname(中级英雄排行榜.txt); distance=70; removeAnimalAndSt

35、one(); setAmountOfAnimal(8); needDoing(); else if(e.getSource()=threeGradeItem) handleMouse.gradeFile=fileThreeGrade; /good.getname(高级英雄排行榜.txt); distance=60; removeAnimalAndStone(); setAmountOfAnimal(10); needDoing(); else if(e.getSource()=custom) handleMouse.gradeFile=filecustomGrade; /good.getnam

36、e(自定义英雄排行榜.txt); Customdlg dialog=new Customdlg(this,自定义,true); dialog.setVisible(true); amountOfAnimal=dialog.getAmountOfAnimal(); distance=560/amountOfAnimal; removeAnimalAndStone(); setAmountOfAnimal(amountOfAnimal); needDoing(); else if(e.getSource()=helpcontent) JOptionPane pane=new JOptionPane

37、(String.format (第%1$3d条规则%2$20sn第%3$3d条规则%4$20sn第%5$3d条规则%6$20s, 1,左右边的动物分别移动到另一边, 2,左只能向右方跳,右只能向左跳, 3,跳跃最多不能越过2块石头); utton btnOk; btnOk=new utton(确定); pane.setOptions(new uttonbtnOk); final JDialog dlghelpList=pane.createDialog(null,游戏规则); btnOk.addActionListener(new ActionListener() public void ac

38、tionPerformed(ActionEvent e) dlghelpList.dispose(); ); dlghelpList.setVisible(true); else if(e.getSource()=aboutUs) JOptionPane.showMessageDialog(this, :翟向晨+n +学号:1203030322+n+班级:12级电信三班 ); else if(e.getSource()=renew) removeAnimalAndStone(); needDoing(); else if(e.getSource()=autoButton) removeAnim

39、alAndStone(); needDoing(); handleMouse.setCountTime(false); autoMoveAnimal.setStep(); int x=this.getBounds().x+this.getBounds().width/2; int y=this.getBounds().y+this.getBounds().height; autoMoveAnimal.setLocation(x,y); autoMoveAnimal.setSize(this.getBounds().width/2,120); autoMoveAnimal.setVisible(

40、true); else if(e.getSource()=quit) ArrayListstep=handleMouse.getStep(); int length=step.size(); int start=-1,end=-1; if(length=2) end=step.get(length-1); start=step.get(length-2); step.remove(length-1); step.remove(length-2); Animal ani=pointend.getThisAnimal(); int w=ani.getBounds().width; int h=an

41、i.getBounds().height; ani.setLocation(pointstart.getX()-w/2,pointstart.getY()-h); ani.setAtPoint(pointstart); pointstart.setThisAnimal(ani); pointstart.setIsHaveAnimal(true); pointend.setIsHaveAnimal(false); else if(e.getSource()=leftIamge) JFileChooser chooser=new JFileChooser(); FileNameExtensionF

42、ilter filter = new FileNameExtensionFilter( JPG & GIF Images, jpg, gif); chooser.setFileFilter(filter); int state=chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) leftImageFile=file; for(int i=0;ianimal.length;i+) if(animali.getIsLef

43、t()=true) animali.setLeftImage(leftImageFile); animali.repaint(); else if(e.getSource()=rightIamge) JFileChooser chooser=new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( JPG & GIF Images, jpg, gif); chooser.setFileFilter(filter); int state=chooser.showOpenDialog(null

44、); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) rightImageFile=file; for(int i=0;ianimal.length;i+) if(animali.getIsLeft()=false) animali.setRightImage(rightImageFile); animali.repaint(); else if(e.getSource()=defaultImage) leftImageFile=new File(dog.jpg); rightImageFile=new File(cat.jpg); for(int i=0;i=(5*amountOfAnimal) JOptionPane.showMessageDialog(this,在+(5*amountOfAnimal)+s里你还没完成!rn+你太慢了!好逊啊!); leftImageF

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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