汉诺塔设计与实现

上传人:第*** 文档编号:34060237 上传时间:2018-02-20 格式:DOC 页数:23 大小:313.50KB
返回 下载 相关 举报
汉诺塔设计与实现_第1页
第1页 / 共23页
汉诺塔设计与实现_第2页
第2页 / 共23页
汉诺塔设计与实现_第3页
第3页 / 共23页
汉诺塔设计与实现_第4页
第4页 / 共23页
汉诺塔设计与实现_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《汉诺塔设计与实现》由会员分享,可在线阅读,更多相关《汉诺塔设计与实现(23页珍藏版)》请在金锄头文库上搜索。

1、汉诺塔第 1 页一、 需求分析(1) 设计 GUI 界面的 Hannoi 塔。Hannoi 塔中有三个座,名字分别为 A、B 和 C。初始化状态是 A 做上有 3 个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在 A 座。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动该盘子、释放鼠标来放置该盘子。(2) 程序要求用户在移动盘子过程中,不允许把大盘放置在小盘的上面,用户最终要完成的是把 A 座上的全部盘子移动到 B 座或者说 C 座上。(3) 用户可以通过 Hannoi 塔界面提供的菜单来选择初级、中级和高级三个级别。初级级别的 A 座右 3 各大小不等的盘子、中级有 4 个而高级则

2、有 5 个。(4) 用户可以通过单击 Hannoi 塔界面上提供的按钮,让程序自动完成 A 座上的盘子全部移动到 C 坐上。(5) 用户在移动盘子的过程中,可以随时单击 Hannoi 塔界面上的提供的按钮,重新开始当前的级别。二、 总体设计在设计 Hannoi 塔时,需编写 6 个 JAVA 源文件:HannoiWindow.Java 、TowerPoint.java、Disc.java、HandleMous.java 和 AutoMoveDisc.java。Hannoi 塔除了要编写的 6 个 Java 源文件所给出的类外,还需要 Java 系统提供的一些重要的类,如 JMenubar,JM

3、enu,JMenuItem 和 JButton。Hannoi 塔所用到得一些重要的类以及类之间的组合关系如图 2.1 所示:图 2.1 类之间的组合关系分工:在本次课程设计中我和吴林剑作为一个团队设计一个汉诺塔,我主要负责主窗口的设计和相关各个函数之间的调用,吴林剑主要负责容器的设计。以下是 6 个 JAVA 源文件的总体设计。2.1 HannoiWindow.java(主类)HannoiWindow 类负责创建 Hannoi 塔的主窗口,该类含有 main 方法,Hannoi 塔从该类开始执行。HannoiWindow 类的成员变量中有五种重要类型的对象,一个 int 基本型数据和一个 ch

4、ar 行数组。五种类型的对象分别是JMenubar , JMenu,JMenuItem 和 JButton 对象。HannoiWindow 类主要成员的作用将在后面的详细设计中阐述,HannoiWindow 类创建的窗口以及其中的主要成员对象如图 2.2 所示:汉诺塔第 2 页图 2.2HannoiWindow 窗口及主要的成员对象2.2 Tower.javaTower 类是 javax.swing 报中的 JPanel 容器的子类,创建的容器被添加到 HannoiWindow 窗口的中心。Tower 类的成员变量中有四种重要的类型对象、一个int 基本型数据和一个 char 型数组。2.3

5、Disc.javaDisc 类是 JButton 的一个子类,创建的对象是 Tower 容器中的一个按钮,用来白傲视 Tower 中的“盘子” 。2.4 TowerPoint.javaTowerPint.Java 类负责在 Tower 中创建表示位置的塔的对象。2.5 HandleMouse.javaHandleMouse 类创建的对象负责处理鼠标事件。2.6 AutoMoveDisc.javaAutoMoveDisc 类创建的对象负责走动移动盘子从一个座到另一个座。三、 详细设计HannoiWindow 类的详细设计1.效果图HannoiWindow 创建的窗口效果如图 3.1 所示:汉诺塔

6、第 3 页图 3.1HannoiWindow 创建的窗口2. UML 图HannoiWindow 类是 javax.swing 包中 JFrame 的一个子类,表明该类的主要成员变量的方法的 UML 图如 3.2 所示:图 3.2HannoiWindow 类的 UML 图以下是 UML 图中有关数据和方法的详细说明。1) 成员变量1、 Tower 是 Tower 创建的对象 Tower 对象是一个容器,刻画了 Hannoi 塔的结构,该对象被添加到窗口的中心。2、 anountOfDisc 是 int 型数据,他的默认值是 3。amountOfDisc 的值用来确定tower 对象中“盘子”的

7、数目,即 Disc 对象的数目。3、 towerName 是 char 型数组,长度为 3,其中三个单元的默认值一次是 A、B和 C。towerName 数组的单元的值用来确定 tower 中三座的名字。4、 bar 是 JMenuBar 创建的菜单条用来添加菜单。Bar 被放置的在窗口的顶部。汉诺塔第 4 页5、 menuGrade 是 JMenu 创建的菜单没起名字为“选择级别” 。menuGrade 被添加到菜单条 bar 中。6、 renew 和 autoButton 是 JBotton 创建的按钮对象,名字一次为“重新开始”和“自动演示”Renew 和 autoButton 都将当前

8、窗口注册为自己的ActionEvent 时间监视器。2) 方法1、 HannoiWindow()是构造方法,负责完成窗口的初始化。2、 Main 方法是 Hannoi 塔程序运行的入口方法。3、 actionPerformed 方法是 HannoiWindow 类实现的 ActionListener 接口中的方法。HannoiWindow 创建的窗口时 oneGradeItem、twoGradeItem 和threeGradeItemsave 三个菜单项以及 renew 和 autoButton 两个按钮的ActionEvent 时间监视器。当用户选中某个菜单项或单击按钮时,窗口执行actio

9、nPerformed 方法进行相应的操作。如果用户选中oneGradeItem、twoGradeItem 和 threeGradeItemsave 三个菜单项的某一项时,actionPerformed 方法所执行的操作就是改变 amountOfDisc 的值,并让tower 对象根据 amountOfDisc 设置其初始状态。当用户单击 renew 按钮是,actionPerformed 方法所进行的操作是保持当前 amountOfDisc 的值,并让tower 对象根据 amoutOfDisc 的值设置起初始状态。当用户单击 aotoButton按钮时,actionPerformed 方法是

10、让 tower 对象返回其中的 AutoMoveDisc 对象,该对象是一个对话框,用户可以通过该对话框让程序自动的移动“盘子” 。3) 代码(HannoiWindow.java)import javax.swing.*;import java.awt.*;import java.awt.event.*;public class HannoiWindow extends JFrame implements ActionListenerTower tower=null;int amountOfDisc=3;char towerName=A,B,C;JMenuBar bar;JMenu menuG

11、rade;JMenuItem oneGradeItem,twoGradeItem,threeGradeItem;JButton renew=null;JButton autoButton=null; JPanel center=new JPanel(); HannoiWindow()tower=new Tower(towerName);tower.setAmountOfDisc(amountOfDisc);tower.setMaxDiscWidth(120);tower.setMinDiscWidth(50);tower.setDiscHeight(16);tower.putDiscOnTow

12、er();add(tower,BorderLayout.CENTER);汉诺塔第 5 页bar=new JMenuBar();menuGrade=new JMenu(选择级别);oneGradeItem=new JMenuItem(初级);twoGradeItem=new JMenuItem(中级);threeGradeItem=new JMenuItem(高级);menuGrade.add(oneGradeItem);menuGrade.add(twoGradeItem);menuGrade.add(threeGradeItem);bar.add(menuGrade);setJMenuBar

13、(bar);oneGradeItem.addActionListener(this);twoGradeItem.addActionListener(this);threeGradeItem.addActionListener(this); renew=new JButton(重新开始);renew.addActionListener(this);autoButton=new JButton(自动演示);autoButton.addActionListener(this);JPanel north=new JPanel();north.add(renew);north.add(autoButto

14、n); String mess=将全部盘子从+towerName0+座搬运到+towerName1+座或+towerName2+座;JLabel hintMess=new JLabel(mess,JLabel.CENTER);north.add(hintMess); add(north,BorderLayout.NORTH);setResizable(false); setVisible(true);setBounds(60,60,460,410);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public void ac

15、tionPerformed(ActionEvent e)if(e.getSource()=oneGradeItem)amountOfDisc=3;tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();else if(e.getSource()=twoGradeItem)amountOfDisc=4;tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();else if(e.getSource()=threeGradeItem)汉诺塔第 6 页amountOfDisc=5

16、;tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();else if(e.getSource()=renew)tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();else if(e.getSource()=autoButton)tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();int x=this.getBounds().x+this.getBounds().width;int y=this.getBounds().y;tower.getAutoMoveDisc().setLocation(x,y);tower.getAutoMoveDisc().setSize(280,this.getBounds().height); t

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号