嗯,上节课呢,我给大家讲了一下,就是早色多点早色的用法啊,这节课给大家就是说一下循环, 就比较常用的两个循环,一个是 fo 循环,一个是度循环。 嗯,同样呢,我们交流群是六三五七八七四零三,如果在学习过程中有什么疑问的话,可以去群里面,嗯,提问,然后或者直接艾特我,我看到后看到的话也会就是回回复你的。嗯 啊,接下来呢,我们就先讲一下这两个命令啊,就这两个循环命令,其实还有一个循环,就是弯循环那个 啊,用的不多,就是就是,我们就讲一下常用的这个吧。 来,首先我们就是把我们上节课学的那那些内容先屏蔽掉,我们单独先把循环讲一下啊。第一个我们先讲一下这个佛循环,佛循环他是什么意思呢?循环一定次数啊,我们看一下他有个参数啊, 参数的话就是后面加一个次数,就是我们加多少他就循环多少次,对不对? 然后我们举个例子吧,哎,我们在这里反正我们命令的话不用记那么全,只要记住前面两个就好了。然后按一下回车, 按下回车,我们看一下啊,他有一个,哎,使用方法看到没有一个 fo 循环次数, 循环次数,嗯,假如说我们循环五次吧,然后我们这这个时候只要按一下回车,他这个结尾就自动加上了, 非常的方便啊。然后我们上节课有说这个输出,就是脚本告诉我们的话,就我在运行, 对,我们调试输出看一下啊,哎,他说了几次呢?一二三四 五,他说了五次,我在运行,那为什么说了五次?因为我们让他循环了五次, 哎,假如说没有这个放循环,哎,我们把它屏蔽掉,如果我们要执行五次,就是让脚本跟我们说五句,我在运行,那怎么办呢?那只能复制粘贴,对不对? 哎?我们粘贴一个两次,三次,四次,五次,这样的话就比较麻烦了。 为什么麻烦呢?因为我们五次啊,虽然少,假如说我们要让他跟我们说五百次呢? 我们总不能复制五百次吧,对不对啊?这样的话他也可以一二三四五也是五次。 所以说这个比较麻烦的方法,我们就不要用它啊,就我们就用这个循环来让它啊自己运行, 这样我们只要啊打一行代码就可以了,对不对?要不然我们还要复制那么多次, 这个是次数循环啊。嗯,还有一个度循环,我们同样也按一下回车。哎,我们输出一下,我在运行 啊,加我们加一个言词吧,我就怕他卡住了,因为他这个循环是无限循环,他抑制 在循环的, 只要我们不停,他就一直在循环。那我们看一下, 你看我在运行,我在运行,我在运行。他一直在一直在运行,一直在运行。只要我们不按这个啊,停止不按这个暂停啊,终止,他就一直在循环,一直在循环, 直到天荒地老,海枯石烂。他啊,这里我们看一下,你看他有这么多,直到我们按了停止,他才停下来 度循环呢,你看呢?他说了无限循环啊,也可以是有限循 循环,那为什么说也可以可以是有限循环呢?就我们给他加一个条件,让让他跳出这个循环啊,比如说我们在这里啊, 看到没有?这个, 这个意思是退出啊,就是我们要退出,呃,各种东西啊,就首先要打这个看看,第一个他是退出度循环, 然后第二个呢是退出 fo 循环,就是说假如说这个次数没有到就,嗯,然后或者条件成立了,我们就让他退出这个循环,就不让他再继续执行下去了, 那我们选择第一个退出度循环,那 他现在的话,假如说,哎,执行到这里第一次,然后到这里直接就退出来了,那他这个循环还有用吗?那肯定是没有用的了,对不对?我们调试一下, 哎,他只运行了一次就退出来了,对不对?他只需运行了一次,那他这个退出循环的代码呢?他就是前面的东西啊,都可以运行, 他后面的东西他就不运行了。那比如说我们加一个东西啊,加一二啊,就几个啊,就几个一,好了,我们看一下啊, 哎,他只有前面的运行了,后面的没有运行,对不对?假如说我们把这个 就是我们这个,他不是,不是,我们输入代码有个光标一闪一闪的吗?这个假如没有的话就消失了,他可能卡住了,我们按一下普通再点回来,点到原文件这里他就有了 啊。我们把这个退出循环拉到最底下,然后我我们看一下他这个运不运行,那我们调试一下, 哎,他运行了,对不对?他运行了,他运行完这个再退出度循环, 所以说呢,嗯,这个我们可以加一个条件啊。上回我们有简单的说一下,我们变量要定义,假如说我们弄一个变量叫什么呢? 叫 就叫爱吧。嗯,我们用英,用中文好了。啊, 数字,哎,我们定义一个变量叫数字,那我们让这个变量等于多少呢?数字等于零,就我们先让他等于零,然后这个数字他就等,他就是零,他代表的就是这个零。 um。 对,我们在这里加一个条件啊,就是如果啊,上货,我我们也说过啊,这个 如果,如果条件成立,那我们加一个什么条件呢?数字大于五折 执行什么呢?执行我们退出这个循环的代码,就如果数字大于五,我们就退出这个循环,对不对?那他这个数字现在是多少?他数字 这个变量的话,我们是可以输出的,直接输出就是输出后面直接打这个变量名,数字看到没有?直接这样输出, 我们后边先不动啊, 看到没有?他输出的这个变量 数字,这个变量他就等于零,因为因为我们让他等于零了,对不对?他数字等于零了,然后我们输出这个数字,他这个数字他就是零。嗯,我们在这个循环里面呢, 我们加一个数字等于数字。 加一这句话是什么意思啊?就是他每运运行一次,哎,他从这里运行一次,然后到这里他这个数字在他自己本身的情况下再加上一, 哎,他第一次是零,对不对?数字他是个零,然后让他等于零,加上一,那这个数字等于 多少了?那肯肯定是一了,对不对?我们先输出一下 数字,然后我们把这个判断放到这个输出的后面,这样方便我们 预览啊,就是我们输出这个数字等于多少,然后他这里再判断一下,然后我们看一下啊, 哎,他停了, 看到没有?他第一次啊,他这个数字是零,然后他第一次运行,我在运行,然后到这里数字零 等于零,加一,那数字就变成了一,他输出的是一,对不对?他现在我们判断一下,如数字是不是大于五呢?啊?因为他数字是一, 他不大于五,他就不退出,然后所以说呢,他又从头运行到这里,又从头运行,然后他数字就等于多少了,一等于一加一, 一加一等于多少等于二,然后他自身就变成了二,二也不大于五,然后一直加,一直加,然后加到加到六, 看到没有?这里第五次的话等于五,加一等于六,数字等于六了, 然后这里他就条件成立了,对不对?数字大于五了,大于五了,他就退出循环,然后我们就退出来了,他这个就不再是无限循环了,因为我们给他加了一个条件, 这是退出循环的度,循环,退出循环的方法啊,就我们给他加一个条件啊,条件成立了,我们就退出循环。 那腹部循环呢? 放循环。假如说我们放循环,我们运行 多少次呢?啊?我们直接在这里啊,把它拖过来, 取消这个注视啊。我们假如说我们运行九百九十九次, 然后我们这里也加一个条件啊,数字等于数,数字等于数字加一,我们也加一个条件,假如说什么呢? 如果数字等于五,就让他退出。退出什么?退出?我们这个是负循环,对不对? 如果我们不加这个条件,他肯定是要运行九百九十九次的,对不对?现在我们加了这个条件了,当他等于五的时候 就退出这个循环啊?我们调试一下,看一下啊,看到没有?一二三四五他只运行了五次,他就退出来了。哎,这个是负循环提前退出的 啊,一样跟度循环是一样的,就是我们也是加一个条件,条件成立我们就退出,对不对?这是退出循环的方法, 两个,一个多循环,一个否循环。 那怎么把这个循环就是结合到我们上一次讲的这个?我们找那个滑动,哎,我们滑了 来是划一次对不对?划一次找不到,那怎么再给他再划一次呢?所以说我们现在就用到这个复循环了,来,我们到这啊,这个是我们之前的代码,我们怎么加呢? 我们现在不用次数了,因为我们条件是什么?哎,找到了并点进去了 再退出循环,我们可以用 fall, 也可以用度,对不对? fall 的话我们 给他加一个九次 回车,然后我们。
粉丝3359获赞7378

大家好,我是延己,那今天呢给大家去讲一下按键精灵电脑版游戏脚本循环结构,新手入门 啊。那今天举个很简单的例子,那比如说你现在想打五只野怪啊,打完这个五只野怪以后,你就退出这个循环,那怎么写呢?首先我们要去定义一个变量,就是啊野怪打野怪 次数啊,我们初使呢,给他一个零,因为我们现在还没打呢,对吧?那就给他一个零。好,然后我们用到一个度循环,打一个度,然后接个回车, 然后我们往下再去补全一个 l o p, 就是 do loop 循环,那这个循环呢?它就是一个死循环,那我们在这里可以去加一个呃,输出来看一下它的一个效果。那在调试之前呢,建议大家在这里呢加一百毫秒的延时, 如果你不加这一百毫秒的延时的话啊,电脑很有可能你再点击调试的时候,这里就会一直的输出,运行中电脑就会卡, 那这个卡呢?跟你的电脑配置没有关系啊,只是因为这个程序有 bug, 你 没有加这个延时。好, 然后我们现在想打完这个十二只野怪以后,就打十二次这个野怪以后让他退出这个循环,那退出循环用什么命令啊?用这个命令打个 e 叉,在这里找到 exit d o, 这个呢是用于退出度循环。 好,然后我们看一下怎么写,那这里我们去用一个判断 if, 那 如果你在之前的教程当中呢?你有看到我的判断教程,那你就会了。那如果说你还不懂这个这个 if 呢,就是如果的意思, 如果这个打怪次数它等于五的时候,干嘛?我们就把这个跳出的这个代码给它加进去。 好,那我们现在可以知道,我们先调试一下,我们现在可以知道我们的打怪次数呢,是等于零,对吧? 它等于零的话,也就是说意味着这个打怪次数零等于五,它永远不会成立,那我们怎么样能让它等于五呢?那是不是我们每打一次野怪就要在这个野怪的基础上去加一啊?那应该怎么写呢?那就是打怪次数等于打怪次数加一, 这样的话他就每次在他的基础上加一,然后我们把这个输出给他改一下打怪次数等于。 好啊,我们现在来调试启动一下,我们让他打十二只野怪,然后我们跳出完以后在这里输出一下, 打了十二次也怪完成。好,我们来调试启动一下, 那他在打第十二次野怪的话,他就是完成了,对吧?啊?那我这里教大家呢,是一个简单的一个结构,那你在实际你应用当中呢?你这个野怪并不是说你打了以后这个野怪他就死亡了,你还要判断他啊,有没有打死他,对吧? 那你怎么去判断有没有打死他呢?那这里的话就给大家去讲一下这个野怪 判断的这个野怪的血条,对吧?那血条呢?一般就是红色,那你判断如果说他是黑色呀,或者他不等于红色,那就是说明他没有怪了,对吧?攻击不了了,那你就可以换下一只野怪打, 那正常呢,我们一些游戏的话,直接啊 tab 键就可以选怪,那要没有这个键的话,那你就可以通过找图啊,找字啊都可以, 然后这个就是本集的一个内容,感谢大家观看。我是延己,感谢大家关注。


你们好,今天我们讲一下案件性灵的循环,就是说写循环的时候一定不要写死循环,这样会导致你的脚本在一个地方一直卡着不动,一直在无限循环的一个地方。 我们今天就做一个这个文档,如果说在这里的话就点击他,如果说这个文档不在这里的话,就等待他出现,然后点击他,等他出现的时候再点击他。 上衣也是这,然后用爪爪, 我们选择区域他会在哪出现,他会在左上角出现,对吧?我们看看能不能找到结果。二杠六,就是说能找到。 首先我们做一个测试,也就是说如果说他出现在左上角的话,提示找到了,如果说不在左上角的话, 体质没找到, 然后否则的话 e l s t r a。 我们测试一下 他现在在左上角,我们提示找到了,对吧?这里提示找到了,我们再试一下还是找到了,如果说把它拿走的话,就是说没找到,对吧? 没找到我再给他拿回来,找到了,如果说加上循环的话是什么样的效果?我们把它放到循环里,就说这个循环的话是 do 是循环开始, lop 是循环结束, 以 do 开头到 iop 结尾的中间内容,也是我们循环的内容,我们尝试一下是什么样的效果, 他会无限提示找到了,如果说这时候我们把它拿走的话,他就会提示没找到,对吧?一直在这无限找,但是他一直在这找,我想做一个东西就是说,嗯,他出现的时候点一下就好,找到了,一找到一次就好,然后结束这个命令, 这时候我们需要一个命令叫跳出循环,找到了之后怎么办?找到了之后就不循环了。 ex i t d o 也就是跳出循环。备注一下,跳出跳出循环,这个时候我们试一下是什么样的效果。 点击启动找到了,如果说我们把它拿走的话,点击启动没找到对不对?没找到,然后给他放过去,找到了脚本就停止了,然后我们就可以进行下一个步骤了,对吧? 好了,今天视频到此结束,有什么不懂的可以私底下问一下我。 从循环开始到循环结束的命令已经运行完了,接下来我们就可以运行其他的命令,找到一个图片以后,然后再运行下一个命令。

大家好,我是天峰,今天我讲案件建立基础知识。第七小节循环语句,循环语句的话,顾名思义就是可以根据你的需求去循环的执行一段命令, 可以无限的去循环,也可以执行啊,相应的次数,循环指定的次数啊,首先第一个负循环,他就是执行指定的次数 啊,他是以那个 nice 作为结尾,然后以这个意思货作为中指符号,只要出现这个意思货的话,他就可以无条件的去终止这个货循环。 好,他意思就是说按照指定的次数去执行这个命令。好,我们看一下的格式,首先是个放,然后加上个 n, n 的话就 是要执行的次数,然后这个 nice 作为结尾啊,他的运用场景就是说避免出现错误啊,重复的去执行某段操作啊, 比如说我们进图的时候,为了避免进不了图,我们就给他执行五次啊,如果五次都执行都进不了图的话,说明等级不够,或者你没有门票,这样子我们就可以终止他,跳到下一个命令了,给他五次机会啊, 五次都不行的话就结束掉吧。啊,就是这个意思,这个就是实验运用场景。 好,我们看一下格式 four, 然后加个 mm, 这个 n 就是次数,第二行的话就是要执行的命令,然后已经 这个 nice 座位结尾。我们举个例子,好,执行五次啊,你在这个五后面加个回车,他会自动写那个 nice 下去的,然后输出一段话吧。 啊?看下要输出什么啊?今天七月了,中秋节就快来了, 我就说出这段话,然后每次循环都是间隔一秒钟, 你看一二三四五,执行五次就结束。好,你你要循环的时候最好给他加上个时间间隔,要不然你很快的去执行的话,你那个手机的性能不过关的话 会卡住了。所以循环的话我都建议给他个延迟一个等待的时间。 我们接着讲暴循环的第二种形式, for, 加个变量,加个等号,等号后面是初始值,然后是 to, to 后面是结束值,然后给那个 step, 然后后面加个不长, 然后他是以那个 nice 作为结尾,以一个以这个 s for 作为终止符号。他的意思就是说从这个起点到终点,这么的一段长度,这么一段路程,他每步走多少米, 他要走多少步,就是要执行的次数。比如说从从零米到十米这件事 总共有十米,他每一步的话走一米,他总共要走十步,就要执行循环十次,就是这个意思,他主要运用到那个精确滑动或者自动技能,精确滑动话等会会讲,然后自动技能话是以后课程才会学的到的。 我们看下格式放,然后给这个变量,然后等号,这里是起点,然后这里是兔, 然后这里是终点,然后给他个 step, 这都是固定的,后面的话就是不长,就是每走一步的距离啊,走一步的长度啊,这里面的就是循环的词,循环的内容 后面以这个 nice 作为结尾,我们举个例子吧。好,这里话你输入这个 va 啊,他默认你就是变量,不用去声明的, 从一到十总共十个数字, 你每一次的话走十步吧,每一次的话走一米,那你总共就是执行十次 啊,我给他一个循环吧啊,这样子的话就是循环十次了啊, 从一到十,总共十个数字,每次的话数一个数字,总共数十次,就是十只行 十次,调试 五六七八九十,十一结束,我们给他改一下吧。 啊,调试, 你看总共十个数字,每次读两个数字,总共要读五次才能走,才能读完十个数啊,就是要循环五次了。 好,我们接着看下面的内,好,我们接着看 for 循环的第三种形式, for 一尺,然后加个变量, 这个硬,然后后面跟的话是数组的名字啊,这种用法的话主要运用到那个便利数组啊。啊,这数组的话后面才会学的啊,当我们学到那个数组后,我们才会讲这种这段内容吧, 这个先放在这里,但是你们要记住后循环是有这种形式的吧。啊,后循环讲完之后,我们接着讲 第二个循环语句,度循环度,循环的话与这个以这个骆驼作为结尾,以这个意思度作为终止符号,只要出现这个意思度,就可以无条件的结束这个度循环。 好,这个度循环的话有两种形式,一种是前侧型,一种是后侧型。啊,我们先讲前侧型,前侧型又分为两 种,一种是以这个 nq 啊的形式,一种是以这个 y 的形式,我们先讲这个 nq 形式吧,前侧显得 nq 形式, 他的意思就说啊,这个循环在这里不停的去执行,直到某个条件被出发成立的时候,就结束这个循环啊,这个 nq 的英文意思就是说直到 啊,啊,连起的话,就是这里的话不停去直,不停的去循环,直到这个条件成立就结束这个度循环啊,我们举个例子吧 啊?这是个读书的啊,首先我给他一个声明变量, 给他一个初始值为零啊,然后是个度循环,度循环这里给他一个 nq, 他的意思就说你在这里不停不停的去读书,直到这个读数等于十的时候,你就结束这个度循环, 这个就是 nq 的用法,浅色形,我们调试一遍吧。 啊?一直读,大师 啊,独到时候就结束了啊,这种是度循环前侧型的 ntq 写法。度循环前侧型还有另外一种写法叫做外写法啊,就是这种 啊啊,度循环,然后给他个条件,当这个条件成立的时候才去执行这个循环啊啊?要怎么去实现呢?这个话有点难理解啊。我给他 这里给他一个度循环,然后给他一个外,后面给他一个处啊,因为这个处的话 他就是条件为真,他那个处肯定是为真的,只要这个成立,这个处成立,他就去执行这个乱命令啊,因为这个处不,不管什么时候他肯定是为真 啊,所以的话他就会一直的去执行,不会去停止 考试啊啊,他都会说出这段话,他不会停止的,因为这个条件始终成立的,这个处肯定是处了 好。度循环他前侧型说完之后我们再讲他的后侧型, 后侧型的话就是说他在后面加条件,他不在前面去判断,他是在后面加条件,也就是说先让这个循环去执行一次啊,直到这个条件成立的时候就会结束这个命令。 好,他跟上面这个这个又有点不同,他是先去执行一次再去判断上面的话就是先判断,先去 判断再去执行啊。啊,我们给也是用这个读秒了 啊,这段这段代码的意思就是说,你在这里不停的去读数,直到这个读数等于五,你就结束这个度循环啊,这个判断条件放在后面了,放在这里了啊,他就不会放在这里,很调试, 一二三四五,读到五就结束,就是这段话的意思, 然后这个度循环。呃后侧型,如果有这个 nq 的话肯定有这个外,这个外的话也是一样,先执行一次 是循环,如果这个条件成立的话就执行,继续的去执行循环,如果条件不成立的话就停止循环啊啊,这个外的意思我刚才忘了说,就是当的意思, 当这个条件能成立的话,就继续的去执行这个循循环,直到这个条件不成立为止。 还是这个读秒啊,当这个读数小于十的时候,你就在这里不停的读,当这个读数大于等于零了,你就停止这个循环。看, 当这个毒素小于十的时候,他会 会去不停的去循环的,直到这个毒素等于十或大于十啊。 讲了这么多,可能大家听得有点复杂,其实在实际的运用场景时候,我们不会 呃考虑什么前侧型或或者后侧型,因为这样子写的话太过于繁琐了,太过于呃复杂。我们就简单一点,一般的话我是这样子写的, 如果这个条件成立的话,我们就结束这个度循环,我一般是这样子写的,你们也可以学的下,这样子写的话就简洁民聊一点,通俗易懂 啊。这个度循环,度循环,讲完之后就是讲这个外循环啊,循环有三种,一种是负循环、度循环,还有这个外循环,这个外循环的话一般很少用 啊,我们也讲一下吧。外循环他以这个 wn 作为结尾,这个 w 话就代表这个 y 啊啊,然后以这个 sy 啊作为结尾。他的意思就是说判断条件,若条件成立,则执行循环,反之则结束这个循环。 他格式就是你给他个万,以后给个条件,如果这个条件成立,就及时就执行这个命令。循环这个命令 啊,我们还是以这个读书作为例子吧,当这个读数小于五的时候,你就去执行这段循环命令,当你这个读数啊,等于五的时候,大于五的时候就结束这个外循环。 你看当这个读数等于小于五的时候,就读不停的读数啊,当这个读数大于等于五的时候,就结束这个循环啊,这节课就讲到这里吧。



我们上一次讲了找色,那我们今天来讲了讲找图啊找图,我们把这些代码都删掉啊,然后直接插入找图命令, 我们可以发现啊,找图的命令和找色的命令,他们的格式还是非常雷同,看见没有?还是非常雷同,他还是一样啊,在某个区域去找我们的指定的图片, 注意看这个图片的格式啊,前面有一个啊,固定的单词,后面是一个冒号加一个斜杠,然后呢加上我们的图片名啊,最后的格式是 bmp, 然后后面是一个相似度,之前我们讲 相似度最高是一对吧?好,然后呢,越低相似度越低,我们的误差呢就越大。最后呢,把我们找到了图片坐标, 把它复制给啊,把它复制给我们的变量, int x 和 int y 它还是一样啊,它帮我们省略了声明这个变量的这个步骤,但是我们可以自己声明,对吧?我们可以自己声明, 当然你不声明也没有问题啊,我这里声明一下了,还是方便你们理解啊, 我们写个注释吧, 我们来看啊,我们怎么去理解这个格式啊?他这个格式的意思是我们要在附件里面啊,我们要在附件里面把我们的图片给添加进去。我们这里还是要利用一下我们的抓抓工具啊,用一下我们的抓抓, 然后我们在网页这一边按一下截图键,那我们可以框选框,选任意一个区域,在框选完毕以后呢, 他可以看到一个菜单,对吧?有一个未图令重围,我们可以把它重温一下,比如说我们把它取个名字啊,随便取一个吧,叫一,你看 还可以选择一个格式,他默认就是二十四位位图。好,我们点保存,然后呢我们在附件里面点添加,我们选择这张图片, 然后呢我们在这里把我们的文件名改为一,和我们的这里的文件名要对应, 明白吧?最后我们做个测试啊,我们把鼠标把它移动到我们的 这个坐标点,我们可以看到啊,我们的图片是这个,对吧?灵感加速 驶向未来,那我们这个界面有没有?没有?那我们现在启动程序他是找不到的,我们一定要等我们的这个图片他轮换到这里来,那我们才可以找到,对吧? 但是我们的代码呢?他只会在我们的程序启动的时候找一次,假如说我们程序启动的时候,我们的这个图片他没有显示的话, 那我们的代码他就找不到,我们可以写个 s 啊, if 这里 if int x 大于零 and int y 大于零这句话的意思表明,我们找到了图片,因为它的 x y 原本是没有值的, 我们永远没有复制,只有当他被找到以后,他们才会被复制,他们被复制以后呢,他们就不会等于零了。所以说呢,我们在上面呢 可以写一个提示啊,找到了下面我们可以写个提示啊,没有找到。 你看在没有这张图片的时候呢,我们启动他肯定是提示没有找到,对吧?当我们去 把它换到我们的图片上面的时候呢,你看我们切到这里来,我们再跑, 你看他就会提示找到了。就是我们有的时候会有这样一种应用需求,就是我并不知道这个图他什么时候会出现,比如说这个界面,对吧?他的图片轮换什么时候可以轮换到这张图啊? 这个我们是无法确定的,对吧?你也不知道是一秒钟之后还是十秒钟之后。那我们可以一直去监测啊,用一个循环来不断的去监测他,比如说我们这样写, 还记不记得以前我们学过一个 rim 标签,对吧?标签循环, 好,我刚才完善了一下代码,我在这里写了 标签 rim 标签循环。我们之前学习循环的时候啊,无限循环的时候学习过这个标签循环,他的意思就是说我们用一个沟通语句,可以随时返回到这个代码,返回到这行代码从第五行开始重新执行。 那么我们整个代码的逻辑就是什么呢?我们去不断的找这个图片,一直找一直找, 找到了我们就弹出一个对话框,告诉我们找到了,找不到了,找不到,我返回这个循环这里继续找。 也就是说这个图片我们会在一个无限循环里面不停的去找,一直到我们找到为止。找到以后这个循环还会不会继续啊?找到以后我们这个循环呢?他就不会继续了啊,这个程序会往后面执行, 会指定第十三行啊,提示我们图片已找到啊,程序继续执行,循环已跳出啊,到这里的时候循环就跳出了。 那为了避免我们的程序找出的频率过高啊,我们最后还是给他加一个 delay 延迟,尤其像这种无限循环了。无限循环我们还是最好给他加一个延迟参数比较好, 这样以免对我们的 cpu 造成过高的负债啊, 你可以写的短一点十毫秒啊,那也总比不写强啊, 我们写在这个循环标签的 go to 之前,也就是说我们每次找图会间隔十毫秒,如果找不到,我们在十毫秒之后呢,会继续找整个代码,就是这个意思啊,我们点一下调试, 然后去看我们的浏览器,刚才不小心关掉了,这样酷, 好,我们现在就可以启动了啊,我已经启动来看见没有,我们的图片切过来的时候呢,他就提示我们找到了,对吧?那图片一找到程序继续执行循环与跳出,对不对?你看这个时候,我们下次 图片滚过来的时候,我们还会不会去找啊?我们就不会了,你看我们手动去点一下啊, 你看还有没有提示?没有了,因为这个时候我们循环已经跳出了,他只找一次,对吧?在他找到图片以前,他是不会放弃去找的,他会一直找,在他找到图片以后呢,他就不找了啊,对吧?他就不找了,循环也跳出。 所以当我们去找一个比较固定的图片,比如说上面的菜单,他们的位置是比较固定的,而且一般来说不会发生变化。 那我们可以直接去啊,直接去写一行代码就可以去找了,像这样直接写一行就可以了,对吧?你也不用加入循环,那如果说这个图片他是会产生变化的, 他不一定什么时候会出现在我们的屏幕上,那我们就可以用什么思路啊,就可以用循环啊,用循环的思路来去找这个图,找不到就不停止。 那在这里呢,我们就还额外说一点延伸的内容啊,延伸的内容,你们就是需要了解一下就可以了啊,不需要特别去理解, 这是我们找图的底层原理,他其实还是找色。我们一张图片他是由什么东西组成啊?他还是由一个一个像素组成的,对吧?每一个像素点就有一个颜色,那么我们一个图片它本质上就是若干个 颜色点的排列组合,这句话不知道你们能不能理解啊?比如说我们放大一张图片, 我们可以看到啊,它是有很多一个一个小的方格,对不对?你看一个一个小的方格,我们这个时候用抓抓,抓一下啊, 我们看一下桌窗。好,你看我们把鼠标移动到我们的这个有渐变颜色的黑色这一块啊,你看这一块,我们屏幕上面可以看到,对不对? 从左到右,你看我们的颜色值,他有一个渐变,对不对? 好,你看我取了两个颜色,一个五九二四五八啊,一个五九三四五八,他们的颜色就是不一样的,对不对?那其实呢,如果说我们早涂的 逻辑是什么?他就是先判断你第一个点的颜色啊,是不是这个颜色,如果是的话,他再判断第二个点的颜色是不是这个颜色啊?如果是的话,他依次类推,继续往后找, 只要我们所有的颜色排列和我们的图片的颜色排列吻合,那我们这个图片就算是啊,找到了,他是这样一个逻辑,所以说找图的底层逻辑,他其实还是找色啊,能不能理解? 好,那我们来看这样一个游戏截图啊,这是一个啊,游戏的背包界面。假如说啊,我想要一次性把我所有这些血瓶呢,把它给依次点击一下, 像这样依次点击一下,我们可以用程序怎么去写了,当然这是只是一张截图啊,这个只是一张截图,所以我们去点他没有任何效果,但是你们可以看到我的鼠标移动轨迹啊,你们可以看到,对吧? 我这个是我手点的,这个是我手点的,我们如果想用程序实验这个效果,把我们这些所有血评依次全部点一遍,怎么去写?我们可以这么去写,首先我们肯定还是要截图 好,截完图以后呢,我们返回抓抓,然后我们把这个血瓶呢框选一下,框选一下啊, 好像这样框选一下,然后位图定成为,我们给它取个名字吧, 叫血瓶。然后呢我们可以考虑一个因素啊,就是我们的血瓶他通常会出现在哪个区域,比如说我们这个截图吧,他通常来说只会出现在这个区域,对不对? 所以说我们去找这个水平的时候,我们有没有必要去全屏去找啊?啊?没有必要啊,没有必要,因为你要找的区域越大, 你的运算效率就越低。所以说我们去找图的时候啊,我们可以尽量的缩小我们的找图范围, 把我们的范围缩小在一个啊,尽可能小的范围内,我们的效率呢就可以更高。所以说我们最好去取一下这两个点的坐标啊,一个是这个点,一个是这个点,然后这个区域范围呢, 我们就可以提高我们的效率,所以我们去看抓抓,在我们的抓抓里面呢,我们把鼠标移动到我们找图区域的左上角,然后我们按一下 ctrl 加一好取一个点,然后再把我们鼠标移动到我们找图区域的右下角, 再按下 ctrl 加按,你看这样我们就取了两个点,对不对?我们把两个点贴过来, 这是第一个点,这是第二个点,那我们就是要在这个范围内去找我们的什么血评, 好,我们可以去仔细一下看看啊 啊,你看他提示找到了,对吧?那没有问题,这说明我们的脚本啊,这个图片他的质量是可以的。那么我们怎么样才能实现依次点击呢?把他们全部点一遍,我们可以去设计这样一个算法啊, 在我们去找到第一个水平之后呢,我们把它的 x 坐标给记录下来,给记录下来,然后我们去找第二个水平的时候呢, 我们去加上啊,我们把找出的范围啊,从第一个水平的 x 开始,加上一个第一个水平的宽度, 加上第一个水平的宽度,这样呢我们就可以从第二个水平的坐标开始找我们,这样呢就可以去忽略掉第一个水平。 所以呢,我们在这里还需要去计算一下我们每个血瓶的宽度,我们可以怎么计算?我们可以用抓抓,我们获取一个血瓶单元格的两个坐标点右边一个点 右下角吧,我们获取他的右下角这个点,取三。好,然后呢获取他左上角的点 取四,我们可以用右下角这个点的 act 坐标啊,减去我们左上角这个点的 act 坐标,这样呢就可以得到啊,得到它的这个宽度啊,得到我们这个血平的宽度, 所以我们在这里呢可以声明一个变量啊,叫雪平的宽度, 那我们顺便就把高度啊,也获取一下,宽度等于多少, 你看这是它第一个点,这是我们取的第二个点,那它的框就是用这个数啊,减去这个数,那高度呢? 就等于五七九,减去五四零啊,这样呢,我们就可以得到一个单元格啊,一个血平单元格的宽度和高度。 那为了我们后面的计算方便啊,我们最好啊,还是要把我们的这个找 图的范围啊,把那个变量化声明一下,我们可以这么写啊,找图范围 x 一 y 一。那这个就是我们找图放我的左上角坐标啊,左上角坐标 x 一个 y 一,然后我们再写一个 x r 和 y。 啊,那这个呢,就是我们找图放我的右下角坐标,我们可以标注一下左上角。 那我们 x 一等于几?等于幺幺九四, y 一等于五二零, x 二等于幺六五三, y 二等于 七七四。那这样呢,我们就可以把后面的这些数据啊,把它用变量给代替过来,这样做的目的是为了方便我们后面计算, 那为了我们后面的计算方便呢,我们最好啊,还是要把我们的这个早读的范围啊,把它给变量化,声明一下, 我们可以这么写啊,找图范围 x 一 y 一。那这个就是我们找图范围的左上角坐标啊,左上角坐标 x 一和 y 一。然后我们再写一个 x r 和 y r, 那这个呢, 就是我们找出范围的右下角坐标,我们可以标注一下左上角。 那我们 x 一等于几?等于幺幺九四, y 等于五二零, x 二等于幺六五三, y 二等于七七四,那这样呢,我们就可以把后面的这些数据啊,把它用变量给代替过来, 这样做的目的是为了方便我们后面计算。 然后呢我们把我们的鼠标找到 以后啊,去移动到我们的这个坐标点,并且我们给他加一个偏移量,他有一个时的偏移量,这样做的目的是让我们的鼠标移动到尽可能靠中间的,靠这个雪冰中间的位置,这样我们看起来就更加明细啊,就更加清楚, 然后我们可以给他一个啊延迟,这个延迟是可以稍微大一点点,然后呢我们去点一下我们的鼠标左键。 好,那如果顺利的话啊,我们的这个程序目前他就会去找这个血瓶, 找到以后呢,我们的鼠标会移过去,然后点一下鼠标左键,因为这个雪屏它的这个图片质量啊,其实还是 有点堪忧啊,而且有点小啊,所以说我们把它的精确度啊,最好改的不要那么高,改到零点八五试试看吧。好,然后我们再启动程序啊,看见没有啊?我们的鼠标是不是 就移过去了,对不对啊?瞬间移过去了,我们可以再试一次啊,大家看见没有啊?很顺利对不对? 好,但是我们没有达到目的啊,他只动了一次,我们,我们的目的是什么?我们的目的是想让我们的鼠标把我们的每个水平都点一遍,对不对?所以说我们找到第一个水平以后呢,我们要去修改我们的查找范围, 我们可以把我们的查找范围加上,加上我们的 一个血瓶的宽度啊,加上我们血瓶的一个宽度,然后呢我们再 go to 我们的标签循环啊,这样呢,我们第二次去找他的时候啊,我们的鼠标他就会 移动到下一个血频,我们可以试试看啊,有没有效果?我们这个弹出来了, ok, 这个能不能不谈呢? 这样就可以了。 好,我们可以发现啊,刚才我们的程序他点了两个血频,但是他没有往后去点, 点第三个,对吧?那我们如果想要我们的鼠标继续往后面点到这第三个瓶子,第四个瓶子,那我们应该怎么办?我们可以设计这样一种算法啊,让我们的这个查找血瓶的 x 递增,递增,一直往后递增, 当它递增到一个临界点的时候,当它递增到一个临界点的时候,我们就让它返回到初始数据, 然后返回到初值数据,他以前初值数据是多少啊?是这个数据是幺幺九四,对吧? 那我们返回初始数据以后呢?让我们的外坐标啊,递增一个单元个高度啊,递增一个水平单元个高度,这样呢,我们就可以从第二行开始去查, 能不能明白,好,我们可以去试试看怎么去写啊?那我们可以粗略的推算一下啊,我们要找这个血拼,我们要找一排的话啊,我们最多需要递增几次啊? 你看他的单元格有几个?一个,两个,三个,四个,五个,六个,七个,八个、九个,那我们递增十次怎么都够了,对吧?我们最多递增十次,他怎么都可以把这一条找完,所以说我们可以怎么样?我们可以写个负循环, 那我们就把这个标签循环啊给删掉啊,我们用个负循环来写 十四,对不对啊?我们是不是找十四,然后 next, 那么这里还是生命的变量啊,循环次数 啊,选完十四就找这个图,我们每找到一次呢,我们的找出范围呢,他就会递增一个血平的宽度啊,那我们的十四找完以后呢,我们的范围怎么样?我们的范围起点 要等于我们的原始数据啊,那这里我们的我们的原始数据啊, 最好还是给他负一个值啊,这生命的变量给他负一个值,像这样写等于原始气垫 x 啊,也是七零 x, 然后呢,我们的角度范围 y 啊,等于多少?等于我们的 y 坐标的原始起点 是五二零啊,五二零加上加上我们一个血瓶的高度, 像这样写,也就是说呢,当我们找完一排图片以后啊,我们的找图范围的起点会回到我们的原点啊,我们找图起点呢? x 坐标,或回到我们的原点 x 坐标。那我们找图器里面的外坐标呢?或回到我们原点啊外坐标,然后加上加上一个血平的高度, 然后我们加上这个高。对,以后呢,我们怎么样?我们再来一遍啊,我们再来一遍,他这样呢,就会去找第二排,我们可以试试看啊,能不能实现我们的目的啊,先找第一排,然后再找第二排, 哎,看见没有,很成功,对吧?好,刚才我发现一个问题啊,就是我们去找水平的时候啊,找第一排的时候很顺利,找第二排的时候也很顺利,但是找第三排的时候啊,就不顺利了。原因在哪里呢?原因在我们的原始坐标 点大概是这个位置啊,我们找到第一瓶水瓶的时候啊,我们要把我们的原始坐标点呢定位到我们的第一个水瓶这里来,这样才可以,要不然的话我们的啊外坐标累加啊, 还有 x 坐标累加很有可能会出现问题啊,很有可能会出现问题,会产生一个误差。所以说呢,我们在第一次循环的时候啊,在第一次找到我们的这个血频的时候, 我们要把我们的啊原始的坐标洗脸值把它重新给复制,你看下这里啊,我加了一个变量啊破循化的次数, 我们这个负循环的次数,在我们的整个负循环每次循环一次的时候呢,他就会加上,一看见没 他就会加上一,然后呢在他为零的时候啊,第一次循环的时候,我们是不是找到这个图片的 x 坐标和 y 坐标,对吧?找到我们血平 x 坐标, y 坐标以后呢, 我们把它给复制给我们的原始系列 y 坐标和 x 坐标,那这样呢,我们才可以去减少他找得这个误差值。 好让我们再来看看啊,把后面的代码一并改一改,看有没有问题啊? 我们先用的复型化,去找图,找一排,对吧?找一排找十次, 摘完以后呢,让我们的整个的这个原始起点呢把它重新给归位,然后这原始起点外坐标呢 给他递增一个,给他递增一个我们的水平高度,然后呢我们再来一次,我们再来一次,然后呢我们的循环再加一, 我们的原始起点外坐标好再递增一次,最后呢我们再加一,再循环,然后呢我们再加一,再循环,把同样代码写四遍, 那你看这样行不行? 哎,没有问题,对吧?好,我们再来演示一遍, 好,看见没有?没有问题,对吧?我们就按顺序把我们的每一个血拼啊,全部点燃一遍。那我们的代码这样写是不是很啰嗦呀?啊?是不是太啰嗦了?是不是 我们这样写同样的代码写了四遍啊?所以说我们可以怎么样?我们完全可以在第一个循环啊,在第一个大的循环里面啊,写一个更大的负循环, 对不对? four 四, 然后呢?把我们整个的这个代码呀,把它套进来,像这样 他就形成了两个复循环的欠套,对不对?外面一个四个啊,循环次数里面呢啊,循环十次,我们每循环完十次呢啊,完成一个小的复循环, 然后呢?外面整体的大的负循环呢啊?循环四次。那这样写的效果呢?和我们刚刚写的效果就是一样的。那我们可以看看是不是一样的 啊?看见没有,对吧?是一样的,对不对?