話(huà)說(shuō),很多新人不懂得使用子程序,或者不是很理解子程序的概念,以至于在面對(duì)重復(fù)代碼的時(shí)候使用很多Goto語(yǔ)句,導(dǎo)致程序上的邏輯混亂,調(diào)試?yán)щy,其實(shí)。有很大一部的goto語(yǔ)句,我們可以用子程序來(lái)替代。使用子程序可以讓我們的腳本邏輯變得更加清晰,并且易于調(diào)試。讓我們先看看按鍵寶典上對(duì)于子程序的解釋
子程序,我們可以把它理解為在一個(gè)腳本中,如果其中有些腳本內(nèi)容優(yōu)化完全相同或是相似,為了簡(jiǎn)化腳本,可以把這些重復(fù)的程序段單獨(dú)列出,并按一定的格式編寫(xiě)成子程序。主程序在執(zhí)行過(guò)程中如果需要某一子程序,通過(guò)調(diào)用命令來(lái)調(diào)用該子程序,完成后返回主腳本,繼續(xù)執(zhí)行后面的腳本。
嗯,好吧,或許看起來(lái)有些拗口。 其實(shí)。我們可以把我們的整個(gè)程序看做成一個(gè)人,比如腳本的名字就是人的名字,那么子程序,就是人一個(gè)個(gè)的動(dòng)作。讓我們來(lái)舉個(gè)實(shí)例,比如說(shuō)拿這個(gè)動(dòng)作。我們每天都要拿很多東西。如果放到代碼里,我們要。。。
- 1.杯子
- MoveTo 杯子的x坐標(biāo), 杯子的y坐標(biāo)
- 執(zhí)行拿起動(dòng)作
- 2.筷子
- MoveTo 筷子的x坐標(biāo), 筷子的y坐標(biāo)
- 執(zhí)行拿起動(dòng)作
- 3.汽車(chē)
- MoveTo 汽車(chē)的x坐標(biāo), 汽車(chē)的y坐標(biāo)
- 執(zhí)行拿起動(dòng)作(超人呦~~)
- 。。。。。還有很多
復(fù)制代碼 我們不難發(fā)現(xiàn)。其實(shí)我們每次的動(dòng)作都是相同的,全部都是moveto 某坐標(biāo),然后執(zhí)行拿起動(dòng)作。這時(shí)候。我們就該考慮用子程序了。 下面讓我們看看子程序的寫(xiě)法
- Call 拿起(杯子的x坐標(biāo), 杯子的y坐標(biāo))
- Call 拿起(筷子的x坐標(biāo), 筷子的y坐標(biāo))
- Call 拿起(汽車(chē)的x坐標(biāo), 汽車(chē)的y坐標(biāo))
- 。。。后面想加多少加多少
- Sub 拿起(x,y)
- MoveTo x, y
- 執(zhí)行拿起動(dòng)作
- End Sub
復(fù)制代碼 看。是不是代碼要簡(jiǎn)化很多呢?如果每一個(gè)動(dòng)作的代碼都要十條甚至幾十條,我們能簡(jiǎn)化多少行的代碼呢。想想吧親~好。讓我們來(lái)解釋一下這個(gè)子程序的意思。 首先,子程序的聲明定義。是這樣的
- Sub 子程序名(參數(shù)a,參數(shù)b...)
- 你的重復(fù)代碼
- End Sub
復(fù)制代碼
說(shuō)明參數(shù)可以是多個(gè),也可以一個(gè)都沒(méi)有,我們可以把參數(shù)理解成一個(gè)個(gè)未賦值的變量,而調(diào)用子程序時(shí)填寫(xiě)的參數(shù)則是給這個(gè)變量賦值,如果我們只想單純的重復(fù)執(zhí)行一段代碼。那么只需寫(xiě)成
- Sub 子程序名
- 你的重復(fù)代碼
- End Sub
復(fù)制代碼 接下來(lái)是調(diào)用,當(dāng)我們寫(xiě)好子程序后。我們只要執(zhí)行調(diào)用的命令,子程序就會(huì)執(zhí)行啦。當(dāng)然。如果不調(diào)用,子程序是不會(huì)自動(dòng)執(zhí)行的,以下是調(diào)用代碼
- Call 子程序名(參數(shù)a,參數(shù)b...)
復(fù)制代碼 調(diào)用子程序時(shí)填寫(xiě)的參數(shù)我們可以看做是給這個(gè)變量賦值,當(dāng)然。如果你的子程序不帶參數(shù),這樣寫(xiě)也是可以的。接下來(lái),讓我們做個(gè)小小的實(shí)驗(yàn)吧。請(qǐng)?jiān)诎存I精靈的源文件(代碼模式)輸入以下命令
- Call PrintMsg
- Sub PrintMsg
- MEssageBox "我執(zhí)行啦"
- End Sub
復(fù)制代碼 然后調(diào)試執(zhí)行以上代碼,我們會(huì)發(fā)現(xiàn)。跳出了一次彈出框,內(nèi)容是“我執(zhí)行啦”同理。如果多調(diào)用Call PrintMsg幾次,彈出框也就多跳出幾次。我們同樣也可以試試以下代碼
- Sub PrintMsg
- MEssageBox "我執(zhí)行啦"
- End Sub
復(fù)制代碼 如果不調(diào)用的話(huà)。這段代碼根本不會(huì)執(zhí)行,接下來(lái)讓我們看看帶參數(shù)的子程序(下面代碼)
- Call PrintMsg("超人","蜘蛛俠")
- Sub PrintMsg(Nam1,Nam2)
- MEssageBox Nam1&"大戰(zhàn)"&Nam2
- End Sub
復(fù)制代碼 調(diào)試執(zhí)行上面的代碼,我們會(huì)發(fā)現(xiàn)。彈出框的內(nèi)容變成了超人大戰(zhàn)蜘蛛俠。這是,我們子程序中的參數(shù)Nam1和Nam2可以看做是變量。而調(diào)用子程序的參數(shù)"超人","蜘蛛俠"則是在給兩個(gè)參數(shù)賦值
最后。讓我們看一下子程序在腳本中的實(shí)際應(yīng)用吧!讓我們來(lái)看一個(gè)找色的例子(下面代碼)
- FindColor 376, 401, 891, 703, "1DB6B6", intX, intY
- If intX > 0 And intY > 0 Then
- MoveTo intX, intY
- LeftClick
- End If
- FindColor 376, 401, 891, 703, "A92929", intX, intY
- If intX > 0 And intY > 0 Then
- MoveTo intX, intY
- LeftClick
- End If
- FindColor 376, 401, 891, 703, "7A1EB7", intX, intY
- If intX > 0 And intY > 0 Then
- MoveTo intX, intY
- LeftClick
- End If
- FindColor 376, 401, 891, 703, "2590D8", intX, intY
- If intX > 0 And intY > 0 Then
- MoveTo intX, intY
- LeftClick
- End If
- FindColor 376, 401, 891, 703, "BCBC60", intX, intY
- If intX > 0 And intY > 0 Then
- MoveTo intX, intY
- LeftClick
- End If
- FindColor 376, 401, 891, 703, "1616AF", intX, intY
- If intX > 0 And intY > 0 Then
- MoveTo intX, intY
- LeftClick
- End If
- FindColor 376, 401, 891, 703, "FFFFFF", intX, intY
- If intX > 0 And intY > 0 Then
- MoveTo intX, intY
- LeftClick
- End If
復(fù)制代碼 好長(zhǎng)一段代碼吧~哈哈。通過(guò)觀(guān)察。我們不難發(fā)現(xiàn),其實(shí)上面代碼中每一次找色我們執(zhí)行的代碼都是相同的,只不過(guò)每次找的顏色不一樣,所以,我們決定用變量替代顏色,用帶參數(shù)的子程序來(lái)修改這段代碼。接下來(lái)讓我們看看以下代碼
- Call 找色("1DB6B6")
- Call 找色("A92929")
- Call 找色("7A1EB7")
- Call 找色("2590D8")
- Call 找色("BCBC60")
- Call 找色("1616AF")
- Call 找色("FFFFFF")
- Sub 找色(FColer)
- FindColor 376, 401, 891, 703, FColer, intX, intY
- If intX > 0 And intY > 0 Then
- MoveTo intX, intY
- LeftClick 1
- End If
- End Sub
復(fù)制代碼 是不是簡(jiǎn)化多了呢以上的代碼,還有更簡(jiǎn)化的思路~就是。用數(shù)組!對(duì)數(shù)組的概念不理解的盆友~我們下次開(kāi)講吧!
如果你感覺(jué)我的帖子對(duì)您的腳本有點(diǎn)幫助~請(qǐng)給點(diǎn)擊右下角評(píng)分~給朵花吧!如果以上有什么寫(xiě)的不對(duì)的地方~歡迎指出,共同探討!
|