1 设计要求
设计GUI界面的Hannoi塔。汉诺塔中有三个座,名字分别为A,B,C。初始状态时A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。释放鼠标来放置该盘子。
程序要求用户在移动盘子的过程中,不允许吧大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。
用户可以通过Hannoi塔界面提供的菜单来选择初级、中级和高级三个级别。初级级别A座上有3个大小不等盘子、中级级别A座上有4个大小不等盘子、高级级别A座上有5个大小不等盘子。
用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上。
用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始当前的级别。
2 总体设计
在设计hannoi塔时,需编写6个java源文件:HannoiWindow.java、Tower.java、TowerPoint.java、Disc.java、HandleMouse.java和AutoMoveDisc.java。
Hannoi塔除了要编写的6个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JMenuBar、JMenu、JMenuItem和JButton。Hannoi塔所用到的一些重要的类以及之间的组合关系如图1所示:
2.1 HannoiWindow.java类设计
HannoiWindow类负责创建Hannoi塔的主窗口,该类含有main方法,Hannoi塔从该类开始执行。HannoiWindow类的成员变量中有五种重要类型的对象、一个int基本型数据和一个char型数组。五种类型的对象分别是:Tower、JMenuBar、JMenu、JMenuItem和JButton对象。
HannoiWindow类的主要成员的作用将在后面的详细设计中阐述。
2.2 Tower类设计
Tower类是javax.swing包中Jpanel容器的子类,创建的容器被添加到HannoiWindow窗口的中心。Tower类的成员变量中有四种重要类型的对象、一个int基本型数据和一个char型数组。四种类型的对象分别是:Disc、TowerPoint、HandleMouse、和AutoMoveDisc对象。Tower类的主要成员的作用将在后面的详细设计中阐述。
2.3 Disc类设计
Disc类是Jbutton的一个子类,创建的对象时Tower容器中的一个按钮,用来表示Tower中的“盘子”。
2.4 TowerPoint类设计
TowerPoint类负责在Tower中创建表示位置的塔点对象。
2.5 HandleMouse类设计
HandleMouse类创建的对象负责处理鼠标事件。
2.6 AutoMoveDisc类设计
AutoMoveDisc类创建的对象负责自动移动盘子从一个座到另一个座。
3 详细设计
3.1 HannoiWindow类
HannoiWindow类是javax.swing包中JFrame的一个子类。
3.2 Tower类
Tower类是javax.swing包中Jpanel容器的一个子类,创建的对象tower是HannoiWindow窗口的成员之一,被添加到HannoiWindow窗口的中心位置。
3.3 Disc类
Disc类是javax.swing包中JButton类的子类,所创建的对象称作Hannoi塔中的“盘子”。Tower类有Disc类型的数组disc。disc数组的单元是用Disc创建的对象,被放置在Tower所创建的容器tower中,用来表示tower中的盘。
3.4 TowerPoint类
TowerPoint所创建的对象将作为Tower类中TowerPoint型数组pointA、pointB和pointC中的元素。
3.5 HandleMouse类
HandleMouse类实现了MouseListener和MouseMotionListener接口,创建的对象handleMouse是tower容器的成员之一,负责监视tower容器中Disc盘子对象上的鼠标事件。当用户用鼠标单击tower中的盘子,并拖动鼠标时,handleMouse对象负责给出移动盘子的有关算法。
3.6 AutoMoveDisc类
AutoMoveDisc类实现了ActionListener接口,创建的对象autoMoveDisc是Tower的成员之一。
4 代码调试问题
将前面6个Java源文件:HannoiWindow.java、Tower.java、TowerPoint.java、Disc.java、HandleMouse.java和AutoMoveDisc.java保存同一目录中。分别编译这6个Java源文件,或运行“javac *.java”命令,编译全部源文件,然后运行主类,即运行HannoiWindow类。
5 软件发布
可以使用jar.exe命令制作JAR文件夹来发布编写的软件。
首先用文本编辑器,如Windows下的“记事本”,编写一个清单文件:
mymoon.mf
Manifest-Version:1.0
Main-Class:HannoiWindow
Created-By:1.2(SunMicrosoftInc.)
将mymoon.mf 保存到D:\ch3中,即和应用程序所用的字节码文件保存在相同的目录中。
注意:清单文件中的“Manifest-Version:”和1.0之间、“Main-Class:”
和主类HannoiWindow之间以及“Created-By:”和1.2之间必须有且只有一个空格。
生成JAR文件
D:\ch3\jar cfmHannoi.jar mymoon.mf*.class
其中,参数c表示要生成一个新的JAR文件,f表示要生成的JAR文件的名字,m表示清单文件的名字。
现在就可以将Hannoi.jar复制到任何一个安装了Java运行环境(版本号需高于1.2d的计算机上)的计算机上,用户用鼠标双击该文件的图标就可以运行该软。
6 程序运行效果
选择Hannoi塔的级别
Hannoi塔高级玩法
中级Hannoi塔自动演示玩法
7 设计心得
通过这一周的实训,虽然实训的时间不长,但是总体上收获挺大的,当我们正式准备学习实训java编程技术时,让我感到非常高兴,因为java一直学的是课本知识,所以实训对于我来说是必须要学会熟练操作的。当然开始学习后也并非是想象中那样顺利,开始的学习让我异常感到学习任务的艰巨,因为学习中我遇到了很多以前未曾遇到的难点,有时后也难免会失去耐心,但是,通过老师的指导,自己的努力的练习,我顺利的化解了一道道的障碍。克服了Java学习上的一道道难关,现在自己已经基本掌握了java的基础知识。