汉诺塔课程设计报告
汉诺塔游戏课程设计

汉诺塔游戏课程设计一、课程目标知识目标:1. 学生能理解汉诺塔游戏的起源、规则及数学原理。
2. 学生能掌握递归算法的基本概念及其在汉诺塔游戏中的应用。
3. 学生能运用数学归纳法推导汉诺塔游戏的步数与盘子数之间的关系。
技能目标:1. 学生能够运用所学知识,独立设计并解决汉诺塔游戏的不同层次问题。
2. 学生能够通过小组合作,提高问题解决能力和团队协作能力。
3. 学生能够运用信息技术工具,进行汉诺塔游戏模拟和数据分析。
情感态度价值观目标:1. 学生对数学产生兴趣,认识到数学与游戏的紧密联系,提高学习数学的积极性。
2. 学生在游戏中培养逻辑思维能力和创新精神,增强自信心和自主探究意识。
3. 学生通过合作与交流,培养团队精神,学会尊重他人,形成积极向上的人生态度。
课程性质:本课程以汉诺塔游戏为载体,结合数学知识和算法,培养学生的逻辑思维能力、问题解决能力和团队协作能力。
学生特点:五年级学生具有一定的数学基础和逻辑思维能力,对游戏具有浓厚兴趣,但可能对递归算法等抽象概念理解有限。
教学要求:结合学生特点,教师需采用生动有趣的教学方法,引导学生主动探究,注重培养学生的实践操作能力和团队协作精神。
通过本课程的学习,使学生将所学知识应用于实际情境,提高学生的综合素养。
二、教学内容1. 汉诺塔游戏背景介绍:包括汉诺塔的起源、发展及其在数学游戏中的地位。
相关教材章节:数学游戏与趣味数学2. 汉诺塔游戏规则及数学原理:讲解汉诺塔的游戏规则,引导学生发现汉诺塔移动盘子过程中的数学原理。
相关教材章节:组合数学基本概念3. 递归算法及其在汉诺塔游戏中的应用:介绍递归算法的概念,通过实例演示递归算法在汉诺塔游戏中的运用。
相关教材章节:算法与程序设计4. 汉诺塔游戏步数与盘子数之间的关系:运用数学归纳法,推导汉诺塔游戏中盘子数与步数之间的关系。
相关教材章节:数学归纳法5. 汉诺塔游戏实践操作:组织学生进行汉诺塔游戏实践,培养学生动手操作能力和问题解决能力。
汉若塔实验报告

一、实验背景汉诺塔问题(Hanoi Tower Problem)是一个经典的递归问题,最早由法国数学家亨利·埃德蒙·卢卡斯(Edouard Lucas)在1883年提出。
该问题涉及三个柱子和一系列大小不同的盘子,初始时所有盘子按照从小到大的顺序叠放在一个柱子上。
问题的目标是按照以下规则将所有盘子移动到另一个柱子上:每次只能移动一个盘子,且在移动过程中,大盘子不能放在小盘子上面。
汉诺塔问题不仅是一个数学问题,也是一个计算机科学问题。
它在算法设计、递归算法分析等领域有着重要的应用价值。
通过解决汉诺塔问题,可以加深对递归算法的理解,同时也能够锻炼逻辑思维和问题解决能力。
二、实验目的1. 理解汉诺塔问题的基本原理和解决方法。
2. 掌握递归算法的设计和应用。
3. 分析汉诺塔问题的复杂度,为实际应用提供参考。
三、实验内容1. 实验环境:Windows操作系统,Python编程语言。
2. 实验步骤:(1)设计一个汉诺塔问题的递归算法。
(2)编写程序实现该算法。
(3)测试算法在不同盘子数量下的运行情况。
(4)分析算法的复杂度。
3. 实验程序:```pythondef hanoi(n, source, target, auxiliary):if n == 1:print(f"Move disk 1 from {source} to {target}")returnhanoi(n-1, source, auxiliary, target)print(f"Move disk {n} from {source} to {target}") hanoi(n-1, auxiliary, target, source)# 测试程序hanoi(3, 'A', 'C', 'B')```4. 实验结果:(1)当盘子数量为3时,程序输出以下移动序列:```Move disk 1 from A to CMove disk 2 from A to BMove disk 1 from C to BMove disk 3 from A to CMove disk 1 from B to AMove disk 2 from B to CMove disk 1 from A to C```(2)当盘子数量为4时,程序输出以下移动序列:```Move disk 1 from A to CMove disk 2 from A to BMove disk 1 from C to BMove disk 3 from A to CMove disk 1 from B to AMove disk 2 from B to CMove disk 1 from A to CMove disk 4 from A to BMove disk 1 from C to BMove disk 2 from C to AMove disk 1 from B to AMove disk 3 from C to BMove disk 1 from A to CMove disk 2 from A to BMove disk 1 from C to BMove disk 4 from B to CMove disk 1 from B to AMove disk 2 from A to CMove disk 1 from A to C```四、实验分析1. 算法复杂度:汉诺塔问题的递归算法具有指数级的复杂度,其时间复杂度为O(2^n),其中n为盘子的数量。
数据结构课程报告汉诺塔

目录1 课题需求......................................... 错误!未定义书签。
2 概要设计 (2)2.1 递归 (2)2.2 非递归 (4)3 详细设计和实现 (2)4 调试与测试 (11)4.1 启动窗口 (11)4.2 递归实现 (11)4.3 非递归实现 (13)4.4 退出 (14)5 致谢 (15)6 参考文献 (15)2 概要设计汉诺塔是一个经典的问题,曾被称为“世界末日问题”。
此次程序设计全面讨论了解决此问题的方案,详细研究,了解,解决问题的算法设计,给出了具体算法,最后由手工输入测试数,运用递归与非递归算法得出结果。
2.1 递归若只有一个圆盘的话直接将圆盘移至C杆;若为N个圆盘的话将N-1个圆盘当作整体借助C杆移至B杆,将N号盘移至C杆,再借助A杆重复上面的操作即可将圆盘移至C杆。
2.2 非递归看出二叉树实现,假设‘A’一开始有n个圆盘,前n-1个‘A’通过‘C’移到‘B’上看出左孩子,第n个移到‘C’看出根,将‘B’中n-1通过‘A’移到‘C’看成右孩子,建立完全二叉树。
主要借助二叉树的非递归中序遍历方法实现,利用栈堆来实现。
3 详细设计和实现DiGui.cpp文件:#include<iostream.h>//递归法解决汉诺塔问题void HanNuoTaDiGui(int n,char a,char b,char c){if(n<2){cout<<" 圆盘"<<n<<" : 从"<<a<<"移到"<<c<<endl;return;}HanNuoTaDiGui(n-1,a,c,b);//n-1个圆盘移到bcout<<" 圆盘"<<n<<" : 从"<<a<<"移到"<<c<<endl;HanNuoTaDiGui(n-1,b,a,c);}munu.cpp文件://目录菜单#include<iostream.h>void munu(){cout<<"**************************************************"<<endl;cout<<"********************************************"<<endl<<endl;cout<<" 汉诺塔 "<<endl<<endl;cout<<"**************************************************"<<endl;cout<<"**************************************************"<<endl;cout<<"请选择实现的方法:"<<endl;cout<<" 1 代表递归方法。
汉诺塔牌课课程设计

汉诺塔牌课课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:通过本课程的学习,学生需要掌握汉诺塔牌的基本概念、规则和策略,了解其背后的数学原理和逻辑思维。
2.技能目标:学生能够运用汉诺塔牌的规则和策略进行游戏,提高解决问题的能力,培养逻辑思维和抽象思维。
3.情感态度价值观目标:通过汉诺塔牌的学习和游戏,学生能够培养团队合作意识,增强自信心,提高自我认知和自我激励能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.汉诺塔牌的基本概念和规则,包括牌的种类、牌面数值和游戏的目标。
2.汉诺塔牌的策略和技巧,包括牌序的安排、牌型的组合和游戏的节奏控制。
3.汉诺塔牌的数学原理和逻辑思维,包括排列组合、递归思想和贪心算法。
4.汉诺塔牌的游戏实践,包括个人游戏和团队游戏的规则和技巧。
三、教学方法为了实现本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解汉诺塔牌的基本概念、规则和策略,使学生了解和掌握相关知识。
2.案例分析法:通过分析典型的汉诺塔牌游戏案例,使学生理解和运用相关策略和技巧。
3.实验法:通过实际操作汉诺塔牌游戏,使学生锻炼和提高解决问题的能力。
4.小组讨论法:通过团队合作和讨论,使学生培养团队合作意识和沟通交流能力。
四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择一本适合学生年级和知识深度的汉诺塔牌教材,作为学生学习的主要参考资料。
2.多媒体资料:制作相关的PPT、视频等多媒体资料,以便于学生更直观地理解和掌握知识。
3.实验设备:准备足够的汉诺塔牌游戏道具,以便于学生进行实际操作和实验。
4.在线资源:利用互联网资源,提供相关的学习、论坛和在线游戏,以便于学生自主学习和交流。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与程度、提问回答和小组讨论的表现,评估学生的学习态度和积极性。
Hanoi塔问题 实验报告

实验一(3)一、实验题目:顺序表的应用二、实验内容:Hanoi塔问题。
(要求4个盘子移动,输出中间结果)三、设计分析:首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;若n为奇数,按顺时针方向依次摆放 A C B。
(1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。
(2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。
即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。
这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。
(3)反复进行(1)(2)操作,最后就能按规定完成汉诺塔的移动。
所以结果非常简单,就是按照移动规则向一个方向移动金片:如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C四、程序代码:#include<iostream>using namespace std;int m=0;void move(char A,int n,char C){cout<<n<<"从"<<A<<"到"<<C<<endl;}void hanoi(int n,char A,char B,char C){if(n==1){move(A,1,C);m=m+1;}else{hanoi(n-1,A,C,B);move(A,n,C);hanoi(n-1,B,A,C);m=m+1;}}void main(){int n;cout<<"请输入圆盘的个数N=";cin>>n;cout<<"移动的方法如下:"<<endl;hanoi(n, 'A','B','C');cout<<"移动总次数:"<<m<<endl;}五、测试用例:六、实验总结通过这次实验,对于顺序表的相关知识有了更加深刻的认识,虽然中间出了很多问题,但是经过查阅资料,请教同学,对程序进行调试以后都得以解决。
汉诺塔-数据结构课程设计

数据结构课程设计报告目录一、需求分析 (3)二、概要设计 (4)三、详细设计 (6)四、测试与分析 (7)五、总结 (7)六、附录:源程序清单 (8)一、需求分析1.1问题描述汉诺塔(又称河内塔)问题是印度的一个古老的传说。
开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着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此外,汉诺塔问题也是程序设计中的经典递归问题。
将n个盘子从a座移动到c座可以分解为以下3个步骤:(1)将a上n-1个盘借助c座先移到b座上。
(2)把a座剩下的一个盘移到c座上。
(3)将n-1个盘从c座借助于a座移到c座上。
1.2基本要求(1)输入的形式和输入值的范围:输入圆盘的数量,类型为整型,大于零。
(2)输出的形式:运行结果为用字母表示移动盘子的方案,而并非是真正移动盘子。
(3) 程序所能达到的功能;输入圆盘数量为定值时的移盘方案。
帮助我们更清晰的理解汉诺塔问题,及递归调用的应用。
汉诺塔课程设计报告

C课程设计报告设计人:彭信龙日期:2013-11-16指导教师: 曾宇容设计题目:汉诺塔一、设计任务汉诺塔问题的二种求解。
1、编写递归方法求解的程序;2、编写非递归方法求解的程序;二、设计目的本课程设计主要训练学生在C语言有关递归思想的应用。
三、功能描述move();通过递归讲盘子放置到指定位置。
if(n= = 1){直接将A上面的盘子移到C柱子上;}else{先把A柱子上的N-1个盘子从A借助C移到B;再将A上的第N个盘子移到C;再把B柱子上的N-1个盘子借助A移到C;}四、总体设计主要函数:move();int main();move():通过递归思想将所有盘子从A柱子移到C柱子;int main():输入盘子总个数;源代码:#include <stdio.h>int i=0;void move(int n ,int x ,int y,int z){if(n == 1){i++;printf("%d、圆盘从%c移动到%c\n",i,x,z);}else{move(n-1,x,z,y);i++;printf("%d、圆盘从%c移动到%c\n",i,x,z);move(n-1,x,z,y); }}void main(){int n;printf("请输入要移动盘子的总个数n:");scanf("%d",&n);printf("圆盘的移动步骤如下:\n");move(n,'X','Y','Z');printf("总共移动了%d次。
\n",i);}五、程序实现。
校本课程《汉诺塔游戏》【教学设计】

校本课程《汉诺塔游戏》【教学设计】.doc教学设计:汉诺塔游戏研究内容:数学游戏“汉诺塔”第一课时研究目标:1.了解汉诺塔游戏的传说和基本规则。
2.在游戏中掌握汉诺塔游戏的基本规则,初步发现游戏中的规律。
3.发展归纳推理能力和逻辑思维能力。
4.体会与他人合作获得更多的成功体验。
研究重点:掌握汉诺塔游戏的基本规则,发现游戏中的规律。
研究难点:发展归纳推理能力和逻辑思维能力。
研究过程:课前活动:1.引入话题,了解学生喜欢的游戏。
2.播放黑猩猩玩游戏的视频,引出汉诺塔游戏。
一、认识XXX:1.介绍XXX的来历和相关信息。
2.介绍汉诺塔的各部分,包括托盘和三根柱子。
3.介绍汉诺塔游戏的规则,包括从一边到另一边、一次只能移动一个金片和大金片不能放在小金片上面。
二、动手实践玩游戏:1.从一个圆片开始研究,掌握游戏规则。
2.探究两个圆片的玩法,发现规律。
3.逐步增加圆片数量,练归纳推理和逻辑思维能力。
4.在合作中获得成功体验。
教学设计:汉诺塔游戏研究内容:数学游戏“汉诺塔”第一课时研究目标:1.了解汉诺塔游戏的传说和基本规则。
2.在游戏中掌握汉诺塔游戏的基本规则,初步发现游戏中的规律。
3.发展归纳推理能力和逻辑思维能力。
4.体会与他人合作获得更多的成功体验。
研究重点:掌握汉诺塔游戏的基本规则,发现游戏中的规律。
研究难点:发展归纳推理能力和逻辑思维能力。
研究过程:课前活动:1.引入话题,了解学生喜欢的游戏。
2.播放黑猩猩玩游戏的视频,引出汉诺塔游戏。
一、认识XXX:1.介绍XXX的来历和相关信息。
2.介绍汉诺塔的各部分,包括托盘和三根柱子。
3.介绍汉诺塔游戏的规则,包括从一边到另一边、一次只能移动一个金片和大金片不能放在小金片上面。
二、动手实践玩游戏:1.从一个圆片开始研究,掌握游戏规则。
2.探究两个圆片的玩法,发现规律。
3.逐步增加圆片数量,练归纳推理和逻辑思维能力。
4.在合作中获得成功体验。
请在A柱上放置两个圆片,并将它们移动到C柱上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汉诺塔游戏学院:理学院班级:信科102班组长:李万东组员1:袁雪娇组员2:张瑜设计期限2012 年3月1开始至2012年6月20 结束课程设计题目:汉诺塔游戏课程设计目的:《JA V A程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是计算机相关专业学生学习完《JA V A程序设计》课程后,进行的一次全面的综合训练,JA V A程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
随着社会的进步,我们用来娱乐的游戏世界也越来越丰富,越来越复杂。
本程序的汉诺塔游戏不但包括了游戏最基本的功能,而且还能培养用户的逻辑思维能力,同时也给玩家提供了一定的娱乐空间。
本游戏还包括一个自动演示搬移汉诺塔的功能,此功能能够帮助初次接触此游戏的用户了解此游戏的玩法。
课程设计理论:本程序要求实现用图形界面,画出3个杆和若干个大小不一的矩形盘子,形成3个塔,分别为A塔,B塔,C塔,同时盘子数目可以人工设定。
用户可以用鼠标选中盘子,然后通过拖动鼠标来移动该盘子、释放鼠标来放置该盘子。
用户在移动盘子的过程中,可以随时单击汉诺塔菜单栏的菜单中提供的按钮,重新开始游戏,并且可以通过单击汉诺塔菜单栏的菜单提供的按钮,让程序自动完成把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.图 2 拖拽盘子依次拖拽盘子,直至盘子移动到B塔或者C塔。
3.移动成功图 3 移动成功将所有的盘子移动到B塔或者C塔,就会自动弹出“亲,恭喜你完成游戏!!!”。
4.重新开始图4-1 点击“重新开始”点击“游戏”->“重新开始”,就会弹出窗口,如图4-2图4-2 重新开始点击“是”,会重新绘制盘子,回复的初始位置;点击“否”,游戏将继续5.难易程度图5-1 点击“难易程度”点击“游戏”->“难易程度”就会弹出窗口5-2图5-2 选择难以级别在“难易程度”窗口中点击下拉按钮就会出现图5-3图5-3 难以程度6.四种级别比较图6-1 简单:四层图6-2 中等:五层图6-3 困难:五层图6-4 中等:超难7.游戏攻略图7-1 点击游戏攻略“简单:四层”点击“游戏”->“难易程度”->“简单:四层”,游戏就会自动演示游戏攻略8.游戏介绍图8 游戏介绍点击“确定”按钮或者是点击“关闭”按钮,“游戏介绍”窗口将关闭9.工作人员图8 工作人员点击“确定”按钮或者是点击“关闭”按钮,“工作人员”窗口将关闭10.课程设计时遇到的困难及解决方法10.1 课程设计时遇到的困难10.1.1 课程设计过程中原想盘子通过图片形式显示,但是实现不了10.1.2 课程设计过程中盘子的位置不好控制10.1.3 课程设计过程中显示字体用标签形式显示,但是这样有的不太协调10.1.4 课程设计过程中原本要加入移动盘子的步数和所用时间,但是不太容易解决10.2 课程设计时遇到困难的解决方法10.2.1 为了解决盘子的显示,将盘子的显示方式改为二维作图方式10.2.2 为了解决控制盘子的位置,将盘子放置在一个四边形的容器中,然后通过四边形容器的左上角坐标和四边形容器的宽和高来空值盘子的位置10.2.3 为了解决显示文字的位置协调问题,将文字通过二维作图方式绘制 10.2.4 由于时间和精力有限,用户移动盘子的步数和所用时间从功能中删除程序清单:源代码:package hannuota;import java.awt.*;import ;import javax.swing.*;//游戏界面public class Hannuota extends JFrame implements ActionListener, Runnable{JFrame f;HannoiTower tower=null;char towerName[]={'A','B','C'};int DiskCount,DiskWidth,DiskHeight;Thread thread;//定义声明菜单栏及菜单栏内的菜单,菜单项JMenuBar caidanlan=new JMenuBar();JMenu youxi=new JMenu("游戏");JMenuItem chongxinkaishi=new JMenuItem("重新开始");JMenuItem nanyichengdu=new JMenuItem("难易程度");JMenuItem tuichu=new JMenuItem("退出");JMenu bangzhu=new JMenu("帮助");JMenuItem youxijieshao=new JMenuItem("游戏介绍");JMenuItem gongzuorenyuan=new JMenuItem("工作人员");JMenu youxigonglue=new JMenu("游戏攻略");JMenuItem jiandan=new JMenuItem("简单:四层");JMenuItem zhongdeng=new JMenuItem("中等:五层");JMenuItem kunnan=new JMenuItem("困难:六层");JMenuItem chaonan=new JMenuItem("超难:七层");public Hannuota(){thread=new Thread(this);DiskCount=4;DiskWidth=150;DiskHeight=20;tower=new HannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);//声明字体设置的初始值Font font=new Font("宋体",Font.PLAIN,14);Font font1=new Font("宋体",Font.PLAIN,16);//设置布局格式和各个组件的位置add(tower,BorderLayout.CENTER);//添加菜单栏中的菜单和菜单项setJMenuBar(caidanlan);caidanlan.add(youxi);caidanlan.add(bangzhu);youxi.add(chongxinkaishi);youxi.addSeparator();youxi.add(nanyichengdu);youxi.addSeparator();youxi.add(tuichu);bangzhu.add(youxigonglue);bangzhu.addSeparator();bangzhu.add(youxijieshao);bangzhu.add(gongzuorenyuan);youxigonglue.add(jiandan);youxigonglue.add(zhongdeng);youxigonglue.add(kunnan);youxigonglue.add(chaonan);//给菜单项注册事件监听者chongxinkaishi.addActionListener(this);nanyichengdu.addActionListener(this);tuichu.addActionListener(this);youxijieshao.addActionListener(this);gongzuorenyuan.addActionListener(this);jiandan.addActionListener(this);zhongdeng.addActionListener(this);kunnan.addActionListener(this);chaonan.addActionListener(this);//设置菜单及菜单项的字体、字形、字号youxi.setFont(font);bangzhu.setFont(font);chongxinkaishi.setFont(font);nanyichengdu.setFont(font);tuichu.setFont(font);youxijieshao.setFont(font);gongzuorenyuan.setFont(font);youxigonglue.setFont(font);jiandan.setFont(font);zhongdeng.setFont(font);kunnan.setFont(font);chaonan.setFont(font);}public void run(){this.remove(tower);tower=new HannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);add(tower,BorderLayout.CENTER);validate();tower.zidongyanshi(DiskCount,towerName[0] ,towerName[1],towerName[2]); }//点击事件响应public void actionPerformed(ActionEvent e){String cmd=e.getActionCommand();String title="";String message="";int type; //定义弹出对话框的类型对象if(cmd.equals("重新开始")){int response = JOptionPane.showConfirmDialog(this,"立即开始一个新游戏吗?","重新开始提示消息",JOptionPane.YES_NO_OPTION,RMA TION_MESSAGE);if (response == JOptionPane.NO_OPTION)return;else{if(!(thread.isAlive())){this.remove(tower);tower=newHannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);add(tower,BorderLayout.CENTER);validate();}}}if(cmd.equals("难易程度")){int messageType=JOptionPane.QUESTION_MESSAGE;String result="";String[] values={"简单:四层","中等:五层","困难:六层","超难:七层"};title="难易程度";message="请选择游戏的难以级别:";result=(String)JOptionPane.showInputDialog(this,message,title,messageType,null,values,val ues[0]);if(result=="简单:四层"){DiskCount=4;this.remove(tower);tower=new HannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);add(tower,BorderLayout.CENTER);validate();}if(result=="中等:五层"){DiskCount=5;this.remove(tower);tower=new HannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);add(tower,BorderLayout.CENTER);}if(result=="困难:六层"){DiskCount=6;this.remove(tower);tower=new HannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);add(tower,BorderLayout.CENTER);validate();}if(result=="超难:七层"){DiskCount=7;this.remove(tower);tower=new HannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);add(tower,BorderLayout.CENTER);validate();}}if(cmd.equals("退出")){int response = JOptionPane.showConfirmDialog(this,"您要退出游戏吗?","退出提示消息",JOptionPane.YES_NO_OPTION,RMA TION_MESSAGE);if (response == JOptionPane.NO_OPTION)return;elseSystem.exit(0);}if(cmd.equals("游戏介绍")){type=JOptionPane.PLAIN_MESSAGE;title="游戏介绍";message="游戏介绍:汉诺塔又称河内塔,汉诺塔是源于印度一个古老的益智传说:\n" +" 上帝创造世界的时候做了三根金刚石柱,在一根柱子上从下往\n" +" 上按大小顺序摞着64片黄金圆盘。