东华理工大学理学院信计Java课程设计
Tower窗口的中心。HannoiTower类的成员变量有两种重要类型的对象、一个int基类型数据和一个char型数组。两种类型的对象分别是:Disk、TowerPoint。 (3)TowerPoint.java
TowerPoint类负责在HannoiTower中创建表示位置的塔点对象。 (4)Disk.java
Disk类是Button的一个子类,创建的对象是HannoiTower容器中的一个按钮,用来表示HannoiTower中的盘子。
2. 流程图(图4-1) 3. 自定义类说明
(1)自定义类 类名: JButton
作用: 自定义主类, 实现圆盘的类Disc继承JButton类 继承的父类: Disc类 实现的接口: 没有
(2)成员变量 JButton成员变量 成员变量描述 控制盘子数目 重新开始 开始游戏 背景颜色 盘子颜色
(3)方法表
- 6 -
变量类型 String String String String String JLabel 名称 renew.setText renew.setText bgcolor pzcolor 东华理工大学理学院信计Java课程设计
Chesspad方法 方法名 fillRect() g.fillOval() drawString() setBackground() Timer(int a,Object b) stop() write actionPerformed evaluate 功能 绘制出矩形区域 绘制相同数目点 绘制出A、B、C座 创建一个计时器 停止计时器计时 保存文件 事件处理 评估 设置背景颜色和盘子颜色 备注 构造方法 构造方法 构造方法 构造方法 构造方法 接口方法 接口方法 五.系统详细设计
Tower类
Tower类是javax.swing包中Frame的一个子类,标明该类的主要成员变量和方法:
① 成员变量
tower是HannoiTower创建的对象。tower对象是一个容器,刻画了Hannoi塔的结构,该对象被添加到窗口的中心。
盘子数目是int型数据,它的默认值是5。盘子数目的值是用来确定tower对象中“盘子”的数目。
towerName是char型数组,长度为3,其三个单元的默认取值依次是A、B和C。towerName数组的单元的值用来确定tower中三个塔的名字。
renew和auto是Button创建的按钮对象,名字依次为“重新开始”和“自动演示搬盘子”,renew和auto都将当前窗口注册为自己的ActionEvent事件监视器。 ② 方法
- 7 -
东华理工大学理学院信计Java课程设计
开始 是否自动搬移 否 是 是否正在移动 否 是否点中某个塔 是 否 是否已定义起始塔 是 退出 退出 否 退出 是 否 塔上是否有盘 是 是否起始塔 否 是 该塔顶盘是否比欲移动盘大 是 消息框报错 定义当前塔为起始塔,并将塔顶盘设为蓝色 取消起始塔定义,并将塔顶盘设为黄色 退出 退出 否 消息框报错 定义为目标塔,调MovePlate函数,将起始塔顶的金盘移动到目标塔顶。 退出 退出 退出 图4-1
- 8 -
东华理工大学理学院信计Java课程设计
Tower()是构造方法,负责完成窗口的初始化。 main方法是Hannoi塔程序运行的入口方法。
actionPerformed(ActionEvent)方法是HannoiTower类实现的ActionListener 接口中的方法。HannoiTower创建的窗口是renew和auto两个按钮的ActionEvent事件监视器。当用户单击按钮时,窗口将执行actionPerformed(ActionEvent)方法进行相应的操作。当用户单击renew按钮时,actionPerformed(ActionEvent)方法所进行的操作是保持当前的盘子数目的值,并让tower对象根据盘子数目的值设置其初始状态。当用户单击auto按钮时,actionPerformed(ActionEvent)方法所进行的操作是让tower对象返回其中的AutoMoveDisc对象,该对象是一个对话框,用户可以通过对话框让程序自动地移动“盘子”。
六.测试
1.测试方案
本程序的初始状态是A塔上有五个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A塔上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动该盘子、释放鼠标来放置该盘子。程序要求用户在移动盘子过程中,不允许把大盘子放在小盘子的上面,用户最终要完成的是把A塔上的全部盘子移动到B塔或C塔上。用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A塔上的盘子全部移动到B塔或C塔上。用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始游戏。
2.测试结果
- 9 -
东华理工大学理学院信计Java课程设计
- 10 -