1、目录目录 前言. 1 正文. 1 1 设计的目的和意义 . 1 1.1 设计目的 1 1.2 设计意义 1 2 设计目标与总体方案 . 2 2.1 设计目标 2 2.2 总体方案 2 2.2.1 界面及其布局设计 2 2.2.2 A、B、C 座的实现方法 2 2.2.3 成员变量 2 2.2.4 方法 . 3 2.2.5 圆盘的实现方法 4 2.2.6 Disc 成员变量 4 2.2.7 Disc 方法 . 4 3 设计方法和内容 5 3.1 总体类关系 . 5 3.2 总体功能图. 5 3.3 总体流程图 6 4 详细设计内容 6 4.1 A、B、C 座实现流程图 6 4.2 圆盘画法流程图
2、 . 7 5 系统详细设计 . 8 5.1 HannoiWindow.java 8 5.2 Tower.java 9 5.3 Disc.java 9 5.4 TowerPoint.java 10 5.5 HandleMouse.java 10 5.6 AutoMoveDisc.java 10 6 设计创新与关键技术 11 6.1 系统测试 .11 6.2 代码调试问题 . 13 6.3 程序运行效果 . 14 总结. 15 致谢. 16 附录. 17 第 1 页,共 31 页 参考文献 16 前言前言 汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里 留下了三根金刚
3、石的棒,第一根上面套着 64 个圆的金片,最大的一个在底下,其余一个比 一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可 利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。解答结果请 自己运行计算,程序见尾部。面对庞大的数字(移动圆片的次数)18446744073709551615,看 来,众僧们耗尽毕生精力也不可能完成金片的移动。后来,这个传说就演变为汉诺塔游戏: (1) 有三根杆子 A,B,C。A 杆上有若干碟子 (2) 每次移动一块碟子,小的只能叠在大的上面 (3) 把所有碟子从 A 杆全部移到 C 杆上 经过研究发现,汉诺塔的破解很简
4、单,就是按照移动规则向一个方向移动金片:如 3 阶汉诺塔的移动:AC,AB,CB,AC,BA,BC,AC。此外,汉诺塔问题也是程序设 计中的经典递归问题。 正文正文 1 设计的目的和意义 1.1 设计目的 通过学习和查阅相关资料, 了解并熟悉掌握汉诺塔的基本原理和功能、 熟悉数据流程与 游戏规则;学习汉诺塔的有关递归算法和栈的算法和 Java 的编程技术;通过实际的编程练 习,加深对基础知识的理解,提高实践能力;学习开发资料的收集与整理,学会撰写课程设 计报告。并通过本次课程设计,提高自己的编程能力,掌握课程设计说明书的要求,为以后 学习,和工作打下良好的功底。 1.2 设计意义 通过这次的课
5、程设计,可以培养我们的学习能力,让我们实事求是的学习,通过努力, 建立系统设计的整体思想,锻炼我们编写程序和调试程序的能力,学习文档编写规范,学习 第 2 页,共 31 页 书写说明书的规范,学习书写论文的规范,吸取他人学习的宝贵经验、勇于探索前言知识的 习惯。 同时数据结构课程设计还可以弥补我们自身在实践中所缺少的经验。 这次对于汉诺塔 这个问题的研究是我在 Java 课程学习中递归函数的一次实际运用,对我的递归函数的理解 会有更多的帮助。同时还能根据算法对递归思想与所学的数据结构中栈的方法进行比较。 2 设计目标与总体方案 2.1 设计目标 1) 设计 GUI 界面的 Hannoi 塔。汉
6、诺塔中有三个座,名字分别为 A,B,C。初始状态时 A 塔上有 3 个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A 座上。用 户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。释放鼠标来放置该盘子。 2) 程序要求用户在移动盘子的过程中,不允许吧大盘子放置在小盘子的上面,用户最 终要完成的是把 A 座上的全部盘子移动到 B 座或 C 座上。 3) 用户可以通过 Hannoi 塔界面提供的菜单来选择初级、 中级和高级三个级别。 初级级 别 A 座上有 3 个大小不等盘子、中级级别 A 座上有 4 个大小不等盘子、高级级别 A 座上有 5 个大小不等盘子。 4) 用户可以通过单击 Hannoi 塔界面上提供的按钮, 让程序自动完成把 A 座上的盘子全 部移动到 C 座上。 5) 用户在移动盘子的过程中, 可以随时单击 Hannoi 塔界面上提供的按钮, 重新开始当 前的级别。 2.2 总体方案 2.2.1 界面及其布局设计 系统的整体布局为:BorderLayout 布局, 采用了菜单、按钮、面板等组件,菜单 主要包括选择级别盘子个数,,按钮的功能包括