找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2514|回复: 0
打印 上一主题 下一主题
收起左侧

Java GUI界面的动物换位游戏设计思路分享

[复制链接]
跳转到指定楼层
楼主
ID:838760 发表于 2020-11-5 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序分为不同的级别,左右各有动物,中间石头没有动物,将左右动物交换,不可后退。用鼠标单击一个动物,如果该动物前方的石头上没有动物,该动物就跳跃到该石头上,如果该动物前方的石头上有动物,但隔位上的石头没有动物,该动物就越过自己前面的动物跃到石头上,其他情形时,该动物不能跳跃。不能持续玩的可以点自动演示,将自动完成游戏,可以帮助游戏者更好的了解系统的主体功能,通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、等开发工具的运用,拓宽常用类库的应用。使我们通过该教学环节与手段,把所学及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。

1.1设计目的
1.2设计要求和设计指标
1.3开发技术
1.3.1 Java语言简介
1.3.2 Java语言的开发工具包JDK
1.3.3 Eclipse开发环境
2 设计内容
2.1总体设计
2.1.1 ChangeAnimalWindow.java(主类)
2.1.2 Animal.java
2.1.3 Point.java
2.1.4 Stone.java
2.1.5 HandleMouse.java
2.1.6 AutoMoveAnimal.java
2.1.7 Customdlg.java
2.1.8 People.java
2.1.9 Record.java
2.1.10 ShowRecordDialog.java
2.2详细设计
2.2.1 ChangeAnimalWindow类(主类)
2.2.2 Animal类
2.2.3 Point类
2.2.4 Stone类
2.2.5 HandleMouse类
2.2.6 AutoMoveAnimal类
2.2.7 ShowRecordDialog类
2.2.8 People类
2.2.9 Record类
2.2.10 Customdlg类
2.3 程序测试
2.3.1 主程序调试
2.3.2 组件调试
2.3.3 菜单调试

训练掌握、加深理解并巩固《Java 2 实用教程》中所学到的基本概念、编程思路;
综合运用Java程序设计的编程方法,能够利用这些程序设计方法来解决工程和科研中常见的实际问题;
培养分析问题、解决问题的能力,进一步提高进行大型程序设计的能力。
1.2.   设计要求
设计GUI界面的动物换位游戏,游戏的结果是让左右两组动物交换位置。具体要求如下:
(1)程序分为4个级别,用户可以通过界面上提供的菜单选择“初级”、“中级”、“高级”、“自定义”这4个级别。对于“初级”级别,在水平排列的7块石头上的左右各有3个类型相同的动物,中间的石头上没有动物;对于“中级”级别,在水平排列的9块石头上的左右各有4个类型相同的动物,中间的石头上没有动物;对于“高级”级别,在水平排列的11块石头上的左右各有5个类型相同的动物,中间的石头上没有动物;对于“自定义”级别,用户可以输入自己想设置的一个动物数量(输入的数必须是偶数),在水平排列的N块石头上的左右各有(N-1)/2个类型相同的动物,中间的石头上没有动物。
(2)用鼠标单击一个的动物,如果该动物前方的石头上没有动物,该动物就跳跃到该石头上,如果该动物前方的石头上有动物,但隔位上的石头没有动物,该动物就越过自己前面的动物跃到石头上,其他情形时,该动物不能跳跃(跳跃时不能超过2块石头)。
(3)左面的动物只能向右方跳跃,右面的动物只能向左方跳跃。
(4)用户可以通过单击界面上提供的按钮,让程序自动完成动物换位。
(5)可以随时单击界面上提供的按钮,重新开始当前的级别。
(6)用户可以通过菜单选项,可以选择左、右动物的图像。
(7)该游戏提供了游戏成绩记录,用户可以单击界面上的菜单选项查看英雄榜和检测是否超时,看看自己水平怎么样。
(8)该程序也提供了游戏规则,不知道游戏规则的可以在菜单中查看帮助。
(9)在进行游戏时具有音效的效果。
1.3. 开发技术
1.3.1 Java语言简介
Java是一种简单易用的编程语言,它采用了一种虚拟机作为中间层来屏蔽平台差异,能够实现跨平台运行。Java支持面向对象编程,有封装、继承、多态的特性,它还支持多线程,实现多个程序流程同时执行,完成不同任务。
1.3.2 Java语言的开发工具包JDK
JDK(Java Development Kit)是Java语言的开发工具包,工具包里除了包含Java语言编译器、调试器以及演示程序以外,一般还会包含Java运行环境(Java Runtime Environment,JRE)。JRE是某一平台运行Java程序的软件环境,包括虚拟机(JVM)和核心类库等。
1.3.3 Eclipse开发环境
Eclipse是一个开放源代码的、基于Java的可扩展开发平台,是目前非常流行的跨平台的自由集成开发环境(IDE)。最初主要用于Java语言开发,但是目前也有人通过插件使其作为其他编程语言(如C++、PHP)的开发工具。Eclipse本身也只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。
Eclipse本身核心非常小,其设计思想是“一切皆为插件”。其他功能都是基于插件的形式与Eclipse无缝结合,协同工作,如Eclipse的图形API、多国语言包等。在Eclipse启动后,要真正用到某个插件时,该插件才会被动态载入内存,不再被使用的插件会在适当的时候被清除内存,所以不必担心某些不常用的插件消耗内存。插件机制使得Eclipse具有了无限扩展的可能。

2.   设计内容
2.1.   总体设计
在设计动物换位时,需要编写10个Java源文件:ChangeAnimalWindow.java、Point.java、Animal.java、Stone.java、HandleMouse.java、AutoMoveAnimal.java、People.java、Record.java、ShowRecordDialog.java和Customdlg.java。
动物换位除了需要编写上述10个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如:JmenuItem、File和Jbutton类等。动物换位所用到的一些重要的类以及之间组合关系如图2-1所示。
以下是10个Java源文件的总体设计。

ChangeAnimalWindow类负责创建动物换位的主窗口,该类含有main方法,程序从该类开始执行。ChangeAnimalWindow类的成员变量中有七种重要类型的对象:Animal、Point、Stone、HandleMouse、Customdlg、ShowRecordDialog和AutoMoveAnimal对象。

2.1.2 Animal.java

Animal类是JPanel的一个子类,创建的对象是ChangeAnimalWindow类的重要成员之一,用来表示“动物”。

2.1.3 Point.java

Point类负责创建确定位置的对象,使用Point对象,可以确定Animal以及Stone对象在窗体中的位置。

2.1.4 Stone.java

Stone类是JButton的一个子类,创建的对象表示“石头”。

2.1.5 HandleMouse.java

HandleMouse类所创建的对象负责处理鼠标事件。

2.1.6 AutoMoveAnimal.java

AutoMoveAnimal类所创建的对象使用算法完成动物的自动换位。

2.1.7 Customdlg.java

Customdlg类所创建的对象用来设置“自定义”级别的动物数量。

2.1.8 People.java

People对象封装用户的名字和成绩,以便ShowRecordDialog对象可以按成绩的高低排序用户。

2.1.9 Record.java

Record类是javax.swing包中JDialog对话框的子类,当用户成功完成相应级别的游戏时,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。

2.1.10 ShowRecordDialog.java

ShowRecordDialog类是javax.swing包中JDialog对话框的子类,当用户单击查看相应的级别排行榜时,ShowRecordDialog创建的对象负责显示用户的成绩。

2.2.   详细设计2.2.1 ChangeAnimalWindow类(主类)

1)效果图

ChangeAnimalWindow创建的窗口效果如图2-2-1所示:

图2-2-1  ChangeAnimalWindow创建的窗口

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所示。



  • 成员变量
  • AmountOfAnimal是用户设置的动物数量。
  • lbl是提示用户输入动物数量的标签。
  • text是用户用来输入的文本框。
  • 方法
  • Customdlg(Frame f,String s,boolean b)是构造方法,负责创建Customdlg的对象。
  • getAmountOfAnimal()方法。当用户输入动物数量时,用来返回动物的数量的方法。
  • actionPerformed(ActionEvent e)ActionListener接口中的方法,当用户输入数量后,按下回车键时,被调用执行做事件处理,起的作用是设置动物数量。

2.3.   程序测试2.3.1 主程序
图2-3-1  主窗口调试
图2-3-2  游戏运行调试





2.3.2 组件测试

图2-3-3  自动演示按钮调试
2.3.3 菜单测试
选择级别
选择级别菜单调试如图2-3-4、图2-3-5:
图2-3-4  选择“中级”级别
图2-3-5  选择“中级”级别后动物数量发生变化
选择动物图像菜单测试如图2-3-6、图2-3-7、图2-3-8所示
图2-3-6  选择“左面动物的图像”
图2-3-7 弹出打开对话框,选择pigone.jpg
图2-3-8  左边动物图像变成了pigone.jpg
选择英雄榜中“初级英雄榜”调试图,如图2-3-9、2-3-10所示
图2-3-9  选择“初级英雄榜”
图2-3-10  弹出“初级英雄排行榜”对话框
选择英雄榜中“我超时了吗”,验证我的游戏时间,如图2-3-11、2-3-12、2-3-13:
图2-3-11 点击“我超时了吗”
图2-3-12  在超过(动物数量*5)s=6*5=30的时间里弹出对话框
图2-3-13  超过时间后左右两边的图像会换掉


选择“帮助”调试图,如图2-3-14、2-3-15:
图2-2-14  点击“游戏规则”
图2-3-15  弹出“游戏规则”对话框



3.   本设计改进建议

针对本设计由于时间和技术有限,我觉得还有如下需要改进的地方:

对“自定义”级别动物数量设置中,数量输入时不能太大,否则在主窗口显示的动物图像会非常窄小。建议应设定一个上限,当达到上限时弹出提示信息,提醒用户“您输入的数量太大”。对“我超时了吗”,如果超时,则弹出提示消息后,左右两边图像被其他图像代替。但是如果在没有关闭游戏时,重新开始再玩一盘,如果再超时,同样弹出提示信息,但图像不会再调换。因此,建议能在此改进,使得能不停调换。对“英雄榜”中记录用户玩游戏时的成绩,但不能在当玩家成绩在排行榜中排进前三弹出提示信息。在此希望在以后的学习中继续改进。


在设计的过程中了解到自己的知识还是比较有限,更肯定了自己在以后学习编程的道路.上坚定不移的但由于只学习了一个学期的JAVA语言,自己水平有限,使得程序还有不是很完善。回 顾起此次java,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西


以上的Word格式文档51黑下载地址(不含程序):

艾克拜尔·伊波拉音.doc (1.33 MB, 下载次数: 9)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表