汉诺塔问题的两种解法(7)
第七节 条件限定法——演示移动过程
上一节完善了2个已有过程,并新增了6个有返回值的过程,完成了对出发点、落脚点的选择,有了这些结果,本节可以收获成果了。
一、两个无返回值过程
(1)不连续移动
出发点是唯一的,落脚点是可计算了,下面我们创建一个过程——不连续移动,来处理除首次移动之外的移动操作,代码图39图所示。
图39 处理除首次移动以外的移动操作
(2)根据状态移动
代码如图40所示,根据全局变量步数判断当前移动是否为首次移动。首次移动的落脚点与整个塔高的奇偶有关,塔高为奇数时,首次移动的落脚点为终点,否则为缓冲区。
图40 处理包括首次移动在内的全部移动
二、事件处理程序
(1)计时事件处理程序
首先在开始按钮的点击事件中设计时器的启用计时属性为真,然后在计时器的计时事件中调用相关过程,完整移动任务,代码如图41所示。
图41 开始执行移动操作,直到任务完成
(2)实现暂停按钮的功能
在开发及测试时,有时需要将程序暂时停下来,思考一下可能存在的问题,然后再让程序继续运行,这正是暂停按钮的功能,代码如图42所示。
图42 暂停按钮的点击事件处理程序
三、测试
在开始测试之前,在设计视图中将计时器的计时间隔改为500毫秒,连接AI伴侣开始测试。在文本输入框中输入数字6,并点击开始按钮。下面的视频是对测试过程的记录。
以上我们用7节的篇幅介绍了解决汉诺塔问题的两种方法,递归法以及条件限制法,陶陶同学正在使用另一种编程语言尝试第三种解法,期待着他的成功及分享。
== 未完待续 ==
项目文件:
汉诺塔.aia
汉诺塔2.aia
赞 (0)