ChangeAnimalWindow类负责创建动物换位的主窗口,该类含有main方法,程序从该类开始执行。ChangeAnimalWindow类的成员变量中有七种重要类型的对象:Animal、Point、Stone、HandleMouse、Customdlg、ShowRecordDialog和AutoMoveAnimal对象。
2.1.2 Animal.javaAnimal类是JPanel的一个子类,创建的对象是ChangeAnimalWindow类的重要成员之一,用来表示“动物”。
2.1.3 Point.javaPoint类负责创建确定位置的对象,使用Point对象,可以确定Animal以及Stone对象在窗体中的位置。
2.1.4 Stone.javaStone类是JButton的一个子类,创建的对象表示“石头”。
2.1.5 HandleMouse.javaHandleMouse类所创建的对象负责处理鼠标事件。
2.1.6 AutoMoveAnimal.javaAutoMoveAnimal类所创建的对象使用算法完成动物的自动换位。
2.1.7 Customdlg.javaCustomdlg类所创建的对象用来设置“自定义”级别的动物数量。
2.1.8 People.javaPeople对象封装用户的名字和成绩,以便ShowRecordDialog对象可以按成绩的高低排序用户。
2.1.9 Record.javaRecord类是javax.swing包中JDialog对话框的子类,当用户成功完成相应级别的游戏时,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。
2.1.10 ShowRecordDialog.javaShowRecordDialog类是javax.swing包中JDialog对话框的子类,当用户单击查看相应的级别排行榜时,ShowRecordDialog创建的对象负责显示用户的成绩。
2.2. 详细设计2.2.1 ChangeAnimalWindow类(主类)1)效果图
ChangeAnimalWindow创建的窗口效果如图2-2-1所示:
ChangeAnimalWindow类是javax.swing包中的JFrame的一个子类,并实现了ActionListener接口,标明该类的主要成员变量和方法的UML图如图2-2-2所示。
以下是UML图中有关数据和方法的详细说明。
2)成员变量
amoutOfAnimal是int型数据,默认值是6。amoutOfAnimal的值用来确定ChangeAnimalWindow窗体中“动物”的数目,即Animal对象的数目。
distance是int型数据,默认值是80。distance的值用来确定Point对象之间的距离,进而可以确定Animal之间,Stone之间的距离以及Animal和Stone对象外观的大小。
animal是Animal型数组,其长度为amoutOfAnimal。
point是Point型数组,其长度为amoutOfAnimal+1。
stone是Stone型数组,其长度为amoutOfAnimal+1。
handleMouse是HandleMouse类创建的鼠标事件监视器,用来监视animal数组中Animal对象触发的鼠标事件。
autoMoveAnimal是AutoMoveAnimal类创建的对话框。通过该对话框可以实现程序自动将左右动物交换位置。
bar是JMenuBar创建的菜单条,用来添加菜单。bar被放置在窗口的顶部。
menuGrade是JMenu创建的菜单,其名字为“选择级别”。menuImage也是JMenu创建的菜单,其名字为“选择动物图像(JPG,GIF)”。menuHelp也是JMenu创建的菜单,其名字为“帮助”。menuHero也是JMenu创建的菜单,其名字为“英雄榜”。menuGrade、menuImage、menuHero和menuHelp被添加到菜单条bar中。
oneGradeItem、twoGradeItem、threeGradeItem和custom是JMenuItem创建的菜单项,它们的名字依次为“初级”、“中级”、“高级”和“自定义”,这四个菜单项被添加到菜单项menuGrade中。leftImage、rightImage和defaultImage也是JMenuItem创建的菜单项,其名字依次为“左面动物的图像”、“右面动物的图像”和“左右面动物的默认图像”,这三个菜单项被添加到菜单项menuImage中。oneGradeResult、twoGradeResult、threeGradeResult、customGradeResult和limitTime也是JMenuItem创建的菜单项,其名字依次为“初级英雄榜”、“中级英雄榜”、“高级英雄榜”、“自定义英雄榜”、“我超时了吗”,这五个菜单项被添加到菜单项menuHero中。helpcontent和aboutUs是JMenuItem创建的菜单项,它们的名字依次为“游戏规则”、和“关于我们”,这两个菜单项被添加到菜单项menuHelp中。oneGradeItem、twoGradeItem、threeGradeItem和custom以及leftImage、rightImage和defaultImage等菜单项都将当前窗口注册为自己的ActionEvent事件监视器。
renew、quit和autoButton是JButton创建的按钮对象,名字依次为“重新开始”、“撤销”和“自动演示”。renew、quit和autoButton都将当前窗口注册为自己的ActionEvent事件监视器。
3)方法
ChangeAnimalWindow()是构造方法,负责完成窗口的初始化。
init()方法负责完成Animal、Stone和Point对象的创建。
setAmoutOfAnimal(int)方法负责设置动物的个数,即amountOfAnimal的值。
removeAnimalAndStone()方法负责从窗体中移掉动物和石头,即移掉Animal对象和Stone对象。
needDoing()方法负责执行一些经常需要重复执行的代码。
actionPerformed(ActionEvent)方法是ChangeAnimalWindow类实现的ActionListener接口中的方法。ChangeAnimalWindow创建的窗口是oneGradeItem、twoGradeItem、threeGradeItem、custom、leftImage、rightImage、defaultImage等菜单项和renew、quit、autoButton按钮的ActionEvent事件监视器。当用户选中某个菜单项或单击按钮时,窗口将执行actionPerformed(ActionEvent)方法进行相应的操作。如果用户选中oneGradeItem、twoGradeItem、threeGradeItem和custom四个菜单项的某一项时,actionPerformed(ActionEvent)方法所执行的操作就是改变amountOfAnimal的值,并执行needDoing()方法,完成必要的初始化。如果用户选中leftImage和rightImage菜单项的某一个时,actionPerformed(ActionEvent)方法所执行的操作就是改变leftImageFile和rightImageFile的引用。当用户单击renew按钮时,actionPerformed(ActionEvent)方法所进行的操作是保持当前的amountOfAnimal的值,并执行needDoing()方法,完成必要的初始化,当用户单击quit按钮时,actionPerformed(ActionEvent)方法所进行的操作是撤销当前“动物”的前一次跳跃。当用户单击autoButton按钮时,actionPerformed(ActionEvent)方法所进行的操作是弹出autoMoveAnimal对话框,用户可以通过该对话框让程序显示动物换位过程。
main(String)方法是程序运行的入口方法。
2.2.2 Animal类
自定义Animal类继承javax.swing.JPanel,其对象是数组animal的单元中的对象。Animal型数组animal是ChangeAnimalWindow窗口的重要成员之一。标明Animal类的主要成员变量和方法以及和ChangeAnimalWindow类之间组合关系的UML图,如图2-2-3所示。
成员变量
point是Point型对象,用来确定Animal对象在窗口中的位置。
isLeft是boolean型数据,用来确定Animal对象是否为“左”。
tool是Toolkit对象,用来获得Image对象。
leftImage和rightImage是File类型的对象,用来确定Animal对象上绘制的图像文件。
方法
Animal()是构造方法,负责完成Animal对象的初始化。
Animal对象调用setLeftImage(File)方法可以设置leftImage文件对象。
Animal对象调用setRightImage(File)方法可以设置rightImage文件对象。
Animal对象调用setIsLeft(boolean)设置自己是否为“左”的动物,即设置isLeft属性的值。
Animal对象调用getIsLeft()方法判断自己是否为“左”的动物,即返回isLeft属性的值。
Animal对象调用setAtPoint(Point)方法设置自己所在的“点”,即设置属性point的对象引用。
Animal对象调用getAtPoint()返回自己所在的“点”,即返回point对象的引用。
Animal对象调用paintComponent(Graphics)方法绘制图像,即绘制tool对象根据leftImage或rightImage文件所创建的Image对象。
2.2.3 Point类
Point创建的对象含有两个重要int型数据,分别用来表示窗体坐标系中的x轴坐标和y轴坐标值,窗体坐标系的原点是窗体的左上角,向右是x轴的正向,向下是y轴的正向。Point类创建的对象是数组point的单元中的对象。Point型数组point是ChangeAnimalWindow窗口的重要成员之一,其单元中的Point对象用来确定Animal对象和Stone对象在窗体中的位置。标明Point类的主要成员变量和方法以及和ChangeAnimalWindow类之间的组合关系的UML图,如图2-2-4所示。
成员变量
x和y是Point对象中的两个int型数据,分别用来表示窗体坐标系中的x轴和y轴坐标值。
haveAnimal是boolean数据,如果有Animal对象在该Point对象上时,该数据为true;否则为false。
animal是Animal类声明的对象,用来存放一个Animal对象的引用,标明该Animal对象在当前Point对象上。
2)方法
Point(int x,int y)是构造方法,用来创建Point对象。
Point对象调用isHaveAnimal()方法可以返回一个boolean数据,如果当前Point对象上有Animal对象,isHaveDisc()方法返回true;否则返回false。
Point对象调用setIsHaveAnimal(boolean boo)方法可以根据参数boo的值设置当前Point对象上是否有Animal对象。
Point对象getX()和getY()方法可以返回其中的x轴坐标和y轴坐标。
Point对象调用equals(TowerPoint p)方法可以判断当前Point对象是否和参数p指定的Point对象相同。
Point对象调用setThisAnimal(Animal animal)方法,指定参数animal在当前Point对象上。
Point对象调用getThisAnimal()方法可以返回当前Point对象上的Animal对象。
Point对象调用setThisStone(Stone stone)方法,指定参数stone在当前Point对象上。
Point对象调用getThisStone()方法可以返回当前Point对象上的Stone对象。
2.2.4 Stone类
Stone类是javax.swing包中JButton按钮组件的一个子类,创建的对象是数组stone的单元中的对象。Stone型数组stone是ChangeAnimalWindow窗口的重要成员之一。标明Stone类主要成员变量和方法以及和ChangeAnimalWindow类之间的组合关系的UML图,如图2-2-5所示。
1)成员变量
point是Point型数组,用来存放ChangeAnimalWindow窗体中point数组的引用。
step是ArrayList<Integer>数组表,用来存放移动“动物”的步骤。
spendTime用来记录用户移动“动物”所用时间。
recordTime是计时器。
success是boolean型数据,当该变量的值为true时表示用户成功地将左右动物换位。
countTime是boolean型数据,当该变量的值为true时,将启动计时器为用户计时;否则不为用户计时。
showTime是JTextField创建的文本框,负责显示用时。
2)方法
HandleMouse()是构造方法,负责创建HandleMouse对象。
handleMouse对象调用setPoint(Point[ ])方法将ChangeAnimalWindow窗体中的point对象的引用传递给该对象中的point,以便handleMouse移动窗体中的Animal对象。
handleMouse对象调用initStep()方法清空step中的数据。
handleMouse对象调用initSpendTime()将spendTime的值设置为0。
handleMouse对象调用setCountTime(boolean)设置是否启动计时器。
handleMouse对象调用getStep()返回step对象。
mousePressed(MouseEvent)是HandleMouse类实现的MouseListener接口中的方法,当用户用在ChangeAnimalWindow窗体中的Animal对象上按下鼠标时,将触发MouseEvent鼠标事件,handleMouse对象将调用执行mousePressed(MouseEvent)方法对事件作出处理,即根据规则移动当前被鼠标单击的Animal对象。
mouseReleased(MouseEvent)方法是HandleMouse类实现的MouseListener接口中的方法,ChangeAnimalWindow窗体中的Animal对象上释放鼠标时,将触发MouseEvent鼠标事件,handleMouse对象将调用执行mouseReleased(MouseEvent)方法对事件作出处理,其主要操作是判断用户是否已经成功地将左右动物换位。
actionPerformed(ActionEvent)是HandleMouse类实现的ActionListener接口中的方法。使用Timer类的构造方法:Timer(int a,Object b)创建了计时器:recordTime,其中的参数a的单位是毫秒,确定计时器每隔a毫秒“振铃”一次,参数b是计时器的监视器。在这里取a=1000,监视器b是当前handleMouse对象。计时器发生的振铃事件是ActionEvent事件,当振铃事件发生时,监视器就会监视到这个事件,监视器就会调用actionPerformed(ActionEvent)方法。当振铃每隔1000毫秒发生一次时,方法actionPerformed(ActionEvent)就被执行一次,所执行的操作就是按着step指定的步骤移动一个Animal对象。
2.2.6 AutoMoveAnimal类
AutoMoveAnimal类是javax.swing包中JDialog的子类,并实现了ActionListener接口,创建的对象autoMoveAnimal是ChangeAnimalWindow的成员之一。标明AutoMoveAnimal类的主要成员变量、方法以及和ChangeAnimalWindow类之间的组合关系的UML图,如图2-2-7所示。
1)成员变量
point是Point型数组,用来存放ChangeAnimalWindow窗体中point数组的引用。
step是ArrayList<Integer>型对象,用来存放移动“动物”的步骤。
bStart,bStop,bContinue,bClose是JButton按钮,当用户单击bStart按钮时,程序将按着step中的步骤开始移动动物;单击按钮bStop时,暂停移动动物;单击bContinue按钮时,恢复移动动物;单击bClose按钮时,关闭当前对话框,并停止移动动物。
time是javax.swing包中Timer类创建的计时器。使用Timer类的构造方法:Timer(int a,Object b)创建一个计时器,其中的参数a的单位是毫秒,确定计时器每隔a毫秒“振铃”一次,参数b是计时器的监视器,在这里我们取a=1000,监视器b是当前对话框。计时器发生的振铃事件是ActionEvent类型事件,当振铃事件发生时,监视器就会监视到这个事件,监视器就回调ActionListener接口中的actionPerformed方法。当振铃每隔1000毫秒发生一次时,方法actionPerformed就被执行一次,并按着step指定的步骤移动一个动物。
2)方法
AutoMoveAnimal()是构造方法,用来创建对象autoMoveAnimal。
autoMoveAnimal对象调用setPoint(Point[ ])方法将ChangeAnimalWindow窗体中point数组的引用传递给对象,以便autoMoveAnimal对象移动ChangeAnimalWindow窗体中的动物。
actionPerformed(ActionEvent)是接口ActionListener中的方法。当用户单击bStart、bStop、bContinue或bClose当中任何一个按钮时,autoMoveDisc对象将调用执行actionPerformed(ActionEvent)方法,该方法的操作是,如果用户单击了bStart按钮,就按着moveStep中的步骤开始移动盘子;如果单击了bStop按钮,就暂停移动盘子;如果单击了bContinue按钮,就恢复移动盘子;如果单击了bClose按钮,就关闭当前对话框,并停止移动盘子。
autoMoveAnimal对象调用setStep()方法设置step对象中的数据。step是ArrayList<Integer>,存放着移动“动物”的步骤,这些步骤是setStep()用算法生成了整数序列,例如,当step中存放的整数序列是“4,3,2,4”时,那么该序列表示了两个连续的移动步骤:“将point[4]上的动物移动到point[3]上”和“将point[2]上的动物移动到point[4]上”。
2.2.7 ShowRecordDialog类
ShowRecordDialog类是javax.swing包中JDialog的子类,并实现了ActionListener接口,该类创建的对象showDialog是ChangeAnimalWindow窗口的成员之一。当用户选择窗口上的“英雄榜”菜单中的选项,该对话框可见,并显示相应级别文件中存储的成绩。标明ShowRecordDialog类的主要成员变量、方法以及和ChangeAnimalWindow类之间组合关系的UML图,如图2-2-8所示。
1)成员变量
gradeFile是对话框要读取的文件,该文件存储成绩。
clear是注册了ActionEvent事件的按钮。
showArea文本区显示对话框从gradeFile文件中读出的成绩。
treeSet负责将成绩按高低排序。
2)方法
ShowRecordDialog()是构造方法,负责创建showDialog对象。
setGradeFile(File)方法。ShowRecordDialog类创建的ShowRecordDialog对话框是主类ChangeAnimalWindow窗口中的一个成员。当用户选择窗口上的“英雄榜”菜单中的菜单项时,ShowRecordDialog对话框调用setGradeFile(File)方法将相应的级别文件传递给gradeFile。
showRecord()方法。ShowRecordDialog对话框调用showRecord()方法读取gradeFile文件中的成绩,为了将成绩按高低顺序显示在showArea文本区中,showRecord()方法根据读取的名字和该名字的对应成绩,创建一个People对象,并将该People对象存放在treeSet树集中。
actionPerformed(ActionEvent)是ActionListener接口中的方法,clear注册了ActionEvent事件,当用户单击clear按钮时,actionPerformed(ActionEvent)方法被调用执行,清除gradeFile文件中的内容。
2.2.8 People类
People对象中的数据由ShowRecordDialog对话框从gradeFile文件中读取的用户姓名和成绩所构成。ShowRecordDialog对话框将People对象作为其treeSet树集上的节点,以便按着成绩高低排列People对象。标明People的主要成员变量、方法以及和ShowRecordDialog类之间关系的UML图,如图2-2-9所示。
以下是UML图中有关数据和方法的详细说明。
1)成员变量
name是用户的名字。
time是用户的用时。
2)方法
getTime()方法返回time。
getName()方法返回name。
compareTo(Object)是comparable接口中的方法,其操作是确定People对象的大小关系。
2.2.9 Record类
Record是javax.swing包中JDialog的子类,并实现了ActionListener接口,该类创建的对象record是HandleMouse类的成员之一。当用户成功完成游戏时,程序弹出Record对话框,用户使用该对话框提供的界面将成绩保存到相应的文件中。标明Record类的主要成员变量、方法以及和HandleMouse类之间关系的UML图,如图2-2-10所示。
1)成员变量
time是用户的用时。
yourName是用户用来输入名字的文本框。
enter、cancel是按钮对象,用户单击enter按钮可保存成绩,单击cancel按钮可放弃保存成绩。
gradeFile是级别文件。
2)方法
Record()是构造方法,负责创建record对象。
setGradeFile(File)方法。Record类创建的Record对话框是测试区HandleMouse中的一个成员。当用户成功完成游戏时测试区弹出Record对话框,Record对话框将调用setGradeFile(File)方法将测试区中的级别文件传递给Record对话框gradeFile。
setTime(int)方法。当用户成功完成游戏后,测试区弹出Record对话框,Record对话框将调用setTime(int)方法将测试区记录的用户用时传递给Record对话框中的time。
actionPerformed(ActionEvent)是ActionListener接口中的方法,enter和cancel按钮注册了ActionEvent事件,当用户单击enter时,actionPerformed(ActionEvent)方法被调用执行,其操作是将用户在文本框yourName中输入的名字以及time的值保存到gradeFile文件中,然后关闭当前对话框;当用户单击cancel按钮时,actionPerformed(ActionEvent)方法将被调用执行,其操作是关闭当前对话框。
2.2.10 Customdlg类
Customdlg是javax.swing包中JDialog的子类,并实现了ActionListener接口,该类创建的对象record是ChangeAnimalWindow类的成员之一。当用户单击菜单中“自定义”级别按钮设置时,程序弹出Customdlg对话框,用户使用该对话框可以设置游戏的动物数量。标明Customdlg类的主要成员变量、方法以及和ChangeAnimalWindow类之间关系的UML图,如图2-2-11所示。
针对本设计由于时间和技术有限,我觉得还有如下需要改进的地方:
对“自定义”级别动物数量设置中,数量输入时不能太大,否则在主窗口显示的动物图像会非常窄小。建议应设定一个上限,当达到上限时弹出提示信息,提醒用户“您输入的数量太大”。对“我超时了吗”,如果超时,则弹出提示消息后,左右两边图像被其他图像代替。但是如果在没有关闭游戏时,重新开始再玩一盘,如果再超时,同样弹出提示信息,但图像不会再调换。因此,建议能在此改进,使得能不停调换。对“英雄榜”中记录用户玩游戏时的成绩,但不能在当玩家成绩在排行榜中排进前三弹出提示信息。在此希望在以后的学习中继续改进。
在设计的过程中了解到自己的知识还是比较有限,更肯定了自己在以后学习编程的道路.上坚定不移的但由于只学习了一个学期的JAVA语言,自己水平有限,使得程序还有不是很完善。回 顾起此次java,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西
以上的Word格式文档51黑下载地址(不含程序):
艾克拜尔·伊波拉音.doc
(1.33 MB, 下载次数: 9)
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |