欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c# 实现汉诺塔游戏

程序员文章站 2022-03-02 11:52:24
汉诺塔游戏一旦掌握了规律,其实是有点单调和无聊的,不过却是学习递归的一个绝佳例子,想当初学习老谭c的时候,就卡在这儿好长时间。对初学编程的人来说,递归本身就不易理解,如果使用c语言没有好的调试环境就更...

汉诺塔游戏一旦掌握了规律,其实是有点单调和无聊的,不过却是学习递归的一个绝佳例子,想当初学习老谭c的时候,就卡在这儿好长时间。

对初学编程的人来说,递归本身就不易理解,如果使用c语言没有好的调试环境就更难去理解了。在这方面,vs调试输出是真方便,一目了然。

但要想理解递归求解汉诺塔,还是得先玩一玩游戏本身,有点感受。另外,设计一下这个游戏也可以加深对它的理解,同时还可以对数据结构中的栈有一个简单的认识。

因为汉诺塔的游戏规则本身就是一个栈,只能从平台最上面取走碟子,然后放在另一个平台最上面,这明显是个栈。下面是我设计的游戏界面:

c# 实现汉诺塔游戏

游戏的玩法关键:奇数个盘子,第一个先移到c上;偶数个盘子,第一个先移到b上

平台和背景容器是事先画好的,碟子是动态生成的,使用了容器控件panel的拖动事件来实现拖动碟子(就是个label控件而已)的功能。

主要代码:

用c#写的代码感觉都不用怎么解释,大概思路一说,关键的地方注释一下,一看就明白了。

然后说到解法,其实就是使用老谭c的代码,不过标注了有用的调试输出信息,如下:

理解1:移动n个盘子的步数是移动n-1个盘子的步数的2倍再加1,即:a[n] = 2a[n-1]+1,可推出:a[n]=2^n-1
理解2:n个盘子分配给n个人的话,第1人(总工)只需走1步,第2人(分包)走2步,第3人(分包)走4步...第n人(工人)走2^(n-1)步
理解3:从最上层开始层层分解任务,下面的所有层次干完后他再干然后下层继续补完,每个人都干活了,只有最底层的人接到任务不做分解直接开干
查看调试输出可以很容易的理解整个调用过程,有碟子数量和双箭头的为目标任务,有碟子数量和单箭头的为实际任务,只有单箭头的为实际执行步骤

将n个盘从a座借助b座移到c座,将上面的数据代入就可以很容易的理解了。下载地址

以上就是c# 实现汉诺塔游戏的详细内容,更多关于c# 汉诺塔游戏的资料请关注其它相关文章!

相关标签: c# 汉诺塔