风吹不眨眼吧 关注:186贴子:601
  • 1回复贴,共1

按键精灵 教你 0 基础学写脚本 06

只看楼主收藏回复

这一章我们接着上一章,把程序结构给大家说。
三、循环控制语句
循环控制语句主要有 for 循环,While循环,do循环。其中,for、do循环比较常用。实际上,while与do while 的作用是一样的。我们一个一个说。
For循环。
按键的for循环比较简单。实际上功能比起其他语言,也有所不足。
我们来看例子:
例子1:
For 10
TracePrint “循环”
Next
这个很好理解。For后面跟一个常数(不知道什么是常数的话百度下)作为循环次数。当然了,这个常数可以是算术表达式:2*3、3+5等等。
例子2:
For i=0 To 9
TracePrint i
Delay 100
Next
解释下,这个i是一个变量,你这儿可以是i也可以是其他任意的变量,比如x。i=0,意思是i的初始值是0。To 9 的意思是 “到9”(反正小妖是那么理解的)。也就是说,i是从0到9。每运行一次,i就会在自己的基础上加1,超过了9就不再运行。你可以在这个代码的后面加上:
TracePrint i
你就知道最后的运行结果i的值是10。当然,这儿的9一样可以是式子。这样的方式我们用得非常多。比如用来把一个数组的值输入。
Dim a(9) // 数组下标是从0开始,所以定义10个的话就是写9(0到9一共10个)。
For i=0 to UBound(a) // UBound(a)这是a的最大下标,在这儿值是9。
a(i) = i //把i的值赋值给a(i) 我们这儿找不到什么变值,所以给它赋这个变的,到时候输出的时候可以看到变化。
Next
//下面是输出这个数组。
For i=0 to UBound(a)
TracePrint a(i)
Next
这类我们经常用到读取数据啊,处理数组之类的,非常实用。大家熟悉下写法。后面我们会用实例来给大家复习,这儿只作接单介绍。
例子3:
For i=0 to 9 step 2
TracePrint i
Next
Step 2 是i的值,每次在自己的基础上增加2。前面的For i=0 To 9 没有 step 的这个默认为1。后面的这个,大家可以定义成自己想要的值。上面的这个,就是现实0-9中的偶数。
这儿还是一样的,可以是算数表达式。
例子4:
For i=0 to 9
TracePrint i
If i>4 Then
Exit For //退出当前for循环。
End If
Next
实际上,这儿是与if结合,利用i值的变化控制循环体。Exit For是退出当前循环。多个循环嵌套的时候,只在当前循环有效。不会影响到前一个for。我们经常用在找图之类的代码中。
For i = 0 To 50
FindColor 500-i*10,500-i*10,500+i*10,500+i*10,"000000",intX,intY
If intX > 0 And intY > 0 Then
MoveTo intX, intY
Exit for
End If
Next
我这儿是按键自带的找色。当然,上面这个函数效率很低,而且按键自带了一个区域中心找色了。我这儿只是为了体现Exit For的实用。我们把这个找色函数改成以500,500坐标为中心的中心区域找色。覆盖范围是0,0,1000,1000。如果找到了,鼠标移动过去,并且结束循环。PS:区域中心找色在游戏中经常用。希望大家熟悉找色命令。Exit For可以用于所有for的循环体里面。不只是For i = 0 To 50这一种类型。
For嵌套。
For里面是可以含有for的。我们直接用实例给大家说明:做一个乘法九九表。、
乘法九九表格式如下:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
。。。
我们可以看出,其实这两个都是变量。两个都是从1变到9。
再来看:
第一排是1×1。
第二排是1×2 2×2。
第三排是1×3 2×3 3×3。
看出来了么?第一排前面一个是1,后面一个是1,循环一次。
第二排前面一个是1变到2,后面一个全是2,循环两次。
第三排前面一个是1变到3,后面一个全是3,循环3次。
通用式子,如果我们前面一个变量i,后面一个变量j。
我们先写这个。
我们用str装这排的式子(如1×1=1 这个式子)。


IP属地:黑龙江1楼2014-03-16 16:09回复
    Dim str,i,j
    j=9
    str = “” // 清空上次str的值。
    For i = 1 To j
    str = str & i & "×" & j & "=" & i * j & " "//str在上次的字符串的基础上,把这次的加上去。加上的值时要显示的 i的值,× 号,j的值,= 号,i*j的结果、以及一个空格。
    Next
    TracePrint str
    我们这儿,测试的是j=9也就是第9排的情况。
    调试出来的结果是:
    第6行: 1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
    这是我们想要的第9排显示情况。
    既然我们知道,j等于9的情况,会得到像上面那样。那么j等于其他时候呢?
    只要在外面再套一个for,然j的值从1变到9,就可以了。
    Dim str,i,j
    For j=1 to 9
    str = "" // 清空上次str的值。
    For i = 1 To j
    str = str & i & "×" & j & "=" & i * j & " "
    Next
    TracePrint str
    Next
    是不是很简单啊?
    这种方法叫穷举法。我的理解:就是把所有的可能列出来。上面中,我们把所有有可能的出现的两个数相乘的情况列举了出来。
    再给例子,让大家知道什么叫穷举。
    是奇数的两位数有哪些?
    看题目,要把重点看清楚。我们来看,第一个提到的是“是奇数”,第二个提到的是“两位数”。
    是奇数,大家都晓得奇数就是个位数是1,3,5,7,9 的数。两位数,不用说了吧十位上不为0的数。当然了,这个数没有百位,千位什么的了。
    我们先来做个位数。这儿的个位数只有几种可能,就是1,3,5,7,9。用for,变量为i。那么就是for i=1 to 9 step 2 。懂么?初始值是1,因为0的话就是偶数了,一直到9。每次i自加2。因为这样才能保正i是1、3、5、7、9跳过偶数。
    Dim i
    for i=1 to 9 step 2
    TracePrint i
    Next
    这样,我们就把个位出现的所有可能穷举了。下面是十位。十位是不为0的数。也就是1-9。用for,变量为j,那么就是for j=1 to 9 。这儿我们每一次j自加1,所有不用再做step。
    Dim j
    for j=1 to 9
    TracePrint j
    Next
    然后把这两个弄到一起。不会??把其中一个放到另一个里面就行了。没什么讲究的。
    Dim i,j
    for j=1 to 9
    For i = 1 To 9 Step 2
    TracePrint j&i
    Next
    Next
    当然了,为了让你的显示看起来舒服点,显示的字从小到大。那么应该先变动的是个位,然后才是十位。所以,外面的循环应该是十位。里面的是个位。这样,每一次十位变动一次之后,个位都要把所有的列出来。


    IP属地:黑龙江2楼2014-03-16 16:10
    回复