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座最底下的一个盘子的坐标