汉诺塔游戏系统 2Word下载.docx
《汉诺塔游戏系统 2Word下载.docx》由会员分享,可在线阅读,更多相关《汉诺塔游戏系统 2Word下载.docx(52页珍藏版)》请在冰豆网上搜索。
(一)HannoiWindow类2
(二)AutoMoveDisc类9
(三)Disc类14
(四)HandleMouse类15
(五)Tower类19
(六)TowerPoint类23
四、系统测试25
(一)主菜单:
25
(二)游戏等级选择:
(三)盘子数量选择:
26
(四)变动颜色选择26
(五)背景音乐选择26
(六)用户自己演示结果:
27
五、总结27
六、附件(代码、部分图表)28
汉诺塔游戏系统
一、系统开发的背景
设计GUI界面的Hannoi塔游戏,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。
二、系统分析与设计
(一)系统功能要求
1、有三个表示塔的对象,分别命名为A、B和C。
A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。
用户可以用鼠标拖动盘子,把A塔上的盘子全部移动到另外两个塔中的任何一个塔上。
要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。
2、用户也可以选择让程序自动演示。
选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。
3、可以由用户自己设置盘子数量和盘子大小。
4、可以改变盘子的颜色、背景颜色以及背景音乐。
5、游戏分为初、中、高三个等级。
6、可以记录游戏时间并且设有从新开始按钮。
(二)系统模块结构设计
通过对系统功能的分析,汉诺塔游戏系统功能如图所示。
TowerPoint
图1:
汉诺塔游戏系统功能图
通过上图的功能分析,把整个系统划分为6个模块:
我设计的Hannoi塔,除了要编写的6个java文件(HannoiWindow、AutoMoveDisc、Disc、HandleMouse、Tower、TowerPoint)所给出的类外,还需要java系统提供的一些重要的类,如JButton,JCheckBox等。
汉诺塔中有三个座,名字分别为A,B,C。
刚开始的时候A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。
用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。
释放鼠标来放置该盘子。
程序要求用户在移动盘子的过程中,不允许把大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。
用户可以通过Hannoi塔界面提供的改变盘子数目功能来改变盘子的数目,用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上。
用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始。
三、系统的设计与实现
(一)HannoiWindow类
该类主要功能是设置主界面的布局、相关按钮和监听事件
该模块的具体代码如下所示:
importjava.applet.Applet;
importjava.applet.AudioClip;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.File;
import.MalformedURLException;
import.URL;
importjavax.swing.JOptionPane;
publicclassHannoiWindowextendsJFrameimplementsActionListener{
Towertower=null;
//Tower创建的tower容器,刻画了汉诺塔的结构,放置在主界面的中心
intamountOfDisc=3;
//确定tower对象中“盘子”数目(默认为3个)
intnumber=0;
ColordiscColor;
HandleMousehandleMouseTime;
Timertime=newTimer(1000,this);
char[]towerName={'
A'
'
B'
C'
};
//容器tower中三个座的名字
JMenuBarbar;
//菜单棒
JMenumenuGrade,menuDiscNum,menuMM,menuColor;
//
booleantag=true;
Filemusicfile=newFile("
七里香.mid"
);
URLurl;
AudioClipclip;
JMenumenumusic;
JMenuItemoneGradeItem,twoGradeItem,threeGradeItem,discColorItem,backColorItem,maxDiscWidth,minDiscWidth,DiscNum,musicstart,musicstop;
JButtonrenew=null;
JButtonautoButton=null;
JPanelcenter=newJPanel();
JTextFieldtext;
//----------------------
publicJRadioButtoncyan,red,green,blue,yellow;
publicButtonGroupbuttonGroup;
HannoiWindow(){//构造函数,设置主界面布局
super("
汉诺塔小游戏(HannoiGame)"
tower=newTower(towerName);
tower.setAmountOfDisc(amountOfDisc);
//设置盘子的数量
tower.setMaxDiscWidth(120);
//设置最大盘子的宽度
tower.setMinDiscWidth(50);
//设置最小盘子的宽度
tower.setDiscHeight(16);
//设置盘子的高度
tower.putDiscOnTower();
//放置盘子到塔上
add(tower,BorderLayout.CENTER);
//增添菜单选项
bar=newJMenuBar();
menuGrade=newJMenu("
选择关卡"
menuColor=newJMenu("
变换颜色"
menuDiscNum=newJMenu("
盘子数量"
menuMM=newJMenu("
盘子大小"
oneGradeItem=newJMenuItem("
第一关_初级"
twoGradeItem=newJMenuItem("
第二关_中级"
threeGradeItem=newJMenuItem("
第三关_高级"
discColorItem=newJMenuItem("
盘子颜色"
backColorItem=newJMenuItem("
背景颜色"
maxDiscWidth=newJMenuItem("
最大盘子宽度"
minDiscWidth=newJMenuItem("
最小盘子宽度"
DiscNum=newJMenuItem("
设置盘子数量"
menuGrade.add(oneGradeItem);
//将用户的操作设置返回给相应的变量
menuGrade.addSeparator();
menuGrade.add(twoGradeItem);
menuGrade.add(threeGradeItem);
menuColor.add(discColorItem);
menuColor.add(backColorItem);
menuMM.add(maxDiscWidth);
menuMM.add(minDiscWidth);
menuDiscNum.add(DiscNum);
bar.add(menuGrade);
bar.add(menuDiscNum);
bar.add(menuMM);
bar.add(menuColor);
setJMenuBar(bar);
//加入代码
menumusic=newJMenu("
设置背景音乐"
musicstart=newJMenuItem("
背景音乐开启"
musicstop=newJMenuItem("
背景音乐关闭"
menumusic.add(musicstart);
menumusic.add(musicstop);
bar.add(menumusic);
try{
url=musicfile.toURL();
}catch(MalformedURLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
clip=Applet.newAudioClip(url);
clip.play();
//加入下2行代码
musicstart.addActionListener(this);
musicstop.addActionListener(this);
//
oneGradeItem.addActionListener(this);
twoGradeItem.addActionListener(this);
threeGradeItem.addActionListener(this);
DiscNum.addActionListener(this);
maxDiscWidth.addActionListener(this);
minDiscWidth.addActionListener(this);
discColorItem.addActionListener(this);
backColorItem.addActionListener(this);
renew=newJButton("
重新开始"
renew.addActionListener(this);
autoButton=newJButton("
自动演示"
text=newJTextField("
您的游戏时间:
0秒"
10);
autoButton.addActionListener(this);
JPanelnorth=newJPanel();
Stringmess="
将全部盘子从"
+towerName[0]+"
座搬运到"
+towerName[1]+
"
座或"
+towerName[2]+"
座"
;
JLabelhintMess=newJLabel(mess,JLabel.CENTER);