汉诺塔课程设计

汉诺塔课程设计
汉诺塔课程设计

攀枝花学院课程设计

题目:汉诺塔演示程序设计院(系):

年级专业:

姓名:

学号:

指导教师:

二〇〇九年十二月十四日

攀枝花学院教务处制

攀枝花学院本科学生课程设计任务书

注:任务书由指导教师填写。

课程设计(论文)指导教师成绩评定表

摘要

汉诺塔(又称河内塔)问题是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。

利用计算机图形学进行汉诺塔演示程序设计,是利用C语言绘图函数实现汉诺塔的递归算法图形界面演示过程。通过C语言实现图形学的绘图,程序控制,以及区域填充,并根据汉诺塔的算法原理实现大小不同的盘子移动的全过程演示。

关键词汉诺塔,变换矩阵,种子填充算法,递归调用

目录

摘要 .......................................................................................................................................... I

1 需求分析 (1)

1.1 需求概述 (1)

1.2 需求环境 (1)

1.3 功能描述 (2)

2 概要设计 (3)

2.1 程序功能模块 (3)

2.2 程序流程图 (3)

2.3 数据结构的设计 (4)

3 详细设计 (5)

3.1 程序初始化 (5)

3.1.1 代码功能 (5)

3.1.2 功能实现代码 (5)

3.2 盘块的移动过程 (5)

3.2.1代码功能 (5)

3.2.2 功能实现代码 (5)

3.3 递归函数 (6)

3.3.1 流程图 (6)

3.3.2 功能实现代码 (7)

4 测试与运行 (8)

结束语 (9)

参考文献 (10)

1 需求分析

1.1 需求概述

汉诺塔演示程序设计是计算机图形学中图形变换的内容之一。而图形学中的图形变换的概念是由简单图形生成复杂图形,可用二维图形表示三维形体,甚至可以对静态图形经过快速变换而获得图形的动态显示效果。其任务是研究各点坐标之间的变化规律。而本次课程设计就是利用C语言以及图形函数实现汉诺塔的递归算法来进行其盘块移动的全过程显示。在TC环境中要实现这样的功能,就要牵涉到图形设备接口的知识。Windows图形设备接口是为与设备无关的图形设计的,是Windows系统的重要组成部分,负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。应用程序必须通知图形设备接口来加载特定的设备驱动,一旦驱动得以加载,就可以准备应用设备进行相关的操作这些任务都要通过创建和维护设备描述表来完成。在实现汉诺塔演示程序设计时,是利用坐标系统而得到的,而在Windows应用程序中有两种坐标系统:设备坐标系统和逻辑坐标系统。其中设备坐标系统中又有三种相互独立的坐标系统:屏幕坐标系统、窗口坐标系统和用户区坐标系统。这些坐标系统均以像素点来表示度量的单位。屏幕坐标系统使用整个屏幕作为坐标区域,原点为屏幕原点。窗口坐标系统使用了边界在内的应用程序的窗口作为坐标区域。窗口边界的左上角是坐标系统的原点。用户坐标系统是最经常使用的坐标系统。用户区是窗口工作区,不包括窗口边界、菜单条及滚动条等。用户一般只需操作应用程序的用户区,因此用户区坐标系统对大多数应用程序都是适用的。

在计算机机图形学中窗口的定义是指在用户坐标系中定义的确定显示内容的一个矩形区域,只有在这个区域内的图形才能在设备坐标系下输出,而窗口外的部分则被截掉。视区是在设备坐标中定义的一个区域,用于输出窗口中的图形。视区决定了窗口中的图形要显示于屏幕上的位置的大小。

1.2 需求环境

本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:

①硬件要求:一台计算机。

②软件配置:WINDOWS、C/VC++6.0。

1.3 功能描述

本课程设计是利用图形学的相关知识在TC或Visual C++环境下利用递归算法实现汉诺塔演示的全过程,其基本的功能描述如下:

①绘制三个塔座。

②在第一个塔座上绘制一个矩形(一个矩形代表一个盘子),栈的高度递增,

则矩形的大小递减。

③为矩形填充颜色,盘子的颜色代码为栈顶盘子代号加1。

④通过鼠标或者键盘控制移动矩形,将所有的矩形借助第二个塔座从第一个

塔移到第三个塔,并显示每次移动盘子的步骤。

2 概要设计

2.1 程序功能模块

由需求分析知,本次课程设计是用递归算法实现汉诺塔演示程序,故其功能模块分为:程序初始化模块,盘块移动模块,递归调用模块三个模块。

(可以把功能模块用图画出来)

2.2 程序流程图

图2.1 程序流程图

2.3 数据结构的设计

根据需求分析将用递归算法实现汉诺塔演示过程的数据结构的设计如下:

①用一个结构体数组struct M{ int data[15]; int top; }num[3];来定

义三个塔座的高度,以及每个塔座存放每个盘块的代号。

②定义两个变量cx,cy来分别表示程序演示步骤的横坐标和纵坐标的变

化。

③用函数void move(char x,char y,struct M num[3]);来表示盘块移动

的具体过程;并在move函数中调用函数void hanoi(char x,char y,char z,int n,struct M num[3]);来表示递归调用的过程;最后用一个初始化

函数void Init(void)来对整个程序进行初始化,并调用move函数。

3 详细设计

3.1 程序初始化

3.1.1代码功能

在初始化程序中,主要实现的是绘制塔座标志,绘制盘块,设置塔座标志颜色,以及填充盘块颜色等。

3.1.2 功能实现代码

①绘制塔座的代码如下:

setcolor(GREEN);/*设置塔座标志颜色*/

outtextxy(180,450,"press any key to continue");

settextstyle(0,0,2);

outtextxy(90,420,"A"); /*塔座标志*/

outtextxy(240,420,"B");

outtextxy(390,420,"C");

②绘制矩形的代码如下:

setfillstyle(SOLID_FILL,color);/*设置填充颜色*/

bar(100-(33-3*num[0].data[num[0].top]),400-20*i-8,100+

(33-3*num[0].data[num[0].top]),400-20*i+8); /*画矩形*/

3.2 盘块的移动过程

3.2.1代码功能

盘块的移动实际上是一个出栈和入栈的过程,盘块出栈后便将原来的地方涂黑,本块代码主要是实现显示汉诺塔的具体移动的演示过程及移动步骤。

3.2.2 功能实现代码

void move(char x,char y,struct M num[3])/*移动的具体过程*/

{

int i;

char num1[3],num2[3];

sprintf(num1,"%c",x-32);/*将小写变成大写,并转换成字符串输出*/ sprintf(num2,"%c",y-32);

setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/ setcolor(YELLOW);

outtextxy(20+cx,30+cy,num1);/*输出移动过程,每次移动后纵坐标加30*/ outtextxy(62+cx,30+cy,"-->");

outtextxy(130+cx,30+cy,num2);

cy+=30;

if(cy>210) /*横坐标换行后另起一列*/

{ cx+=145;

cy=0;/*纵坐标重新回到顶部开始显示下一列的演示步骤 */

}

settextstyle(0,0,2);

setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/

bar(100+150*(x-97)-(33-3*num[x-97].data[num[x-97].top]),400-20*num [x-97].top-8,100+150*(x-97)+(33-3*

num[x-97].data[num[x-97].top]),400-20*num[x-97].top+8);num[y-97].to p++;/*入栈,目标点的top加1*/

num[y-97].data[num[y-97].top]=num[x-97].data[num[x-97].top];/*在目标点盘子的代号与源点盘子的代号相同*/

num[x-97].top--;/*出栈,原来地方的top减1*/

setfillstyle(SOLID_FILL,num[y-97].data[num[y-97].top]+1);/*盘子颜色代码是栈顶盘子代号加1*/

bar(100+150*(y-97)-(33-3*num[y-97].data[num[y-97].top]),400-20* num[y-97].top-8,100+150*(y-97)+(33-3*num[y-97].data[num[y-97].top]), 400-20*num[y-97].top+8);

getch( );/*自己按键盘来进行手动控制*/

3.3 递归函数

3.3.1 流程图

根据概要设计中的实现递归函数过程的流程图设计如图3.3所示:

图3.1 递归函数

3.3.2 功能实现代码

汉诺塔演示程序设计主要是利用递归调用函数实现。函数调用hanoi( one,two,three,n,num)表示将n个盘块从A座移到C座的过程,函数调用move(one,three,num)是将1个盘块从A座移到C座的过程。其具体代码实现如下:

if(n==1)

move(one,three,num);/*如果盘子为1,将这个盘子从塔座A移动到塔座C*/ else

{

hanoi(one,three,two,n-1,num);/*将塔座A的前n-1个盘子移到塔座B*/ move(one,three,num);/*将塔座A的第n个盘子移到塔座C*/

hanoi(two,one,three,n-1,num); /*将塔座B的n-1个盘子移到塔座C*/

}

4 测试与运行

由需求分析可知,汉诺塔演示程序设计是在TC环境下利用递归算法实现大小不同的盘子移动的全过程演示。本程序已调试成功并实现了其功能,当移动盘块数为3时,其运行结果如下:

图4.1 盘块移动前

图4.2 盘块移动中

图4.3 盘块移动后

结束语

在这次课程设计中,我基本上完成了任务,通过递归调用算法实现了汉诺塔的演示过程,以及盘块移动的具体步骤的显示,基本上达到了此次课程设计的要求。但是它的不足也是显而易见的,在盘块移动的过程中用方向键移动时会一次显示两个步骤,这给用户的实际操作带来了一定的困难,所以这是值得改进的地方,整个程序的功能有待进一步完善,让更多的方法能得以实现。

虽然在这次的课程设计中有很多的不足,但是我也有很多的收获。上网查找资料,找到了一个基于TC对话框而实现的汉诺塔演示程序设计,于是我们就开始研究它的算法,如何画三个塔座,如何填充盘块的颜色,如何实现盘块的移动。再运用这些知识在TC中实现这次课程设计所要完成的任务。这让我不仅对TC 开发环境有了更多的认识和了解,对其图形设备接口的知识也有了很好的掌握,而且让我对图形学的知识有了更好的运用,拓展了对图形学的知识了解的视野,让我的理论知识和算法有了更多的实践。作为一个大的项目,我更体会到了团队合作精神的重要性,虽然我的设计是一个人一组的,但我深刻地认识到只有大家一起努力地学习并研究相关的知识,才能提高做事的效率,也才能更好更快地完成任务。所以这将在我以后的学习和生活中有很在的引导作用。在以后的学习中,我也将加倍地学习图形学的有关知识,以同样的方法学习其他的知识,不断地丰富自己,充实自己,提高自己的能力。

参考文献

[1] Hearn(赫恩)Baker 著.计算机图形学== Computer Graphics:C语言版.清华大学出版

社,2004

[2] 陈桂芳. 微型计算机图形学. 北京理工大学出版社. 1989

[3] 陈元琰编著.计算机图形学实用技术.科学出版社.2000

[4] 柳朝阳,周晓平.计算机图形学:图形的计算与显示原理. 西安电子科技大学出版

社 .2005

[5] 陆润民.C语言绘图教程.清华大学出版社.1996

[6] 陈锦昌,赵明秀.C语言计算机绘图教程.华南理工大学出版社.1998.9

[7] 杨昂岳.微机实用绘图方法与技巧.国防科技大学出版社.1995.12

汉诺塔课程设计

汉诺塔课程设计 一、教学内容: 1、了解汉诺塔的历史。 2、讲解汉诺塔的游戏规则。 二、课程设计目的: 1、让伙伴们了解汉诺塔的历史,勾起孩子们的学习兴趣,让伙伴们更加热爱数学。 2、在掌握汉诺塔玩法的基础上,锻炼伙伴们的观察力,变通里,和右脑开发。 3、增强伙伴们的空间想象能力和动手能力。 4、让伙伴们体会到数学的神奇,从而对数学产生更加浓厚的兴趣。 三、培养技能:观察力、想象力、变通里、右脑开发。 四、所需工具:汉诺塔、记号笔。 五、教学流程概述: 第一节课:1、讲一个关于汉诺塔的故事。2、带领伙伴们一起观察和了解汉诺塔的游戏规则。(以三盘为例说明)(30分钟) 第二节课:汉诺塔4盘的移法。(30分钟) 第三节课:汉诺塔5盘的移法。(30分钟) 第四节课: 汉诺塔月底考核。(30分钟) 六、教学流程详细解读: 第一节课:让伙伴们了解汉诺塔的历史,勾起孩子们的学习 兴趣,让伙伴们更加热爱数学。 1、讲关于汉诺塔的故事: 在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄 铜板上插着三根宝石针。印度教的主神梵天在创造世界的时 候,在其中一根针上从下到上地穿好了由大到小的64片金 片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在 按照下面的法则移动这些金片:一次只移动一片,不管在哪 根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移

、告诉伙伴们游戏规则: 以三个环为例说明: (一)先让伙伴们自己观察有几个柱子,有几个盘,并且盘是怎么排列的? 答:有三根相邻的柱子,第一根柱子上从下到上放着3个不同大小的圆盘,并且顺序是由大到小依次叠放。 (二)分别为这3个相邻的柱子编号A柱、B柱、C柱;在为这3个圆盘编号盘1、盘2、盘3。 让伙伴们自己动脑想想:如何要把A柱上的3个盘子一个一个移动到C柱上,并且每次移动同一根柱子上都必须保持大点的盘子在下,小点的盘子在上。最后也要使移动到C 柱的圆盘从下到上按照盘3,2,1金字塔的形状排列。 (三)带领伙伴们一起动手操作: (1)、盘1移动到C柱。 (2)、盘2移动到B柱。 (3)、盘1在移动到B柱上,这时盘1在盘2上。 (4)、盘3移动到C柱上。 (5)、再将盘1移动到A柱,这时B柱就只剩盘2。 (6)、将盘2移动到C柱,在盘3上边。 (7)、再将盘1移动到C柱,这时就成功了。 (四)鼓励伙伴们再来一次,按照刚才的移动方法 将C柱的圆盘移动到A柱。 (五)等所有伙伴都移动成功都移动成功后,引导伙伴们仔细思考,看看各位伙伴在移动的过程中有发现什么规律和技巧没有? 带领伙伴再来熟悉一遍: 第一步:盘1移动到C柱;第二步:盘2移动到B柱;......第四步:盘3移动到C柱上......

用VB设计汉诺塔动画游戏

本栏目责任编辑:谢媛媛软件设计开发Computer Knowledge and Technology 电脑知识 与技术第5卷第30期(2009年10月)用VB 设计汉诺塔动画游戏 刘德强 (无锡职业技术学院,江苏无锡214024) 摘要:汉诺塔问题是程序设计教学中关于递归调用的经典案例。该文介绍了用VB 设计汉诺塔动画游戏程序的基本过程,其中重点介绍了用VB 的自定义数据类型和图形处理技术设计游戏步点状态记录和动画效果的方法。 关键词:VB ;汉诺塔;动画 中图分类号:TP311文献标识码:A 文章编号:1009-3044(2009)30-8460-03 The Designing of Hanoi Towers Animation Game by VB LIU De-qiang (Wuxi Institute of Technology,Wuxi 214024,China) Abstract:The Hanoi Towers is a typical case of recursive calls in programming teaching.This paper introduces the basic process of design -ing Hanoi Towers animation game by VB,focuses on recording game state between two steps and designing animation by self-defined data type and graph skill in VB. Key Words:VB;Hanoi;animation 汉诺塔问题源自印度的一个古老传说,传至现代演变成了汉诺塔游戏:有A 、B 、C 三个垂直杆和若干个大小各不相同的圆片。开始时圆片全部套在A 杆上,且从下至上圆片大小依次递减。要求借助B 杆,将圆片全部移到C 杆上,每次只能移动一片,并且整个过程中三个杆上的圆片都必须保持大的在下小的在上。游戏的难度由开始时放置在A 杆上圆片的个数进行控制。 1游戏步点状态记录设计 笔者设计的汉诺塔游戏程序主要包括演示和游戏两方面的功能。演示功能实现的是根据汉诺塔问题算法预先计算出的圆片移动顺序由计算机自行对圆片进行移动;而游戏功能是指计算机通过人机交互界面根据游戏者的实时操作顺序进行圆片的移动。图1是程序运行时界面。无论是演示还是游戏,计算机执行的基本动作元素是相同的,即圆片从一个杆上移动到另一个杆上,这一过程体现在程序设计中就是在新的位置对圆片图形进行重画,它与每个杆的步点状态密切相关。 步点状态是指每完成一步操作以后,开始下一步操作之前,一个杆上 的圆片数量及各圆片的位置和大小等多个特征综合构成的状态,是多个 数据的集合。将开始时圆片数记为n ,从初始状态圆片都在A 杆上,到终 止状态n 个圆片移到C 杆上,其间每次移动圆片,各杆的步点状态都会 发生变化。游戏进程中“记”住各杆的当前步点状态,是实现不断移动圆片 的关键。以要移动A 杆上的一个圆片到B 杆为例:要判断圆片根据规则 是否可以移动及圆片移动后放置在B 杆的什么位置(y 坐标),就必须知 道当前B 杆上最上端圆片的大小和B 杆上当前圆片数量,即B 杆的当前 步点状态。综合以上分析,游戏步点状态记录是程序设计中的要点。 鉴于描述步点状态需要多个数据,且数据间相互关联并构成整体,笔 者在设计中采用了自定义数据类型的方法,数据类型名称为circles ,所含 内容和定义格式如下: Type circles counts As integer r()As integer x As integer y()As integer End Type circles 类型中,数据成员counts 用于记录杆上实际圆片数,r 用于记录各圆片的半径,x 记录各圆片圆心的x 坐标,y 记录各圆片圆心的y 坐标。因为每次游戏设置的初始圆片数是不确定的且游戏进程中各杆都可能出现多个圆片,所以数据成员r 和y 定义为动态数组。 数据类型circles 定义以后,先使用该类型定义三个实例a 、b 、c ,分别代表A 、B 、C 三个杆的步点状态。语句如下: Dim a As circles ,b As circles ,c As circles 当初始圆片数量确定后(记为n),可使用下列语句对A 杆的步点状态a 进行初始化。 投稿日期:2009-08-22 作者简介:刘德强(1965-),江苏靖江人,无锡职业技术学院讲师。 图1运行界面ISSN 1009-3044Computer Knowledge and Technology 电脑知识与技术Vol.5,No.30,October 2009,pp.8460-8462E-mail:xsjl@https://www.360docs.net/doc/047369067.html, https://www.360docs.net/doc/047369067.html, Tel:+86-551-569096356909648460

基于JAVA汉诺塔游戏设计与实现

基于JAVA汉诺塔游戏设计与实现 院系:计算机与电子系 专业班:计算机应用技术0902班 姓名:高亚 学号:20092911057 指导教师:彭文艺 2012 年6月

基于JAVA汉诺塔游戏设计与实现JA V A Tower of Hanoi-based Game Design and Implementation

摘要 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 随着时代的不断发展进步,计算机已经融入我们的日常生活。很多时候,很多的问题想通过人的手来亲自解决已变得十分困难了,这时我们就要运用计算机来帮我们解决这些复杂的问题,汉诺塔问题就是这类较复杂的问题。 此次,我们通过Eclipse软件来解决汉诺塔问题。程序运行后会出现一个界面,界面上有各种操作提示,按照提示进行各种操作后会得到汉诺塔游戏的运行过程及结果。 关键词:Java汉诺塔Eclipse

Abstract Java is a cross-platform application software can write object-oriented programming language by Sun Microsystems, Inc. in May 1995 launch of the Java programming language and the Java platform (namely JavaSE, JavaEE, of JavaME) the general term.Has excellent versatility, efficiency, platform portability, and security of Java technology, widely used in personal PC, the data center, game consoles, scientific supercomputers, mobile phones and the Internet, while the world's largest developer of professional community. Global cloud computing and mobile Internet industry environment, Java has significant advantages and broad prospects. With the continual development and progress, the computer has been integrated into our daily lives. In many cases, a lot of problems to think through the human hand to personally resolve the very difficult, then we will use the computer to help us solve these complex issues. The Tower of Hanoi problem is that these more complex problems. The Eclipse software to solve the Tower of Hanoi problem. After running a single interface, the interface on a variety of operating tips, follow the prompts to perform various operations will be the running process and the outcome of the Tower of Hanoi game. Key words: Java Tower of Hanoi Eclipse

汉诺塔问题实验报告

1.实验目的: 通过本实验,掌握复杂性问题的分析方法,了解汉诺塔游戏的时间复杂性和空间复杂性。 2.问题描述: 汉诺塔问题来自一个古老的传说:在世界刚被创建的时候有一座钻石宝塔(塔A),其上有64个金碟。所有碟子按从大到小的次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔(塔B和塔C)。从世界创始之日起,婆罗门的牧师们就一直在试图把塔A 上的碟子移动到塔C上去,其间借助于塔B的帮助。每次只能移动一个碟子,任何时候都不能把一个碟子放在比它小的碟子上面。当牧师们完成任务时,世界末日也就到了。 3.算法设计思想: 对于汉诺塔问题的求解,可以通过以下三个步骤实现: (1)将塔A上的n-1个碟子借助塔C先移到塔B上。 (2)把塔A上剩下的一个碟子移到塔C上。 (3)将n-1个碟子从塔B借助于塔A移到塔C上。 4.实验步骤: 1.用c++ 或c语言设计实现汉诺塔游戏; 2.让盘子数从2 开始到7进行实验,记录程序运行时间和递 归调用次数; 3.画出盘子数n和运行时间t 、递归调用次数m的关系图, 并进行分析。 5.代码设计: Hanio.cpp #include"stdafx.h" #include #include #include void hanoi(int n,char x,char y,char z) { if(n==1) { printf("从%c->搬到%c\n",x,z); } else { hanoi(n-1,x,z,y); printf("从%c->%c搬到\n",x,z); hanoi(n-1,y,x,z); }

校本课程《汉诺塔游戏》【教学设计】.doc

《汉诺塔游戏》教学设计 学习内容:数学游戏“汉诺塔”第一课时 学习目标: 1.了解汉诺塔游戏的传说以及汉诺塔游戏的基本规则。 2.经历汉诺塔游戏的游玩过程,在“玩”中掌握汉诺塔游戏的基本规则,初步发现游戏中的规律。 3.在收集信息、整理归纳、猜测验证的数学思维过程,发展归纳推理能力和逻辑思维能力。 4.在解决问题的过程中,体会与他人合作获得更多的成功体验。 学习重点: 经历汉诺塔游戏的游玩过程,在“玩”中掌握汉诺塔游戏的基本规则初步发现游戏中的规律。 学习难点: 在收集信息、整理归纳、猜测验证的数学思维过程,发展归纳推理能力和逻辑思维能力。

学习过程: 课前活动 大家喜欢玩游戏么?玩过什么游戏? 我为大家带来一位游戏高手,一起来认识一下。播放录像。这 只黑猩猩聪明吧?它的表现太神奇了!你知道它玩的什么? 板书课题:汉诺塔 接下来,就让我们一起步入汉诺塔游戏的世界。 一、认识汉诺塔 1.关于汉诺塔,你想了解些什么?(规则,来历,玩法……) 同学们的问题太棒了!相信上完了这节课,能解决你的许多问题! 咱们就从汉诺塔的来历说起。Ppt 播放相关介绍。 2.认识汉诺塔各部分。 到了现代,汉诺塔演变成了这个样子。出示教具。 咱们一起来认识一下汉诺塔:下面是一个托盘,上面竖着3 根柱子,从左到右依次为A 柱、B 柱、C 柱。A 柱是起始柱,游戏开始的时候所有的圆片摆放的位置;C 柱是目标柱,游戏结束时,所有的金片都按照顺

序排列在上面;B 柱是中转柱。 3.了解游戏规则。 大家想不想看一看,老师玩汉诺塔游戏的录像?请你一边看一边想:汉诺塔游戏的规则是什么?出示录像。 谁来说一说,汉诺塔游戏的规则是什么? (1)从一边到另一边板书:1.从A 到C (2)一次只能移动一个金片板书:2.一次一片 (3)大金片不能放到小金片的上面板书:3.大不压小 二、动手实践玩游戏 知道了规则,接下来,咱们就开始玩汉诺塔的游戏吧。 1.咱们从1 个圆片开始研究。 请你拿出学具,在A 柱上摆放1 个圆片。其它圆片放在旁边桌上。 1 个圆片,可以怎么玩?动手试一试。说一说。 生1:可以从A 直接到C,移动一次。生 2:可以从A 到B 再到C,移动两次。 两种方法都可以。我们来看规则:从A 到C,如果可以直接一步到

汉诺塔课程设计报告

汉诺塔游戏 学院:理学院 班级:信科102班 组长:李万东 组员1:袁雪娇 组员2:张瑜 设计期限2012 年3月1开始 至2012年6月20 结束 课程设计题目:汉诺塔游戏 课程设计目的: 《JA V A程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JA V A程序设计》课程后,进行的一次全面的综合训练,JA V A程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。 随着社会的进步,我们用来娱乐的游戏世界也越来越丰富,越来越复杂。本程序的汉诺塔游戏不但包括了游戏最基本的功能,而且还能培养用户的逻辑思维能力,同时也给玩家提供了一定的娱乐空间。本游戏还包括一个自动演示搬移汉诺塔的功能,此功能能够帮助初次接触此游戏的用户了解此游戏的玩法。 课程设计理论: 本程序要求实现用图形界面,画出3个杆和若干个大小不一的矩形盘子,形成3个塔,分别为A塔,B塔,C塔,同时盘子数目可以人工设定。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动该盘子、释放鼠标来放置该盘子。用户在移动盘子的过程中,可以随时单击汉诺塔菜单栏的菜单中提供的按钮,重新开 1格式已调整,word版本可编辑.

始游戏,并且可以通过单击汉诺塔菜单栏的菜单提供的按钮,让程序自动完成把A塔上的盘子全部移动到C塔上,实现自动演示。 汉诺塔算法属于递归算法,该算法过程为: 假定要把n个盘子按题目规定由A杆借助B杆移动到C杆。 第一步:先把上面的n-1个盘子借助C杆放到B杆。 第二步:把第n个盘子从A杆直接移到C杆。 第三步:把B杆上的n-1个盘子借助A杆移到B杆。 概要设计: 1.课程设计内容: 有三个表示塔的对象,分别命名为A、B和C。A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。用户可以用鼠标拖动盘子,把A塔上的盘子全部移动到另外两个塔中的任何一个塔上。要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。用户也可以选择让程序自动演示。选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程。 2.课程设计功能: (1)设计GUI界面的汉诺塔。汉诺塔中有三个座,名字分别是A、B和C。初始状态是A座上有四个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动该盘子、释放鼠标来放置该盘子。 (2)程序要求用户在移动盘子过程中,不允许把大盘子放在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。 (3)用户可以通过单击汉诺塔菜单栏的菜单提供的按钮,让程序自动完成把A座上的盘子全部移动到B座或C座上。 (4)用户在移动盘子的过程中,可以随时单击汉诺塔菜单栏的菜单提供的按钮,重新开始游戏。 3. 2.

汉诺塔游戏设计过程

兰州交通大学 数理与软件工程学院 课程设计报告 2011 ~2012学年第二学期 课程名称数据结构 设计题目汉诺塔游戏程序 班级信计1001班 小组成员张章、王欣、李贵生 报告者李贵生201005235 指导老师金静 2012年6月

一、实验目的: 通过此次C++实训,一方面加深了对C++语言的了解,而不只是单单的在课本中学到的那些理论。通过学生动手亲自编写,平时乏味的课程,变的生动有趣。平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。另一方面,通过学生小组完成任务,提高团队意识,增加凝聚力,让同学们意识到团结就是力量,每个人都是重要的一份子。 二、题目:汉诺塔游戏程序 <1> 问题描述:在平面上有三个位置A、B、C,在A位置上有n 个大小不等的圆盘、小盘压在大盘上形成圆盘堆。要求将A位置的N个圆盘通过B位置移动到C位置上,并按同样的顺序叠放。 移动圆盘时必须遵循以下规则: 1.每一次只能移动一个圆盘 2.圆盘可以放在A、B、C任何一个塔座上 3.任何时刻都不能将大圆盘压在小圆盘上 <2> 基本要求: 圆盘的个数从键盘输入(如3-64等);用动画的形式在屏幕上显示盘的移动。 三、问题分析和任务定义 1、已知有三个塔(1、 2、3)和n个从大到小的金碟子,初始状态时n个碟子按从大到小的次序从塔1的底部堆放至顶部。 2、要求把碟子都移动到塔2(按从大到小的次序从塔2的底部堆

放至顶部)。 3、每次移动一个碟子。 4、任何时候、任何一个塔上都不能把大碟子放到小碟子的上面。 5、可以借助塔3。 先考虑a杆下面的盘子而非杆上最上面的盘子,于是任务变成了: 1、将上面的N个盘子移到b杆上; 2、将a杆上剩下的盘子移到c杆上; 3、将b杆上的全部盘子移到c杆上。 将这个过程继续下去,就是要先完成移动n个盘子、n-1个盘子、n-2个盘子....1个盘的工作。 四、课题介绍: 4.1 汉诺塔问题初始模型: 4.2 实现步骤: 为满足题目中盘子的移动问题,必须遵循的条件是:一次

汉诺塔探趣

“汉诺塔”问题探趣 洞头县实验小学 502班叶钫舟 指导老师洞头县实验小学陈素萍 一、问题的提出: 一位法国数学家曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。 尽管这个传说并不可信,但现在却成就了一种益智玩具━━“汉诺塔”(如图)的诞生。对下面这个8层汉诺塔,如何按以上要求将所有的圆盘从最左边的柱子上移到最右边的柱子上来呢?并如何保证移动的步子最少呢? 对这个富有挑战性的游戏,我非常有兴趣,于是我开始了研究! 二、研究过程: 1、简化器材,方便携带,随时演练,不断研究 “汉诺塔”游戏器材,体积较大,质量也大,不方便随身携带,因而也不能让我随时随地进行演练。 考虑到它最关键的是体现由小到大的一种排列,我用扑克牌同色的1(A),2,3,4,5,6,7,8来代替这个“汉诺塔”,平时演练,只要假想桌子上有左0、中1、右2三个档位即可,将这8张扑克牌从上到下按由小到大的顺序叠放在一起,放置在左边档位0处,然后将按游戏规则将它们依次全部移到最右边档位2处即可。 我把这种用扑克牌玩“汉诺塔”游戏称为“汉诺牌”,这样就很方便了!有时忘记了带扑克牌,我就用笔在纸上写下1~8这张8张“牌”,就可以玩了!

奇妙的汉诺塔教学设计

神奇的汉诺塔教学设计 【教学目标】 1.在操作探究的过程中,使学生能够初步体会从简单问题入手寻找规律从而解决实际问题的方法,学会有条理地思考。 2.经历收集有用的信息、进行归纳、类比与猜测、再验证猜测,这一系列数学思维过程,发展学生的归纳推理能力。 3.通过自主探究、合作交流、汇报展示,引导学生有条理地阐述自己想法,培养合作意识,获得成功的体验。 【教学过程】 热身练习: ① 1 3 5 7 ()() ② 2 4 6 8 ()() ③ 2 4 8 16 ()() ④ 1 3 7 15 ()() 一、故事引入,揭示课题 师:能说出其中的规律吗? 小结:观察思考是学好数学的诀窍,他可以锻炼我们思维,当然,我们还可以通过游戏来锻炼我们的思维。 师:你们喜欢玩游戏吗?最近呀老师又迷上了一个数学游戏——汉诺塔。(板书课题)大家仔细观察这个汉诺塔,你看到了什么? 生:(预设)有大小不一的圆环,还有3根柱子。 师:这3根柱子我们帮它取个名字,一根叫起始柱,一根叫过渡柱,一根叫目标柱。

关于汉诺塔还有一个古老的传说呢,一起听一听。 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 师:大胆的猜一猜,他要移动多少次才能全部移完? 生:(预设)64次。 二、游戏操作,探索规律。 (1)师:那这个神奇的汉诺塔游戏怎么玩呢?大家有没有从这个故事中看出游戏规则呢? 生:①小圆盘上不能放大圆盘。②一次只能移动一个圆盘。③可以借助过渡柱。 师:同学们掌握了游戏规则,那我们先来比比赛,看哪个小组以最少的次数移完4个圆环,比赛时间2分钟,开始。 学生动手操作。 (2)学生汇报。 师:你来演示一下是怎样移的? 师:那有没有比这次数更少的,这个游戏是不是有什么规律呢?今天我们就来一起研究一下吧。 师:我们先从最简单的入手,先从1个圆环开始,依次叠加,把你们的操作过程记录在这张表上,孩子们,动起来吧! 学生动手操作并填表做记录。 (3)点名同学上台边操作边汇报。

汉诺塔游戏攻略

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 3层: 第1步: x -移到-> y 第2步: x -移到-> z 第3步: y -移到-> z 第4步: x -移到-> y 第5步: z -移到-> x 第6步: z -移到-> y 第7步: x -移到-> y 4层: 第1步: x -移到-> z 第2步: x -移到-> y 第3步: z -移到-> y 第4步: x -移到-> z 第5步: y -移到-> x 第6步: y -移到-> z 第7步: x -移到-> z 第8步: x -移到-> y 第9步: z -移到-> y 第10步: z -移到-> x 第11步: y -移到-> x 第12步: z -移到-> y 第13步: x -移到-> z 第14步: x -移到-> y 第15步: z -移到-> y 5层:

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 第1步: x -移到-> y 第2步: x -移到-> z 第3步: y -移到-> z 第4步: x -移到-> y 第5步: z -移到-> x 第6步: z -移到-> y 第7步: x -移到-> y 第8步: x -移到-> z 第9步: y -移到-> z 第10步: y -移到-> x 第11步: z -移到-> x 第12步: y -移到-> z 第13步: x -移到-> y 第14步: x -移到-> z 第15步: y -移到-> z 第16步: x -移到-> y 第17步: z -移到-> x 第18步: z -移到-> y 第19步: x -移到-> y 第20步: z -移到-> x 第21步: y -移到-> z 第22步: y -移到-> x 第23步: z -移到-> x 第24步: z -移到-> y 第25步: x -移到-> y

《汉诺塔游戏设计与制作》课程设计报告

《动漫与网络游戏设计》课程设计报告 题目:汉诺塔游戏 院系:信息科学系 专业:软件工程 年级: 14级 成员1:学号 14053078 姓名:曾繁荣成员2:学号 14053080 姓名:陈俊杰日期: 2017年1月2号 成绩:

题目 一、作品介绍 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 二、设计思路 1、已知有三个塔(1、 2、3)和n个从大到小的金碟子,初始状态时n个碟子按从大到小的次序从塔1的底部堆放至顶部。 2、要求把碟子都移动到塔2(按从大到小的次序从塔2的底部堆放至顶部)。 3、每次移动一个碟子。 4、任何时候、任何一个塔上都不能把大碟子放到小碟子的上面。 5、可以借助塔3。 先考虑a杆下面的盘子而非杆上最上面的盘子,于是任务变成了: 1)、将上面的N个盘子移到b杆上; 2)、将a杆上剩下的盘子移到c杆上; 3)、将b杆上的全部盘子移到c杆上。 将这个过程继续下去,就是要先完成移动n个盘子、n-1个盘子、n-2个盘子....1个盘的工作。

三、作品结构

四、设计步骤 为满足题目中盘子的移动问题,必须遵循的条件是:一次仅能移动一个盘,且不允许大盘放在小盘的上面。 设要解决的汉诺塔共有N个圆盘,对A杆上的全部N个圆盘从小到大顺序编号,最小的圆盘为1号,次之为2号,依次类推,则最下面的圆盘的编号为N。 第一步:先将问题简化。假设A杆上只有一个圆盘,即汉诺塔只有一层N,则只要将1号盘从A杆上移到B杆上即可。 第二步:对于一个有N(N>1)个圆盘的汉诺塔,将N个圆盘分成两部分:“上面的N-1个圆盘”看成一个整体,为了解决N个圆盘的汉诺塔。 五、实现步骤 (1)将A杆上面的N-1个盘子,借助B杆,移到C杆上。 图4—1 (2)将A杆上剩余的N号盘子移到B杆上。

汉诺塔教材

有趣的汉诺塔 ——思维潜能开发校本教材 河山实验学校小学部时美娟 前言 数学教学游戏(思维潜能开发)课程是按照《优质课堂与现代教学技艺运用的研究》总课题组倡导的“教学游戏”理念,借鉴国内外“思维潜能开发”的有效经验,结合心理学、认知科学和脑科学的最新研究成果,经过本土化再造后, 逐步形成的教学游戏课程的训练体系。其核心是以“益智”为载体,通过愉悦的探究体验活动,开发学生的思维潜能,促进学生身心健康的全面发展。 教学游戏(思维潜能开发)课程实质上是一种思维潜能开发训练。它采用课程化的训练体系,试图跳出目前“题型”和“分数”的羁绊,在充满游戏乐趣和紧张思维碰撞的精神活动中挑战固有的思维定势,开发学生的智慧潜能。它不仅是一种在探索中进行创新思维的学习,还是落实《义务教育阶段数学课程标准2011年版》对“四基、四能”教学要求的一种有效手段。其目的在于让学生在实践、体验中培养其创新意识、践行能力,团结协作、社会活动等方面的能力及技艺。 河内塔是根据一个传说形成的一个问题:有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。问:如何移?最少要移动多少次? 目录 1 基本介绍 2 历史传说 3 相似问题 4 concreteHAM 4.1 在分析⑵之前 4.2 讨论问题⑵, 4.3 算法介绍 5 汉诺塔问题的程序实现 5.1 汉诺塔问题的递归实现 5.2 汉诺塔问题的非递归实现 5.3 汉诺塔问题的递归Java语言实现 5.4 汉诺塔问题的递归pascal语言实现

北师大版小学数学《数学游戏汉诺塔教案》精品教案设计

数学游戏班第1课时活动设计 【课题】汉诺塔 【教学时间】月日 【教学目标】1、认识汉诺塔 2、了解汉诺塔历史 3、理解汉诺塔的规则 4、进行一层、二层、三层的移动 【教学内容】认识汉诺塔 【课前准备】 教师:名单、课件 学生:汉诺塔 【活动过程设计】 一、汉诺塔知识 1、了解汉诺塔的由来 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。 2、认识汉诺塔 3、汉诺塔游戏规则 (1)每次只能移动一片; (2)小盘在上,大盘在下; (3)从A柱到C柱,步数要最少。 二、汉诺塔游戏 1、尝试一层、二层、三层的移动

2、发现规律、引出技巧 第一步最少步数 一层 C 1 二层 B 1+1+1=3 三层 C 3+1+3=7 3、练习 三层:A→C C→B B→A A→B B→C C→A 数学游戏班第2课时活动设计 (设计者:舒彩霞) 【课题】汉诺塔 【教学时间】月日 【教学目标】1、能进行汉诺塔的四层、五层的移动。 2、能推算出第一步要移到哪根柱上。 3、能推算出需要的最少的步数。 【教学内容】汉诺塔四层、五层的移动 【课前准备】 教师:汉诺塔、记录单 学生:汉诺塔 【活动过程设计】 一、熟练进行三层的移动 二、四层汉诺塔 1、尝试移动四层汉诺塔 2、发现规律、引出技巧 第一步最少步数

一层 C 1 二层 B 1+1+1=3 三层 C 3+1+3=7 四层 B 7+1+7=15 3、四层练习 四层:A→C C→B B→A A→B B→C C→A 三、五层汉诺塔 1、尝试移动五层汉诺塔 2、发现规律、引出技巧 第一步最少步数 一层 C 1 二层 B 1+1+1=3 三层 C 3+1+3=7 四层 B 7+1+7=15 五层 C 15+1+15=31 3、五层练习 五层:A→C C→B B→A A→B B→C C→A 数学游戏班第3课时活动设计 (设计者:舒彩霞) 【课题】汉诺塔 【教学时间】月日 【教学目标】1、能进行汉诺塔的六层的移动。 2、能推算出第一步要移到哪根柱上。 3、能推算出需要的最少的步数。

游戏设计全过程

游戏设计全过程 作者:Marshall 项目上马,资金进帐,员工到位。当一款游戏的开发工作正式开始的时候,首先要解决的问题就是引擎。 1.引擎设计 引擎的开发往往是由设计人员协助程序人员完成的。在这里要明确一点的是,游戏的好坏跟引擎有很大的关系。所以引擎设计的是否合理就从某个程度上反映了游戏的水平。因此引擎设计应从以下几点出发: 1.1功能分类 任何一款游戏都有好多的功能,比如攻击,使用物品,施放魔法,移动,键盘输入,更换装备等等等等......而这些全部都需要用引擎来实现。所以,在设计的时候就有必要考虑将功能进行分类和简化,并且将某些功能的实现可以看成是另外几个功能同时作用时的结果。从最基础的功能开始着手设计,不断的利用已完成的功能去实现新的功能。但要注意不要将两个或多个功能相互混淆或相互倚赖,它们之间应该是独立的。 即,每一个在引擎里定义了的功能都可以脱离其他功能单独使用。而其他功能的实现只需要调用一下这些功能的结果就可以了。 1.2物品清单 物品清单本来是应该脱离引擎存在的,它可以通过脚本去实现。但这里所说的物品是构成世界的最基本的元素,也就是一些原始资源。比如:男人、女人、动物1、动物2、植物1、静物1等等。有了这些最原始资源,我们的引擎就显得有点意思了,我们就可以用引擎就构造世界了。 1.3地图编辑器 是的,地图编辑器最好也包含在引擎当中。其目的不是为了满足玩家的需求,而是为了能够反复利用引擎去开发不同游戏。还记得我们已经有了一些原

始的资源吗?那就拿来创造世界吧!当然,我们手头有的资源太少了,地图编辑器还需要更多的资源,比如怪物、宝物、地形等等。 1.4后门 游戏引擎应该提供一个后门为管理人员准备。它不仅能够提供一个不经过编译而直接修改游戏内容的方法,而且也为今后的测试提供了极大的方便。 OK了,到了这里,设计的工作基本上就差不多了。当然不要以为引擎的开发是这样的简单,大量的工作还是由程序人员完成的。我们只是给程序人员提供一个导向,或者说是标准。制定这个标准的目的是为了今后开发的方便,而不是为了跟程序员找别扭。所以在这方面还是多听些程序的意见比较好。 现在我们终于有了一个引擎了!(^_^)下面的工作会变的轻松很多 2.游戏规则 游戏之所以好玩,就是因为游戏对每位玩家所采用的规则都是相同的。所以优秀的游戏必定有优秀的规则,无论你要设计的游戏是什么,先把最为主要的规则定下来。2.1胜负判定 不要认为胜负判定非常容易,其实游戏只要复杂一点,那么胜负的判定就会变的很困难。比如说当一个炸弹同时炸死自己和仅剩的一个敌人的时候如何判定胜负?或者当双方积分相同的时候如何判定胜负?当然,最简单的办法就是和局。所以首先要有对胜负(和)的判定。 2.2公式算法 游戏中难免有这样那样的数值,之间的换算关系是需要好好研究的。这方面有专门的文章讨论,这里不多说。 2.3随机事件 游戏之所以好玩还有一个原因就是随机事件。当随机时间发生的时候上帝都在祈祷。如何充分的利用随机事件来让玩家体会到更多的乐趣的确需要好好的考虑。

课程实践报告_汉诺塔

课程实践报告 题目:汉诺塔 姓名: 学号: 班级: 日期:

一实践目的 1、初步具备根据应用需求选择合理数据结构并进行算法设计的能力; 2、进一步提升C语言的应用能力; 3、初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 4、提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 5、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风; 6、提升文档写作能力。 二问题定义及题目分析 汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,073,709,551,615 这是一个天文数字,若每一微秒可能计算(并不输出)一次移动,那么也需要几乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔,但很难用计算机解决64层的汉诺塔。后来,这个传说就演变为汉诺塔游戏: 1.有三根杆子A,B,C。A杆上有若干圆盘。2.每次移动一块圆盘,小的只能叠在大的上面。3.把所有圆盘从A杆全部移到C杆上。经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动圆盘:如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C。 程序所能达到的功能: 用户只需要输入所需的层数即可,程序会自动计算出最终需要的步骤,并同时给出中间移动的过程。 三概要设计 1、设计思想 如果盘子为1,则将这个盘子从塔座A移动到塔座C;如果不为1,则采用递归思想。将塔座A的前n-1个盘子借助C盘(即目的盘)移到塔座B,移后,此时C为空座,那我们就可以将塔座A的第n个盘子移到塔座C了。接下来就将塔座B的n-1个盘子借助A移到塔座C,从而完成盘子的移动。 2、数据类型 结构体:用来存放盘子的栈。同时,在函数的参数中还用到了结构体类型的引用。 其他类型:基本的数据类型,包括整形,字符型。用来存放临时变量。 3、主要模块

汉诺塔游戏攻略

3层: 第1步: x -移到-> y 第2步: x -移到-> z 第3步: y -移到-> z 第4步: x -移到-> y 第5步: z -移到-> x 第6步: z -移到-> y 第7步: x -移到-> y 4层: 第1步: x -移到-> z 第2步: x -移到-> y 第3步: z -移到-> y 第4步: x -移到-> z 第5步: y -移到-> x 第6步: y -移到-> z 第7步: x -移到-> z 第8步: x -移到-> y 第9步: z -移到-> y 第10步: z -移到-> x 第11步: y -移到-> x 第12步: z -移到-> y 第13步: x -移到-> z 第14步: x -移到-> y 第15步: z -移到-> y 5层: 第1步: x -移到-> y 第2步: x -移到-> z 第3步: y -移到-> z 第4步: x -移到-> y 第5步: z -移到-> x 第6步: z -移到-> y 第7步: x -移到-> y 第8步: x -移到-> z 第9步: y -移到-> z 第10步: y -移到-> x 第11步: z -移到-> x 第12步: y -移到-> z 第13步: x -移到-> y 第14步: x -移到-> z 第15步: y -移到-> z 第16步: x -移到-> y 第17步: z -移到-> x 第18步: z -移到-> y 第19步: x -移到-> y

第21步: y -移到-> z 第22步: y -移到-> x 第23步: z -移到-> x 第24步: z -移到-> y 第25步: x -移到-> y 第26步: x -移到-> z 第27步: y -移到-> z 第28步: x -移到-> y 第29步: z -移到-> x 第30步: z -移到-> y 第31步: x -移到-> y 6层: 第1步: x -移到-> z 第2步: x -移到-> y 第3步: z -移到-> y 第4步: x -移到-> z 第5步: y -移到-> x 第6步: y -移到-> z 第7步: x -移到-> z 第8步: x -移到-> y 第9步: z -移到-> y 第10步: z -移到-> x 第11步: y -移到-> x 第12步: z -移到-> y 第13步: x -移到-> z 第14步: x -移到-> y 第15步: z -移到-> y 第16步: x -移到-> z 第17步: y -移到-> x 第18步: y -移到-> z 第19步: x -移到-> z 第20步: y -移到-> x 第21步: z -移到-> y 第22步: z -移到-> x 第23步: y -移到-> x 第24步: y -移到-> z 第25步: x -移到-> z 第26步: x -移到-> y 第27步: z -移到-> y 第28步: x -移到-> z 第29步: y -移到-> x 第30步: y -移到-> z 第31步: x -移到-> z

java课程设计方案Hannoi汉诺塔游戏

HUBEINORMALUNIVERSITY Java程序设计 Hannoi塔游戏 论文题目Hannoi塔游戏 学生 指导教师 所在院系 专业名称 完成时间

摘要 《JAVA语言实用教程》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教案环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA语言实用教程》课程后,进行的一次全面的综合训练,JAVA语言实用教程的设计目的是加深对理论教案内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。 目录 一、课程设计任务及要求3 1、课程设计任务3 2、设计要求3 二、需求分析4 1、系统需求分析4 2、系统概述5 3、系统运行环境6 三、设计思路6 概要设计7 四、详细设计7 package Hannoi。7 HannoiWindow类7

AutoMoveDisc类15 Disc类21 HandleMouse类22 Tower类27 TowerPoint 类31 五、运行调试与分析讨论33 六、设计体会与小结36 1.设计体会36 2.小结36 参考文献37 致谢37 一、课程设计任务及要求 1、课程设计任务 设计GUI界面的Hannoi塔游戏,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。 2、设计要求 (1)有三个表示塔的对象,分别命名为A、B和C。A塔上有

若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A 塔上,大盘在下,小盘在上。用户可以用鼠标拖动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。 (2)用户也可以选择让程序自动演示。选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。 (3)可以由用户自己设置盘子数量和盘子大小。 (4)可以改变盘子的颜色、背景颜色以及背景音乐。 (5)游戏分为初、中、高三个等级。 (6)可以记录游戏时间并且设有从新开始按钮。 二、需求分析 1、系统需求分析 使用java面向对象语言设计汉诺塔游戏,此游戏要求:1)界面要求: (1)尽量使用图形界面实现,要符合日常软件使用规 范来设计菜单和界面。

相关文档
最新文档