好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

汉诺塔 java.doc

32页
  • 卖家[上传人]:cl****1
  • 文档编号:536720773
  • 上传时间:2023-09-16
  • 文档格式:DOC
  • 文档大小:1,018KB
  • / 32 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • JAVA技术大作业院 (系) 电气与信息工程学院 专业班级 计科普1004 学生姓名 樊科 学号 2020442736 成绩 2012年 5 月 5日 目录1 设计内容及要求 41.1 汉诺塔算法的基本要求 41.2需要实现的主要功能 52.需求分析 62.1 界面及其布局设计 62.2 A、B、C座的实现方法 62.2.1、成员变量 72.2.2 方法 72.3 圆盘的实现方法 82.3.1 Disc成员变量 82.3.2 Disc方法 93 总体设计 93.1 总体功能图 93.2 总体流程图 104 主要功能设计流程图 114.1 A、B、C座实现流程图 114.2 圆盘画法流程图 125 运行效果 135.1 运行界面效果 136. 源代码 146.1 AutoMoveDisc 代码 146.2 Disc 代码 186.3 HandleMouse 代码 196.4HannoiWindow 代码 236.5Tower 代码 266.6 TowerPoint代码 291 设计内容及要求1.1 汉诺塔算法的基本要求(1) 设计GUI界面的Hannoi塔。

      Hannoi塔中有三个座,名字分别是A、B和C初始状态是A座上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上用户可以用鼠标选中盘子,然后通过拖动鼠标来移动该盘子、释放鼠标来放置该盘子2)程序要求用户在移动盘子过程中,不允许把大盘放置在小盘的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上3)用户可以通过Hannoi塔界面提供的菜单来选择初级、中级、高级和自定义四个级别初级级别A座上有3个大小不等盘子、中级级别A座上有4个大小不等盘子、高级级别A座上有5个大小不等盘子、自定义级别A座用户可以任意输入盘子数目4)用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上5)用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始当前的级别 1.2需要实现的主要功能(1)完成汉诺塔的“手工移动演示”; (2)完成汉诺塔的“自动移动演示”;(3)用户可以设置盘子的数目;2.需求分析2.1 界面及其布局设计 系统的整体布局为:BorderLayout布局, 采用了菜单、按钮、面板…等组件,菜单主要包括选择级别盘子个数,,按钮的功能包括重新开始,自动演示,演示,暂停,继续,关闭。

      2.2 A、B、C座的实现方法 Tower类是javax.swing包中JPanel容器的一个子类,创建的对象tower是HannoiWindow窗口的成员之一,被添加到HannoiWindow窗口的中心位置标明Tower类的主要成员变量和方法以及和HannoiWindow类之间组合关系的UML图如图2-1所示图 2-1Tower 类的UML 图2.2.1、成员变量(1)amountOfDisc是int型数据amountOfDisc值用来确定tower对象中盘子的数目,tower对象中Disc类型数组disc的长度2)disc是Disc型数组,该数组的长度由amountOfDisc值来确定Disc数组的每个单元中存放一个Disc对象,依次表明tower对象中有怎样多的盘子3)towerName是char型数组,长度为3,其三个单元的默认取值依次是A、B和CtowerName是数组的单元的值用来确定tower中三个座的名字4)maxDiscWidth和minDiscWidth的值分别用来确定最大盘子的宽度和最小盘子的宽度,discHeight的值确定每个盘子的高度5)pointA、pointB和pointC都是TowerPoint型数组,三个数组的长度与盘子数目相同,即都是amountOfDisc。

      pointA、pointB和pointC单元都是TowerPoint创建对象,分别用来表示Hannoi塔中三个座上的塔点A座、B座和C座上的三个塔点分别由pointA、pointB和pointC中的单元来确定每个座上的三个塔点都是从座顶依次对应数组的相应单元中的TowerPoint对象6)handleMouse是HandleMouse类创建的鼠标事件监视器,用来监视disc数组的Disc对象上触发的鼠标事件7)autoMoveDisc是AutoMoveDisc创建的对话框通过该对话框可以实现程序自动移动盘子2.2.2 方法(1)Tower(char[])是构造方法,负责完成tower容器的初始化2)tower容器调用setAmountOfDisc(int)方法可以设置amountOfDisc的值3)tower容器调用setMaxDiscWidth(int)方法可以设置最大的盘子的大小4) tower容器调用setMinDiscWidth(int)方法可以设置最小的盘子的大小5) tower容器调用setDiscHeight(int)方法可以设置盘子的高度6) tower容器调用putDiscOnTower ()方法可以将盘子放置在Hannoi塔的A座上,即在pointA指定的塔点上放置disc数组的成员。

      7) tower容器调用getAutoMoveDisc ()方法返回其中的AutoMoveDisc对象:autoMoveDisctower是HannoiWindow窗口中的成员,当用户单击HannoiWindow窗口中的autoButton按钮时,窗口中的actionPerformed(ActionEvent)方法将被执行,该方法所进行的操作是让tower对象返回其中的AutoMoveDisc对象,该对象是一个对话框,用户可以通过该对话框让程序自动地移动盘子8) tower容器调用removeDisk ()方法可以移调tower容器中的盘子9) tower容器调用paintComponent (Graphics)方法绘制出塔点的位置和必要的视图图 2-2 Tower 创建容器视图2.3 圆盘的实现方法Disc类是javax.swing包中Jbutton类的子类,所创建的对象称作Hannoi塔中的“盘子”Tower类有Disc类型的数组discDisc数组的单元是用Disc创建的对象,被放置在Tower所创建的容器tower中,用来表示tower中的“盘子”标明Disc类的主要成员变量、方法以及和Tower类之间组合关系的UML如图2-3所示。

      图1-3 Disc 类的UML图2.3.1 Disc成员变量(1) number的值确定所创建的“盘子”上的数字号码,通过该号码的大小来确定盘子的大小关系,即号码大的盘子大于号码小的盘子2)point是TowerPoint对象,是Disc所创建的“盘子”的一个重要成员盘子”被放置在tower容器的塔点上(TowerPoint对象称作塔点),“盘子”通过使用point对象表明自己所在的塔点2.3.2 Disc方法(1)Disc()构造方法创建盘子对象时需要使用该构造方法2)setNumber(int)盘子调用该方法设置其上的数字号码3)getNumber()方法盘子调用该方法返回其上的数字号码4)setPoint(TowerPoint)方法盘子调用该方法设置其所在的塔点5)getPoint()方法盘子调用该方法返回其所在的塔点因此Disc创建的按钮的效果如图1-4所示图 1-4 Disc创建的三个按钮3 总体设计3.1 总体功能图图3-1总体功能图3.2 总体流程图图 3.2 总体流程图4 主要功能设计流程图4.1 A、B、C座实现流程图图4-1 A、B、C座实现流程图4.2 圆盘画法流程图图4-2 圆盘画法流程图5 运行效果5.1 运行界面效果图 5-1运行主界面效果图图 5-2自动演示效果图6. 源代码6.1 AutoMoveDisc 代码package Hannoi;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class AutoMoveDisc extends JDialog implements ActionListener{ int amountOfDisc=3; TowerPoint [] pointA,pointB,pointC; char [] towerName; Container con; StringBuffer moveStep; JTextArea showStep; JButton bStart,bStop,bContinue,bClose; Timer time; int i=0,number=0; AutoMoveDisc(Container con){ setModal(true); setTitle("自动演示搬盘子过程"); this.con=con; moveStep=new StringBuffer(); time=new Timer(500,this); time.setInitialDelay(15); showStep=new JTextArea(15,20); bStart=new JButton("演示"); bStop=new JButton("暂停"); bContinue=new JButton("继续"); bClose=new JButton("关闭"); bStart.addActionListener(this); bStop.addActionListener(this); bContinue.addActionListener(this); bClose.addActionListener(this); JPanel south=new JPanel(); south.setLayout(new FlowLayout()); south.add(bStart); south.add(bStop); south.add(bContinue); south.add(bClose); add(new JScrollPane(showStep),BorderLayout。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.