APPInventor解汉诺塔6

网友投稿 2019-05-03 10:20

        第六次课,我们将通过不同颜色的线段来表示汉诺塔的圆盘,实现界面较好的展示汉诺塔的移动过程。

汉诺塔的课程全部结束,AI代码我已经上传至公众微信号网盘,朋友们可以下载参考。

程序中的变量及函数说明如下:

变量:

级数:数,表示汉诺塔游戏的级数。

移动次数:数,用于统计汉诺塔复归需要移动的步数。

记录移动顺序:列表,存储汉诺塔还原过程的移动编号,1——6(具体每个数表示的含义请看视频讲解)。

A序列:列表,存储汉诺塔A柱上圆盘的编号,从列表的最低项到最高项,分别存放该柱上最下层到最上层的圆盘编号,在程序开始,提交按钮被点击时,将初始位置A柱上的圆盘以此赋给A序列列表。

B序列:列表,存储汉诺塔B柱上圆盘的编号。

C序列:列表,存储汉诺塔C柱上圆盘的编号。

显示顺序:数,表示还原移动过程中,进行到了哪一步。

新增变量:

颜色列表:列表,存储每一级圆盘的颜色。

宽度列表:列表,存储每一级圆盘的直径。

暂停_继续:数,表示当前按键的状态,并据此来暂停或者启用定时器。

过程:

归位:汉诺塔移动的主函数,该函数使用经典的递归算法实现。传递参数:当前级数——表示当前的汉诺塔的级数,包括递归调用过程中降级的级数;A字母标识——表示A柱;B字母标识——表示B柱;C字母标识——表示C柱;

移动记录:记录移动的步数,并用文本记录移动的过程。

还原移动过程:根据移动过程中存储的移动编号(1——6),判定每一步进行了何种移动,并对ABC序列列表进行相应的添加及删减操作。

画线:本次课补充完善了画线函数,实现用线段来显示圆盘,显示程序段中数学处理需要理解一下(具体看频讲解)。参数:ABC选择——ABC柱的选择(实际传递数据为1,3,5);列表的项——列表某一具体项的内容;线的宽度——用于表示圆盘的线段的宽度;第几项——表示该列表中的第几项。

显示:还原移动过程中,用于显示的函数,本次课实现使用不同颜色的线段表示圆盘来展示移动过程。

事件:

当“提交”被点击时:提交当前需要恢复的汉诺塔的级数,并将移动步数清零。

当“开始移动”被点击时:启动汉诺塔复归。

当“计时器1”到达计时点时:根据记录移动顺序的列表长度,逐步显示还原移动过程。

新增事件:

当“暂停”被点击时:按下时改变暂停_继续变量的值,并启动或者停用计时器。

程序截图如下:

https://cdn.china-scratch.com/timg/190505/1020063947-0.jpg

https://cdn.china-scratch.com/timg/190505/10200L414-1.jpg

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com