求助
程序代码:
[local]1[/local] N年前(记不清了),从网上,下载来一个叫“汉诺塔演示”的表单,当时看不懂,只是收藏着。现在想学它的动画,在逐句地解读、注释,想努力地盘清每一时刻的状况。因为弄不清变量的变化,和语句理解不了,来求助,请版主们不吝赐教。感谢先哦! 表单的自定义过程(HAN)代码如下: PARAMETERS N,A,B,C &&&&& 返回传递给最近执行程序的参数数目。第一次传来的是:n,1,2,3。 IF N=1 thisform.MOV(n,A,C) &&&&& MOV()为用户自定义过程——写在表单的属性中 t(a)=t(a)-1 &&&&& ??? t(c)=t(c)+1 &&&&& ??? RETURN ELSE thisform.HAN(N-1,A,C,B) &&&&& ??? 为什么可以在自己自定义的过程中调用自己呢??? thisform.MOV(n,A,C) &&&&& ??? t(a)=t(a)-1 &&&&& t(c)=t(c)+1 &&&&& thisform.HAN(N-1,B,A,C) &&&&& ??? 这里又在自己的过程中调用自己定义的过程???与上一句不同的是变量位置。想着就晕了, ENDIF 表单的自定义过程(MOV)代码如下: PARAMETERS n,a,c &&&&& 返回传递给最近执行程序的参数数目 ph='p'+STR(n,1) &&&&& 方块名P1-P9 la='line'+STR(a+1,1) &&&&& 即 A 位上的竖线(第一次是line2) lc='line'+STR(c+1,1) &&&&& 即 C 位上的竖线(第一次是line4) yy=thisform.&ph..top-100 &&&&& 确定上移单位数 FOR y=1 TO yy thisform.&ph..top=thisform.&ph..top-1 &&&&& 每次上移一个单位 thisform.&ph..refresh &&&&& 刷新 FOR yc=1 TO 100000 &&&&& 控制方块的 向上 移动速度 ENDFOR &&&& 这个空的循环是拖延时间,看到方块移动轨迹的关键。这个思路好。 ENDFOR xx=ABS(thisform.&ph..left-(thisform.&lc..left-n*10)) &&&&& ???,判断是方块左右移动的距离,但算不清某时刻的状况 FOR x=1 TO xx thisform.&ph..left=thisform.&ph..left+IIF(c>a,1,-1) &&&&& 每次向左或向右移动一个单位(这是从运行中判断的)。判断不清某个时刻的变量a c的值,所以理解不了。而求助! thisform.&ph..refresh &&&&& 刷新 FOR yc=1 TO 100000 &&&&& 控制方块的 水平方向 移动速度 ENDFOR ENDFOR yy=thisform.line1.top-((t(c)+1)*10)-100 &&&&& 确定下移单位数 FOR y=1 TO yy thisform.&ph..top=thisform.&ph..top+1 &&&&& 每次下移一个单位 thisform.&ph..refresh &&&&& 刷新 FOR yc=1 TO 100000 &&&&& 控制方块的 向下 移动速度 ENDFOR ENDFOR RETURN
表单也上传了。
请求版主们解释,以资理解。
所有的注释是我加上去的。
汉诺塔演示.rar
(4.53 KB)