1、(一)HannoiWindow类 2(二)AutoMoveDisc类 9(三)Disc类 14(四)HandleMouse类 15(五)Tower类 19(六)TowerPoint 类 23四、系统测试 25(一)主菜单: 25(二)游戏等级选择:(三)盘子数量选择: 26(四)变动颜色选择 26(五)背景音乐选择 26(六)用户自己演示结果: 27五、总结 27六、附件(代码、部分图表) 28汉诺塔游戏系统一、系统开发的背景设计GUI界面的Hannoi塔游戏,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。二、系统分析与设计 (一) 系统功能要求1、有三个表示塔的对
2、象,分别命名为A、B和C。A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。用户可以用鼠标拖动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。2、用户也可以选择让程序自动演示。选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。3、可以由用户自己设置盘子数量和盘子大小。4、可以改变盘子的颜色、背景颜色以及背景音乐。5、游戏分为初、中、高三个等级。6、可以记录游戏时间并且设有从新开始按钮。(二) 系统模块结构设计通过对系统功能
3、的分析,汉诺塔游戏系统功能如图所示。TowerPoint图1:汉诺塔游戏系统功能图通过上图的功能分析,把整个系统划分为6个模块:我设计的Hannoi塔,除了要编写的6个java文件(HannoiWindow、AutoMoveDisc、Disc、HandleMouse、Tower、TowerPoint)所给出的类外,还需要java系统提供的一些重要的类,如JButton,JCheckBox等。汉诺塔中有三个座,名字分别为A,B,C。刚开始的时候A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。释放鼠标来放置该盘子。程
4、序要求用户在移动盘子的过程中,不允许把大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。用户可以通过Hannoi塔界面提供的改变盘子数目功能来改变盘子的数目,用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上。用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始。三、系统的设计与实现(一)HannoiWindow类该类主要功能是设置主界面的布局、相关按钮和监听事件 该模块的具体代码如下所示:import java.applet.Applet;import java.applet.AudioClip
5、;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.File;import .MalformedURLException;import .URL;import javax.swing.JOptionPane;public class HannoiWindow extends JFrame implements ActionListener Tower tower=null; /Tower创建的tower容器,刻画了汉诺塔的结构,放置在主界面的中心 int amountOfDisc=3; /
6、确定tower对象中“盘子”数目(默认为3个) int number=0; Color discColor; HandleMouse handleMouseTime; Timer time=new Timer(1000,this); char towerName=A,BC; /容器tower中三个座的名字 JMenuBar bar; /菜单棒 JMenu menuGrade,menuDiscNum,menuMM,menuColor; / boolean tag = true; File musicfile=new File(七里香.mid); URL url; AudioClip clip;
7、JMenu menumusic; JMenuItem oneGradeItem,twoGradeItem,threeGradeItem,discColorItem,backColorItem,maxDiscWidth,minDiscWidth,DiscNum,musicstart,musicstop; JButton renew=null; JButton autoButton=null; JPanel center=new JPanel(); JTextField text; /- public JRadioButton cyan,red,green,blue,yellow; public
8、ButtonGroup buttonGroup; HannoiWindow() /构造函数,设置主界面布局 super(汉诺塔小游戏 (Hannoi Game) tower=new Tower(towerName); tower.setAmountOfDisc(amountOfDisc);/设置盘子的数量 tower.setMaxDiscWidth(120);/设置最大盘子的宽度 tower.setMinDiscWidth(50);/设置最小盘子的宽度 tower.setDiscHeight(16);/设置盘子的高度 tower.putDiscOnTower();/放置盘子到塔上 add(to
9、wer,BorderLayout.CENTER);/增添菜单选项 bar=new JMenuBar(); menuGrade=new JMenu(选择关卡 menuColor=new JMenu(变换颜色 menuDiscNum=new JMenu(盘子数量 menuMM=new JMenu(盘子大小 oneGradeItem=new JMenuItem(第一关_初级 twoGradeItem=new JMenuItem(第二关_中级 threeGradeItem=new JMenuItem(第三关_高级 discColorItem=new JMenuItem(盘子颜色 backColorIt
10、em=new JMenuItem(背景颜色 maxDiscWidth=new JMenuItem(最大盘子宽度 minDiscWidth=new JMenuItem(最小盘子宽度 DiscNum=new JMenuItem(设置盘子数量 menuGrade.add(oneGradeItem);/将用户的操作设置返回给相应的变量 menuGrade.addSeparator(); menuGrade.add(twoGradeItem); menuGrade.add(threeGradeItem); menuColor.add(discColorItem); menuColor.add(backC
11、olorItem); menuMM.add(maxDiscWidth); menuMM.add(minDiscWidth); menuDiscNum.add(DiscNum); bar.add(menuGrade); bar.add(menuDiscNum); bar.add(menuMM); bar.add(menuColor); setJMenuBar(bar); /加入代码 menumusic=new JMenu(设置背景音乐 musicstart=new JMenuItem(背景音乐开启 musicstop=new JMenuItem(背景音乐关闭 menumusic.add(musi
12、cstart); menumusic.add(musicstop); bar.add(menumusic); try url=musicfile.toURL(); catch (MalformedURLException e) / TODO Auto-generated catch block e.printStackTrace(); clip=Applet.newAudioClip(url); clip.play(); /加入下2行代码 musicstart.addActionListener(this); musicstop.addActionListener(this); / oneGr
13、adeItem.addActionListener(this); twoGradeItem.addActionListener(this); threeGradeItem.addActionListener(this); DiscNum.addActionListener(this); maxDiscWidth.addActionListener(this); minDiscWidth.addActionListener(this); discColorItem.addActionListener(this); backColorItem.addActionListener(this); renew=new JButton(重新开始 renew.addActionListener(this); autoButton=new JButton(自动演示 text=new JTextField(您的游戏时间:0秒,10); autoButton.addActionListener(this); JPanel north=new JPanel(); String mess=将全部盘子从 +towerName0+ 座搬运到 +towerName1+ 座或 +towerName2+ 座; JLabel hintMess=new JLabel(mess,JLabel.CENTER);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1