[按键精灵教程]判断分支上的逻辑


金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想制作脚本和学习按键精灵的朋友可以添加按键精灵学习交流群:554127455 学习路上不再孤单,金猪脚本伴你一同成长.

写脚本的时候,总有一些事与愿违的地方,一个不经意的小地方,可能会令我们寻找半天才发现并且解决,将我们平时碰到的积累起来,是一笔不小的财富,积少成多,跟着我记下书写脚本的点点滴滴吧。



1.分支上的逻辑判断

最近收到了很多问题,有几个很类似的问题,大致内容如下:寻找到图1时,点击某个位置,寻找图2继续接下去的操作,如果没找到时则开始找图3。诸如此类的问题,涉及到逻辑判断语句,这也是自己写比录制的脚本要强大很多的最主要原因!那么我们来看下都是如何处理的。

说到逻辑判断,学习过的人立马反应过来,是If语句,虽然还有其他逻辑控制语句,但都大同小异,这没有错,然而当大量的判断语句不断的嵌套的时候,而一页代码又无法看完逻辑的时候,就产生了易错,不易改等问题。特别是中途含有网络操作,就必须有延时等待,也就是需要加入循环语句。当各种控制语句掺杂在一起,再好的眼睛也撑不住。

于是我们可以采取另外一个解决办法,虽然If等逻辑控制语句是免不掉了,但是却可以让逻辑上非常清晰,我们将涉及到分支的逻辑当杜写出来,并将所有的可能性全部列入,通过返回值的方式做逻辑上的处理。

我们来看看应用中的一个涉及到分支处理的功能是如何处理的,这里以QQ为例,我们知道QQ打开的时候,如果之前登陆过,就会自动登陆直接到消息界面,但是如果在其他地方登陆过,就会先出现账号密码的输入界面(即使已经帮你输入好),然后需要点一下登陆。也就是说,当我们打开QQ,可能立马就涉及到了分支,虽然我们可以让用户事先登陆好,但是如果能更加自动化不是更好吗?



如以上图,我们希望能进入到第二个图再往下操作,但是当打开QQ的时候有可能会出现第三个图,就需要再点次登陆。我们来看看代码如何写的:

  1. SetScreenScale 720,1280
  2. Function 进入QQ()
  3. Dim intX,intY
  4. Do
  5. Delay 200
  6. //寻找QQ图标并点击
  7. FindMultiColor 0,0,0,0, "FEFEFE-101010","60|8|201C1C-101010,78|0|FEFEFE-101010,28|43|122DE3-101010", 0, 0.9, intX, intY
  8. If intX > -1 And intY > -1 Then
  9. Tap intX,intY
  10. End If
  11. Delay 200
  12. If CmpColorEx("357|1204|BBADAB-101010,601|1210|BBADAB-101010,110|1223|FAB700-101010", 0.9) = 1 Then
  13. 进入QQ = "消息页面"
  14. Exit Do
  15. End If
  16. Delay 200
  17. If CmpColorEx("164|650|F3BA1F-101010,256|644|F3BA1F-101010,512|655|F3BA1F-101010", 0.9) = 1 Then
  18. 进入QQ = "登陆页面"
  19. Exit Do
  20. End If
  21. Loop
  22. End Function
  23. Function 点击登陆()
  24. Do
  25. Delay 200
  26. If CmpColorEx("164|650|F3BA1F-101010,256|644|F3BA1F-101010,512|655|F3BA1F-101010", 0.9) = 1 Then
  27. Tap 376,644
  28. End If
  29. Delay 200
  30. If CmpColorEx("357|1204|BBADAB-101010,601|1210|BBADAB-101010,110|1223|FAB700-101010", 0.9) = 1 Then
  31. Exit Do
  32. End If
  33. Loop
  34. End Function
  35. Function 进入QQ主页面()
  36. If 进入QQ() = "消息页面" Then
  37. ElseIf 进入QQ() = "登陆页面" Then
  38. Call 点击登陆()
  39. End If
  40. End Function
  41. Call 进入QQ主页面()

复制代码

虽然代码略为繁琐,并且肯定有人要吐槽,直接在进入QQ的那个函数里,将寻找到登陆的图标的时候直接点击一下登陆,直到寻找到主页面才退出,这样根本用不到分支判断,If语句都省了。

这个例子是可以这样没有错,但是我们需要考虑的不单单是这个地方,假如有一个界面A,含有两个分支,分别到界面B和界面C,界面B和界面C的下一步都是到界面D,但是处理的内容不同,这个时候,你还能简单的通过一个Do ... Loop解决吗?

脚本以稳定性最为关键,确保你的脚本运行时能完全对应当前界面才是最稳定的!

2.修改器

好吧,这个其实和按键精灵暂时并没有关联----但我还是要说~万一以后可以读写内存了呢?

这里,我使用烧饼修改器做一个简单的内存搜索(修改器在附件里下载),安装完并打开修改器(打开后窗口化),然后打开我们要读写内存的游戏。



我们打开游戏的人物属性面板,可以看到类似的信息,这个时候,记录下比较有特征的值,比如经验是71964,我们点下修改器的悬浮窗,

搜索71964:



很容易就获取到了这个值的地址,我们可以尝试着修改一下,我改成22222222~~~,我们看看修改的结果:



简单易懂,当然并不是所有的数据都那么好找,如果我的数值都不大,游戏中有非常多的数值相同的属性,那么有没有解决办法呢?当然有!那就是用联合搜索,我们再看看属性页面,不单单有当前经验,还有总经验,一般游戏数据的存放都是有规律的,这两个相关值在内存中一般也是在附近的,于是我们使用联合搜索:






这样搜索到的值就更符合我们想要的内容,当然这样的修改其实大部分情况并没有作用,因为网游的数据都是存放在服务器,修改本地内容并没有用,但是我们可以把它当做一个高效的判断方式,比如要识别元宝数量,做字库神马的,无论正确率还是效率都远远比不上内存读出来的数据。

是不是比想象的更简单呢!想知道更多请关注院刊系列!

举报
评论 0