动物换位.docx
- 文档编号:10660367
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:54
- 大小:496.62KB
动物换位.docx
《动物换位.docx》由会员分享,可在线阅读,更多相关《动物换位.docx(54页珍藏版)》请在冰点文库上搜索。
动物换位
《面向对象程序设计》
课程设计报告
题目:
动物换位软件设计与实现
院(系):
信息科学与工程学院
专业班级:
计算机科学与技术1201班
学生姓名:
程伟
学号:
20121183011
指导教师:
吴奕
2014年12月29日至2015年1月9日
华中科技大学武昌分校制
面向对象程序设计课程设计任务书
一、设计(调查报告/论文)题目
动物换位软件设计与实现
二、设计(调查报告/论文)主要内容
内容:
程序分为不同的级别,左右各有动物,中间石头没有动物,不可后退。
用鼠标单击一个动物,如果该动物前方的石头上没有动物,该动物就跳跃到该石头上,如果该动物前方的石头上有动物,但隔位上的石头没有动物,该动物就跳跃到该石头上,其他情形时,该动物不能跳跃。
如果对游戏有疑问可以点击帮助,查看游戏规则。
不能继续玩的可以点自动演示,将自动完成游戏,可以帮助游戏者更好的了解系统的主体功能
基本功能与要求:
(1)程序分为4个级别,用户可以通过界面上提供的菜单选择“初级”、“中级、“高级”、“自定义”这4个级别。
(2)用鼠标单击一个的动物,如果该动物前方的石头上没有动物,该动物就跳跃到该石头上。
(3)左面的动物只能向右方跳跃,右面的动物只能向左方跳跃。
(4)用户可以通过单击界面上提供的按钮,让程序自动完成动物换位。
(5)该游戏提供了游戏成绩记录,用户可以单击界面上的菜单选项查看英雄榜和检测是否超时,看看自己水平怎么样。
三、原始资料
1.《面向对象程序设计课程设计》指导书
2.耿祥义.JAVA大学实用教程.北京:
清华大学出版社,2009.
四、要求的设计(调查/论文)成果
1.课程设计报告
2.课程设计软件
五、进程安排
布置任务,查找资料、需求分析1天
总体设计1天
详细设计1.5天
编制源程序实现3.5天
测试与修改1天
撰写课设报告2天
六、主要参考资料
[1]张广彬.Java课程设计案例精编(第二版).北京:
清华大学出版社,2011.
[2]耿祥义.Java课程设计(第二版).北京:
清华大学出版社,2008.
[3]耿祥义.JAVA大学实用教程.北京:
清华大学出版社,2009.
[4]邹林达.陈国君Java2程序设计基础.北京:
清华大学出版社,2010.
[5]邹林达.Java2程序设计基础实验指导.北京:
清华大学,2010.
指导教师(签名):
20年月日
目录
1需求与总体设计1
1.1需求分析1
1.2总体设计思路1
1.2.1ChangeAnimalWindow.java(主类)1
1.2.2Animal.java2
1.2.3Point.java2
1.2.4Stone.java2
1.2.5HandleMouse.java2
1.2.6AutoMoveAnimal.java2
1.3系统流程图2
1.4UML类图4
2详细设计5
2.1ChangeAnimalWindow类(主类)5
2.2Animal类7
2.3Point类9
2.4Stone类10
2.5HandleMouse类11
2.6AutoMoveAnimal类13
3编码实现16
4系统测试41
总结42
1需求与总体设计
1.1需求分析
动物换位显而易见是实行不同动物的位置对换,主要是将运行框中的左边的图片跟右边的图片实行对换,将两边的图片移到对边的位置,就是此游戏的目的。
系统根据游戏目的设置相应的程序,实现系统目标。
1.2总体设计思路
在设计动物换位时需要编写6个Java源文件:
ChangeAnimalWindow.java、Point.java、Animal.java、Stone.java、HandleMouse.java、AutoMoveAnimal.java、
动物换位除了需要编写上述6个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如:
JmenuItem、File和Jbutton类等。
动物换位所用到的一些重要的类以及之间组合关系如图1-1所示。
以下是10个Java源文件的总体设计
图1-1类之间的组合关系
1.2.1ChangeAnimalWindow.java(主类)
ChangeAnimalWindow类负责创建动物换位的主窗口,该类含有main方法,程序从该类开始执行。
1.2.2Animal.java
Animal类是JPanel的一个子类,创建的对象是ChangeAnimalWindow类的重要成员之一,用来表示“动物”。
1.2.3Point.java
Point类负责创建确定位置的对象,使用Point对象,可以确定Animal以及Stone对象在窗体中的位置。
1.2.4Stone.java
Stone类是JButton的一个子类,创建的对象表示“石头”。
1.2.5HandleMouse.java
HandleMouse类所创建的对象负责处理鼠标事件。
1.2.6AutoMoveAnimal.java
AutoMoveAnimal类所创建的对象使用算法完成动物的自动换位。
1.3系统流程图
1.4UML类图
图1-2UML类图
2详细设计
2.1ChangeAnimalWindow类(主类)
1.效果图
ChangeAnimalWindow创建的窗口效果如图2-1所示:
图2-1动物换位的主窗口
2.UML图
ChangeAnimalWindow类是javax.swing包中的JFrame的一个子类,并实现了ActionListener接口,标明该类的主要成员变量和方法的UML图如图2-2所示。
以下是UML图中有关数据和方法的详细说明。
图2-2ChangeAnimalWindow类的UML图
3.以下是UML图中有关数据和方法的详细说明
1)成员变量
●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事件监视器。
2)方法
●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.2Animal类
1.效果图
Animal创建的对象效果图如图2-3所示:
图2-3动物的效果图
2.UML图
Animal类是javax.swing包中JPanel容器的一个子类,创建的对象是数组animal的单元中的对象。
Animal型数组animal是ChangeAnimalWindow窗口的重要成员之一。
标明Animal类的主要成员变量和方法以及和ChangeAnimalWindow类之间组合关系的UML图,如图2-4所示。
图2-4Animal类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
●point是Point型对象,用来确定Animal对象在窗口中的位置。
●isLeft是boolean型数据,用来确定Animal对象是否为“左”。
●tool是Toolkit对象,用来获得Image对象。
●leftImage和rightImage是File类型的对象,用来确定Animal对象上绘制的图像文件。
2)方法
●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.3Point类
1.效果图
Point创建的对象,负责刻画Animal对象和Stone对象所在的位置,无可显示的效果图。
2.UML图
Point创建的对象含有两个重要int型数据,分别用来表示窗体坐标系中的x轴坐标和y轴坐标值,窗体坐标系的原点是窗体的左上角,向右是x轴的正向,向下是y轴的正向。
Point类创建的对象是数组point的单元中的对象。
Point型数组point是ChangeAnimalWindow窗口的重要成员之一,其单元中的Point对象用来确定Animal对象和Stone对象在窗体中的位置。
标明Point类的主要成员变量和方法以及和ChangeAnimalWindow类之间的组合关系的UML图,如图2-5所示。
图2-5Point类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
●x和y是Point对象中的两个int型数据,分别用来表示窗体坐标系中的x轴和y轴坐标值。
●haveAnimal是boolean数据,如果有Animal对象在该Point对象上时,该数据为true;否则为false。
●animal是Animal类声明的对象,用来存放一个Animal对象的引用,标明该Animal对象在当前Point对象上。
2)方法
●Point(intx,inty)是构造方法,用来创建Point对象。
●Point对象调用isHaveAnimal()方法可以返回一个boolean数据,如果当前Point对象上有Animal对象,isHaveDisc()方法返回true;否则返回false。
●Point对象调用setIsHaveAnimal(booleanboo)方法可以根据参数boo的值设置当前Point对象上是否有Animal对象。
●Point对象getX()和getY()方法可以返回其中的x轴坐标和y轴坐标。
●Point对象调用equals(TowerPointp)方法可以判断当前Point对象是否和参数p指定的Point对象相同。
●Point对象调用setThisAnimal(Animalanimal)方法,指定参数animal在当前Point对象上。
●Point对象调用getThisAnimal()方法可以返回当前Point对象上的Animal对象。
●Point对象调用setThisStone(Stonestone)方法,指定参数stone在当前Point对象上。
●Point对象调用getThisStone()方法可以返回当前Point对象上的Stone对象。
2.4Stone类
1.效果图
Stone创建的对象效果如图2-6所示:
图2-6Stone类的效果图
2.UML图
Stone类是javax.swing包中JButton按钮组件的一个子类,创建的对象是数组stone的单元中的对象。
Stone型数组stone是ChangeAnimalWindow窗口的重要成员之一。
标明Stone类主要成员变量和方法以及和ChangeAnimalWindow类之间的组合关系的UML图,如图2-7所示:
图2-7Stone类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
iconStone用来确定Stone对象上的图标。
2)方法
Stone()是构造方法,用来创建Stone对象。
2.5HandleMouse类
1.效果图
HandleMouse创建的对象效果如图2-8所示:
图2-8HandleMouse创建的对象
2.UML图
HandleMouse类是javax.swing包中JPanel容器的一个子类,同时实现了MouseListener和ActionListener接口,创建的对象handleMouse是ChangeAnimalWindow类的成员之一,负责监视animal数组中的Animal对象上的鼠标事件。
当用户用鼠标单击Animal对象时,handleMouse对象负责给出移动Animal对象的有关算法。
标明HandleMouse类的主要成员变量、方法以及和ChangeAnimalWindow类之间组合关系的UML图,如图2-9所示。
图2-9HandleMouse类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
●point是Point型数组,用来存放ChangeAnimalWindow窗体中point数组的引用。
●step是ArrayList
●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(inta,Objectb)创建了计时器:
recordTime,其中的参数a的单位是毫秒,确定计时器每隔a毫秒“振铃”一次,参数b是计时器的监视器。
在这里取a=1000,监视器b是当前handleMouse对象。
计时器发生的振铃事件是ActionEvent事件,当振铃事件发生时,监视器就会监视到这个事件,监视器就会调用actionPerformed(ActionEvent)方法。
当振铃每隔1000毫秒发生一次时,方法actionPerformed(ActionEvent)就被执行一次,所执行的操作就是按着step指定的步骤移动一个Animal对象。
2.6AutoMoveAnimal类
1.效果图
AutoMoveAnimal类创建的对话框的效果如图2-10所示。
单价对话框上的“演示”按钮,ChangeAnimalWindow窗体将演示左右动物换位的步骤,如图2-11所示。
步骤间隔时间是1秒,单击“暂停”按钮暂停演示,单击“继续”按钮恢复演示。
图2-10演示动物换位图2-11按着算法进行换位
2.UML图
AutoMoveAnimal类是javax.swing包中JDialog的子类,并实现了ActionListener接口,创建的对象autoMoveAnimal是ChangeAnimalWindow的成员之一。
标明AutoMoveAnimal类的主要成员变量、方法以及和ChangeAnimalWindow类之间的组合关系的UML图,如图2-12所示。
图2-12AutoMoveAnimal类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
●point是Point型数组,用来存放ChangeAnimalWindow窗体中point数组的引用。
●step是ArrayList
●bStart,bStop,bContinue,bClose是JButton按钮,当用户单击bStart按钮时,程序将按着step中的步骤开始移动动物;单击按钮bStop时,暂停移动动物;单击bContinue按钮时,恢复移动动物;单击bClose按钮时,关闭当前对话框,并停止移动动物。
●time是javax.swing包中Timer类创建的计时器。
使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动物 换位