> # ♻️ 资源
> **大小:** 83.8KB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100013229**](https://www.yuque.com/sxbn/ks/100013229)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/88262684**](https://download.csdn.net/download/s1t16/88262684)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 基于Java实现的Hannoi汉诺塔自动演示程序
# 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所示:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/2469055/1693189836237-dc938e3b-3180-4249-9779-4a86910305bb.png#averageHue=%23f6f6f6&clientId=u0d5588f2-2919-4&from=paste&height=238&id=u19aea3b2&originHeight=298&originWidth=576&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=13814&status=done&style=none&taskId=ud70f7db9-d21b-426c-a392-c14ebed13f7&title=&width=460.8)
## 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(Sun Microsoft Inc.)
```
将mymoon.mf 保存到D:\ch3中,即和应用程序所用的字节码文件保存在相同的目录中。
注意:清单文件中的“Manifest-Version:”和1.0之间、“Main-Class:”
和主类HannoiWindow之间以及“Created-By:”和1.2之间必须有且只有一个空格。
- 生成JAR文件
```
D:\ch3\jar cfm Hannoi.jar mymoon.mf*.class
```
其中,参数c表示要生成一个新的JAR文件,f表示要生成的JAR文件的名字,m表示清单文件的名字。
现在就可以将Hannoi.jar复制到任何一个安装了Java运行环境(版本号需高于1.2d的计算机上)的计算机上,用户用鼠标双击该文件的图标就可以运行该软。
# 6 程序运行效果
**选择Hannoi塔的级别**
![image.png](https://cdn.nlark.com/yuque/0/2023/png/2469055/1693189919361-db876cfc-9b6b-4704-9d2d-071055098f51.png#averageHue=%23c3e2e2&clientId=u0d5588f2-2919-4&from=paste&height=314&id=u0c1963a7&originHeight=393&originWidth=514&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=33744&status=done&style=none&taskId=u96058a7f-f9ea-4604-9e3b-7f29269d4b6&title=&width=411.2)
**Hannoi塔高级玩法**
![image.png](https://cdn.nlark.com/yuque/0/2023/png/2469055/1693189941835-410a6f31-56c8-46e9-8d67-240ce5d9918a.png#averageHue=%23c0e2e2&clientId=u0d5588f2-2919-4&from=paste&height=369&id=u56722432&originHeight=461&originWidth=514&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=33143&status=done&style=none&taskId=u84fc6b44-1fc4-467e-8040-d4509932f36&title=&width=411.2)
**中级Hannoi塔自动演示玩法**
![image.png](https://cdn.nlark.com/yuque/0/2023/png/2469055/1693189960621-2f50c430-0232-485a-84d0-ed051e91b656.png#averageHue=%23d0e5db&clientId=u0d5588f2-2919-4&from=paste&height=286&id=u4982638c&originHeight=358&originWidth=648&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=90807&status=done&style=none&taskId=u0b8ef4b1-9d77-4b4f-8bb1-93f22f2c40d&title=&width=518.4)
# 7 设计心得
通过这一周的实训,虽然实训的时间不长,但是总体上收获挺大的,当我们正式准备学习实训java编程技术时,让我感到非常高兴,因为java一直学的是课本知识,所以实训对于我来说是必须要学会熟练操作的。当然�
基于Java实现的Hannoi汉诺塔自动演示程序(GUI)【100013229】
版权申诉
5星 · 超过95%的资源 65 浏览量
2023-08-28
10:34:12
上传
评论
收藏 85KB ZIP 举报
神仙别闹
- 粉丝: 2672
- 资源: 7640
最新资源
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
- 基于哈希链表的简单人员信息管理系统
- 其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈