Java课程设计报告--Hannoi塔
- 格式:doc
- 大小:940.50 KB
- 文档页数:56
h
h
课 程 设 计 报 告
课程名称 Java程序设计
课题名称 Hannoi塔
专
业 计算机科学与技术
班 级
学 号
姓
名
指导教师 李远辉
2013 年 6月 27日h
h 湖南工程学院
课 程 设 计 任 务 书
课程名称 Java程序设计
课 题 Hannoi塔
专业班级
学生姓名
学 号
指导老师 李远辉
审 批 李远辉
任务书下达日期 2013 年 6 月20 日
任务完成日期 2013 年 6 月 27 日
h
h 目录
1. 设计要求……………………………………………………………1
1.1 界面要求…………………………………………………………1
1.2 功能要求…………………………………………………………1
2. 总体设计 ………………………………………………………… 2
2.1 总体概述…………………………………………………………2
2.2 主要类功能设计…………………………………………………3
3. 详细设计……………………………………………………………5
3.1 HannoiWindow类 ………………………………………………5
3.2 Tower类 …………………………………………………………5
3.3 HandleMouse类 …………………………………………………6
3.4 AutoMoveDisc类…………………………………………………7
3.5 TimeCount类 ……………………………………………………8
4. 调试与结果分析……………………………………………………9
4.1 初级游戏…………………………………………………………9
4.2 游戏界面属性设置………………………………………………10
4.3 游戏外观设置……………………………………………………10
4.4 自动移动演示……………………………………………………10
5. 设计总结与心得体会………………………………………………12
附录 ……………………………………………………………………13
1 参考书………………………………………………………………13
2 源代码………………………………………………………………13
h
h
1 设计要求
1.1 界面要求
用户界面为GUI界面,其分为菜单栏以及游戏区两个部分。游戏区中分布有三座Hannoi塔,其名字分别为A、B、C。初始状态下A座有三个大小不等的盘子,其按照从大到小的顺序依次摆放在A座上。
1.2 功能要求
1.2.1 游戏规则
用户用鼠标选中盘子,然后通过拖动鼠标来移动盘子、释放鼠标来放置该盘子。其中主要的规则就是:
(1)移动盘子时,盘子上方必须无盘子
(2)放置盘子时,其位置必须在塔点处,而且盘子必须比下方盘子小
(3)游戏结束的条件是:所有的盘子均从A座移到B或C座
1.2.2 游戏设置功能
用户可以通过游戏-》选项来设置游戏的一些基本的属性,如是否播放音乐、难度、盘子大小等等
1.2.3 游戏帮助功能
用户可以通过菜单栏中的帮助能过初步了解游戏的相关信息,以及如何操作。其中必须实现游戏的自动完成功能以指导用户如何操作。
1.2.4 游戏外观设置功能
用户可以通过游戏-》外观可以设置游戏的背景颜色以及盘子的颜色
h
h 2 总体设计
2.1 总体概述
在设计Hannoi塔时,需要编写9个Java源文件:AutoMoveDisc.java、Disc.java、GameMusic.java、GameSettingS.java、HandleMouse.java、HannoiWindow.java、TimeCount.java、Tower.java、TowerPoint.java。
Hannoi塔除了要编写的10个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JMenuBar、JMenu、JMenuItem和JButton。Hannnoi塔所用的一些重要的类以及之间的组合关系如图2.1 所示:
图2.1 类之间的组合关系
HannoiWindow
JMenu Tower JMenuBar JMenuItem GameSettingS
HandleMouse Disc AutoMoveDisc TowerPoint
TimeCount GameMusic h
h 2.2 主要类功能设计
2.2.1 HannoiWindow.java
HannoiWindows类主要负责创建Hannoi塔的主窗口,该类包含main()方法,Hannoi塔从此类开始执行。HannoiWindows类的成员变量有五种重要类型对象以及一个char型数组。五种重要类型对象为:Tower、JMenuBar、JMenu、JMenuItem和GameSettings 对象。其效果图2.2如下:
图2.2 主界面
2.2.2 Tower.java
Tower.java类是javax.swing.JPanel的子类,创建的容器被添HannoiWindow窗体的中心。Tower类主要的功能是设置游戏区的所有组件的位置等相关信息以h
h 及注册其中的监听器。
h
h 2.2.3 HandleMouse.java
HandleMouse类主要负责的是鼠标移动游戏区组件所有的事件,其主要实现了
MouseListener,MouseMotionListener两个接口的方法。其所有的移动都必须遵守1.2.1的游戏规则。
2.2.4 AutoMoveDisc.java
AutoMoveDisc类是javax.swing.JDialog类的子类,其主要的功能是弹出一个对话框在其中显示字符移动的全过程,与此同时移动游戏区的盘子直至游戏结束。其中包含的操作有开始、结束、继续、暂停、保存五大操作。
2.2.5 GameSettingS.java
GameSettingS类是javax.swing.JFrame类的子类,其主要的功能是弹出一个界面,其中包含游戏的基本设置项目,通过此界面的操作来调整游戏区的相关信息。
h
h
h
h 3 详细设计
3.1 HannoiWindow类
其主要的方法是actionPerformed(ActionEvent e),其是ActionListenter接口的方法的实现。主要的功能就是监听JMenuItem对象如gStart等的监听。
其部分代码如下:
else if(e.getSource()==gFColor){
Tower.discsColor=JColorChooser.showDialog(this,"请选择背景 色" ,new Color(255,0,0));
if(equalsColor()){
JOptionPane.showMessageDialog(null, "背景色与盘子颜色相 同,设置无效");
return;
}
tower.putDiscOnTower();
}
以上代码是监听到盘子设置菜单选择点击事件,系统弹出一个颜色的对话框,选择颜色后通过tower.putDiscOnTower()刷新游戏区。
3.2 Tower类
其UML图如下图3.1所示:
Tower类中主要的功能就是确定塔、盘子的位置以及画图。其中最主要的是位置的确定。其关键代码如下:
//设置塔点的x,y h
h int vertialDistance=discHeight;
for(int i=0;i
pointA[i]=new
TowerPoint(maxDiscWidth-20,100+vertialDistance);
pointB[i]=new
TowerPoint(2*maxDiscWidth-20,100+vertialDistance);
pointC[i]=new
TowerPoint(3*maxDiscWidth-20,100+vertialDistance);
vertialDistance=vertialDistance+discHeight;
}
for(int i=0;i
pointA[i].putDisc(discs[i],this);
}
其中最主要的是知道Java图形界面的坐标系是采用的是倒坐标系,所以pointA或pointB数组中最后的一个TowerPoint对象就是A或B座最底下的一个盘子的坐标