求助
程序代码:[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
表单也上传了。
请求版主们解释,以资理解。
所有的注释是我加上去的。








