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

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

只看楼主收藏回复

接着上一章。继续循环控制语句。
While循环。
直接看官方例子:
i=0
While i=0
Msgbox "我停不下来啦!!快住手"
Wend
//当循环条件成立的时候,反复执行循环体
关于While循环,没有太多讲的。因为do循环,for循环基本能够把While循环的功能实现。大家如果要写,那么按照官方例子的格式写就行了。需要说明的是While的循环条件和for不一样。For的是循环次数,而While的是循环条件。只要While循环条件为真,就会运行。
While True
TracePrint "正在循环,这是循环体。"
Wend
比如这个,会一直运行的。
While -1
TracePrint "正在循环,这是循环体。"
Wend
这样?其实只要这个式子的值不是0,就会运行。为0则停止。
Do循环。
do while:Do循环有很多种。其中一种是 do while 。其实和上面的一样的效果。意思就是满足条件,则运行循环体。
Do While True
TracePrint "正在循环,这是循环体。"
Loop
直接这样套,是没什么问题的,效果也是一样的。不过有个好处,就是可以途中终止。
Do While True
TracePrint "正在循环,这是循环体。"
Exit Do
Loop
循环到 Exit Do 的时候退出do循环。实际上这个和Exit for用法是一样的。所以说,do While比While循环有更多的优势。
Do Until:这个跟do while正好相反。这个的意思是条件成立则退出循环。
Do Until True
TracePrint "正在循环,这是循环体。"
Loop
这样的话,根本不会执行循环体。
Do Until False
TracePrint "正在循环,这是循环体。"
Exit Do
Loop
这样反倒是执行了。当然了,Exit Do 同样有效。
Do …loop while:这个循环,是先循环一次,然后再判断条件结果。结果为真则继续循环。
Do
TracePrint "正在循环,这是循环体。"
Loop While False
可以看到,虽然值是假,但是还是执行过一次循环体的。
这个有什么用呢?我们做一个小题目:按键:如果用户按了”A”键,那么提示按键正确,停止脚本。如果其他按键,那么提示按键错误,重新输入。让用户重新按键。
先来分析一下,我们需要用户先按一次键,然后才判断是否按键正确。所以我们这儿的循环体是等待用户按键,并且把这个按键码存在变量里面。
变量名 = WaitKey()
循环体有了,我们该怎么选择循环语句呢?因为是需要先让用户按键一次。所以,应该是用do …loop while。条件是 变量名<>65 ,意思是用户按的按键不是65(A键)。
Dim 变量名
TracePrint “请按键”
Do
变量名 = WaitKey()
Loop While 变量名 <> 65
TracePrint "按键正确"
咦,你是不是发现错误的时候的提示找不到地方放啊?放在 变量名 = WaitKey() 前边吧,一开始运行的时候就出来一个错误提示,放在后面吧,按键完,还没开始判断又是一个提示。题目要求的是,判断循环条件的时候,如果正确就提示按键正确停止脚本,如果错误就提示错误重新输入。我们可以写一个函数,如果正确就提示按键正确并且返回值0,如果错误就提示错误,并返回值0。调用这个函数作为条件,我们就实现了在判断的同时,提示用户是否正确输入。
TracePrint "请按键"
Do
变量名 = WaitKey()
Loop While 判断按键是否正确(变量名)<p></p>
<p style="line-height: 30px; text-indent: 2em;">Function 判断按键是否正确(变量名)
If 变量名 <> 65 Then
TracePrint "按键错误,请重新输入"
判断按键是否正确=1
Else
TracePrint "按键正确"
判断按键是否正确=0
End If
End Function</p>
do …loop Until。
do …loop Until和do …loop while也是差不多。只不过这儿的条件是成立则跳出循环而已。也就是说,如果用do …loop Until的话,只需要改下条件。
Dim 变量名
Do
变量名 = WaitKey()
Loop While 变量名 = 65 //不等号改成等号 不等和相等的结果刚好是相反的
TracePrint "按键正确"
这样而已。
大家可以试着把上面题目的do …loop while循环改成do …loop Until。
我们来做一些这样的循环,同样的如循环找色。
Do
TracePrint "正在找色"
Loop Until 找色(0, 0, 1024, 768, "000000")
TracePrint "找色完成"
Function 找色(左上X坐标, 左上Y坐标, 右下X坐标, 右下Y坐标, 颜色值)
Dim intX,intY
FindCenterColor 左上X坐标, 左上Y坐标, 右下X坐标, 右下Y坐标, 颜色值, intX, intY
If intX > 0 And intY > 0 Then
// 找色 = intX & "," & intY //这儿如果把下面三条删除,那么这条可以使用,直接返回找到的 intX intY。其实这个函数再加一个参数,就可以通用在点击或者是找位置了。
MoveTo intX,intY
LeftClick 1
找色=1
Else
Delay 100
找色=0
End If
End Function


IP属地:黑龙江1楼2014-03-16 16:12回复
    以上教程出自
    http://bbs.anjian.com/thread-500951-1-1.html


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