- 按键精灵会员
- 1177096
- 186
- 3
- 64 朵
- 682 个
- 63 个
- 12720
- 2012-06-11
|
1#
t
T
发表于 2014-07-28 17:12
|
|只看楼主
本帖最后由 兄弟工程师05 于 2014-9-16 16:25 编辑 『教程图片需登录论坛方可查看』 本期主题:实战源码讲解 脚本功能:好友自动送心。 使用要求:请在 “好友列表” 或 “中途操作界面” 启动脚本均可。 环境支持:分辨率:480*854、540*960、720*1280、1080*1920、1080*1800、480*800、800*1280(不支持则会有相关提示) 脚本步骤:对好友界面中的好友列表,进行一个个点击送心操作,直到最后一个送完。 科普:从零学起之安卓篇《如何在安卓模拟器中进行多分辨率开发调试》 『进入正题』 一、脚本思路。(确认功能需求的每一个步骤环节) 1、打开好友列表,触屏点击红心。
- 您所在的用户组无法下载或查看附件
2、提示弹窗点击(不发送)按钮返回好友列表。
- 您所在的用户组无法下载或查看附件
3、当页没有红心则划动屏幕,寻找后面的红心点击。 4、到底如有下一页则翻页继续。
- 您所在的用户组无法下载或查看附件
5、到底如没下一页则切换好友排行榜继续。
- 您所在的用户组无法下载或查看附件
6、如此循环,到最后一个好友都完成送心。 7、如在其他画面,则点返回,返回好友列表。- 您所在的用户组无法下载或查看附件
二、逻辑构建。(构建脚本的大脑)关于逻辑结构的创建,这里送大家一句话:手动怎么做,脚本跟着做。
手动怎么做:这里不单指人为的手动操作,是包括你整个人会如何做,看到什么内容,想到什么结论,做出什么操作。
脚本跟着做:具体解释就是,先做什么,后做什么,第一步操作,然后确认结果,成功了做什么,失败了则做什么,或还有第三种与更多种结果,不同结果做不同操作反馈。一层层合理的逻辑安排,组成完善的一个脚本主线框架(脚本大脑),使脚本运行起来实现类似智能化的操作,因为你需要把每一个会出现的情况都考虑进去,并写成代码方式由脚本进行识别,进行选择,然后执行实现功能效果。 (记得是每一种操作中会出现的情况,不然脚本遇到无法识别情况结果显而易见) //图色判断到好友列表则进入下一步判断。 如果 判断(好友列表)=成功 则 //图色范围判断到红心图标则点击,执行送心操作。 如果 判断点击(红心图标)=成功 则 //否则图色判断到下页图标则点击,执行翻页操作。 否则如果 判断点击(下页图标)=成功 则 //否则图色判断到到底图标则进入下一步判断。 否则如果 判断(到底图标)=成功 则 //判断排行榜标题,确认当前哪个排行榜,执行切换下一个排行榜操作。 如果 切换排行榜(标题范围)=失败 则 //如果已是最后一个“进击模式”排行榜,则说明全部送心完成。 弹窗提示 "已经全部刷新完毕!" 延时 1000 //1000毫秒 结束脚本 //全部好友送心完成,脚本停止。 结束 如果 //没结束,则继续循环。 否则 //没红心图标,也没下一页图标,也没到底图标,那么就划动好友列表。 调用 触屏划动(划动距离) 结束 如果 //否则图色判断送心成功提示则点击(不发送),执行关闭提示返回好友列表。 否则如果 判断点击(送心成功)=成功 则 //否则图色判断返回按钮图标则点击,执行返回界面功能,回到好友列表。 否则如果 判断点击(返回图标)=成功 则 //有始有终,到这里结束以上判断,开始循环重新处理。 结束 如果 三、知识要点。(很重要,请认真阅读) 以上已经把功能需求描述完毕,每一个功能需求的具体步骤分析也描述完毕,整体逻辑框架也搭建完毕。 那么这里我要讲的是,如何去实现脚本这些功能。 总结:知道要什么,知道做什么,知道用什么方式可以做到。(请原谅我这么多废话) 首先,我们知道了要什么,一种在手机上的自动化辅助操作,完成自动送心操作步骤。 其次,我们知道了要怎样去操作可以实现这些功能,获取信息做判断,先做什么,后做什么,遇到不同情况结果后续再做什么,组成一个完善的逻辑循环。 最后,我们需要知道就剩余三点,如何实现。 1、需要获取什么信息,如何获取这信息,都有哪些方式来获取。 2、如何对获取信息进行判断,条件判断后做出选择。 3、根据判断结果,如何才可以实现功能效果。 这里就需要介绍下,按键脚本基本功能:通过获取屏幕的图色信息,根据结果做出判断选择,由此执行对应键鼠或手机触屏操作命令等来实现自动化智能操作效果。1、图色获取命令:(找图,找色) 从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》 从零学起之安卓篇《版本1.5.1命令更新介绍》 从零学起之科普篇《偏色与相似度汇总介绍》2、条件判断命令:(条件对比) 命令名称:If 如果..则 命令功能:判断表达式 命令参数:参数1 条件型,表达式 返回值:无 例子1:- i=0
- If i=0 Then
- Msgbox "条件判断符合被通过!!"
- End If
- //通过判断表达式的取值,来执行后面的动作或控制
复制代码 例子2:- i=1
- If i=0 Then
- Msgbox "条件判断符合被通过!!"
- ElseIf i=1 Then
- Msgbox "否则条件判断符合被通过!!"
- Else
- Msgbox "否则!!"
- End If
- //通过判断表达式的取值,来执行后面的动作或控制
复制代码 从零学起之基础篇《循环命令应用汇总介绍》3、触屏操作命令:(对手机进行触屏点击操作等) 按键精灵之安卓篇《按键宝典安卓版命令大全》 常用操作命令都在命令大全集合里,大家请自行下载查阅,关于脚本实战编写大家可以查看总帖目录的实战篇。 『上期实例教学』 从零学起之安卓实战篇《全民打怪兽循环冒险》 从零学起之安卓实战篇《关于刀塔传奇开局与日常思路》 从零学起之安卓实战篇《天天酷跑好友送心》 『源码抢鲜看,看完点个赞!』
- /////////////////////////////////////////////////////////////////////////////
- '功能描述:在好友列表启动脚本即可自动开始送心操作。
- '支持9:16分辨率:480*854、540*960、720*1280、1080*1920
- '支持3: 5分辨率:480*800、800*1280、1080*1800
- '本作多点找色特征均在720*1280分辨率下获取进行缩放比例计算
- '从零学起之安卓篇《如何在安卓模拟器中进行多分辨率开发调试》
- 'http://bbs.anjian.com/thread-537192-1-1.html
- /////////////////////////////////////////////////////////////////////////////
- '从零学起之安卓实战篇《天天酷跑好友送心》
- 'http://bbs.anjian.com/thread-536548-1-1.html
- /////////////////////////////////////////////////////////////////////////////
- //脚本作者:荆棘
- //更新日期:2014年08月21日
- /////////////////////////////////////////////////////////////////////////////
- Randomize
- Dim IntX,IntY
- Dim win_x,win_y
- win_x = GetScreenX()
- win_y = GetScreenY()
- TracePrint "当前分辨率:" & win_x & "*" & win_y
- '设置浮窗移动到中间
- SetControlBarPos 0.5
- /////////////////////////////////////////////////////////////////////////////
- Dim 好友列表(),红心图标(),送心成功(),到底图标(),下页图标(),划动距离(),标题范围(),返回图标()
- /////////////////////////////////////////////////////////////////////////////
- '比例计算
- Dim win_w,win_h
- win_w=win_x/720
- win_h=win_y/1280
- TracePrint "屏幕比例:" & win_w & ":" & win_h
- If Abs(win_w-win_h) < 0.01 Then'比例偏差小于0.01
- TracePrint "720*1280比例"
- 好友列表=比例换算(Array(65,160,"FFEBD6","0|30|CE6910,-30|70|BD6D10"))
- 红心图标=比例换算(Array(110,760,510,850,"423DEF","-18|35|10C6FF,22|55|EFF7F7"))
- 送心成功=比例换算(Array(170,330,"D69E00","0|420|00BEEF,100|60|FFF3E6"))
- 到底图标=比例换算(Array(250,160,510,210,"735529","-15|-15|D6AA31,-2|98|FFEBCE,-62|-2|DEDBB5"))
- 下页图标=比例换算(Array(140,455,510,490,"C58E5A","15|0|FFF7EF,-25|142|DEDFBD,90|-8|CE8E21,110|-193|FFEBCE,112|-290|7B5531"))
- 划动距离=比例换算(Array(160,540,470,540))
- 标题范围=比例换算(Array(560,220,570,320,"F7E29C",250))
- 返回图标=比例换算(Array(599,140,"EFEFEF","0|20|EFEFEF,21|20|FFC611"))
- End If
- /////////////////////////////////////////////////////////////////////////////
- If IsNumeric(好友列表(0))=False Then
- '比例计算
- win_w=win_x/480
- win_h=win_y/800
- 'TracePrint win_w & "-" & win_h & "=" & Abs(win_w-win_h)
- If Abs(win_w-win_h) < 0.1 Then'比例偏差小于0.1
- TracePrint "480*800比例"
- 好友列表=比例换算(Array(42,80,"FFE9CE","0|20|C7680E,0|45|E58F19"))
- 红心图标=比例换算(Array(70,480,340,540,"423DEF","-12|25|19CAFF,13|40|EFF9FD"))
- 送心成功=比例换算(Array(110,200,"D89A03","0|280|00BBF0,50|0|FFF4E8"))
- 到底图标=比例换算(Array(160,75,340,115,"78552B","-11|-11|D8A82D,-4|66|FFE7C8,-19|136|C5821B,-73|194|F0EEE3"))
- 下页图标=比例换算(Array(80,260,360,390,"C08C56","10|0|FFF7EF,-11|22|B8A69A,-9|49|B9A69A,-1|82|B8A79A"))
- 划动距离=比例换算(Array(100,300,305,300))
- 标题范围=比例换算(Array(370,115,380,195,"F7E29C",168))
- 返回图标=比例换算(Array(392,65,"EEEEEE","0|15|EEEEEE,14|15|FFC717"))
- End If
- End If
- /////////////////////////////////////////////////////////////////////////////
- If IsNumeric(好友列表(0))=False Then
- TracePrint "暂不支持当前" & win_x & "*" & win_y & "分辨率,请联系作者咨询!"
- ShowMessage "暂不支持当前" & win_x & "*" & win_y & "分辨率,请联系作者咨询!"
- Delay 1000
- EndScript
- End If
- /////////////////////////////////////////////////////////////////////////////
- '调试区(不解释)
- //KeepCapture
- //TracePrint "好友列表"
- //TracePrint 判断(好友列表)
- //TracePrint IntX & "|" & IntY
- //TracePrint "红心图标"
- //TracePrint 判断(红心图标)
- //TracePrint IntX & "|" & IntY
- //TracePrint "送心成功"
- //TracePrint 判断(送心成功)
- //TracePrint IntX & "|" & IntY
- //TracePrint "到底图标"
- //TracePrint 判断(到底图标)
- //TracePrint IntX & "|" & IntY
- //TracePrint "下页图标"
- //TracePrint 判断(下页图标)
- //TracePrint IntX & "|" & IntY
- //TracePrint "返回图标"
- //TracePrint 判断(返回图标)
- //TracePrint IntX & "|" & IntY
- //ReleaseCapture
- //Call 触屏划动(划动距离)
- //TracePrint 切换排行榜(标题范围)
- //EndScript
- /////////////////////////////////////////////////////////////////////////////
- 'UI参数获取(不解释)
- '无
- /////////////////////////////////////////////////////////////////////////////
- '主线循环
- Do
- KeepCapture
- If 判断(好友列表)=True Then
- TracePrint "好友列表"
- If 判断点击(红心图标)=True Then
- TracePrint "红心图标"
- ElseIf 判断点击(下页图标)=True Then
- TracePrint "下页图标"
- ElseIf 判断(到底图标)=True Then
- TracePrint "到底图标"
- If 切换排行榜(标题范围)=False Then
- TracePrint "已是最后排行榜"
- ShowMessage "已经全部刷新完毕!"
- Delay 1000
- EndScript //全部好友送心完成,脚本停止!
- End If
- //没结束,则继续循环
- Else
- //没红心图标,也没下一页图标,也没到底图标,那么就划动好友列表
- TracePrint "触屏划动"
- Call 触屏划动(划动距离)
- End If
- ElseIf 判断点击(送心成功)=True Then
- TracePrint "送心成功"
- ElseIf 判断点击(返回图标)=True Then
- TracePrint "返回图标"
- End If
- Delay 500
- Loop
- /////////////////////////////////////////////////////////////////////////////
- '功能模块(跟进当前脚本需求,专门编写)
- Function 切换排行榜(数组特征)
- 切换排行榜=False
- Dim arr(),i
- arr=数组特征
- For i=0 To 1
- If FindCol(arr(0),arr(1)+i*arr(5),arr(2),arr(3)+i*arr(5),arr(4),0.9)=True Then
- Tap arr(0),arr(1)+(i+1)*arr(5)
- Delay 500
- 切换排行榜=True
- Exit For
- End If
- Next
- End Function
- /////////////////////////////////////////////////////////////////////////////
- '固定模块(通用型封装模块,基本常用脚本都需要用到的功能)
- Sub 触屏划动(数组特征)
- Dim arr(),n
- arr=数组特征
- n=Int(10*Rnd())'给划动操作增加些随机偏值
- TouchDown arr(0)+n,arr(1)+n,1
- TouchMove arr(2)+n,arr(3)+n,1
- Delay 500
- TouchUp 1
- Delay 100
- End Sub
- Function 判断(数组特征)
- 判断=False
- Dim arr()
- arr=数组特征
- '因为本作中只用到区域多点找色查找与固定起点多点比色
- '所以就简单判断下第四个值是否为数字,即可确认是区域多点找色还是固定多点比色
- If IsNumeric(arr(3))=True Then
- 判断=FindMultiCol(arr(0),arr(1),arr(2),arr(3),arr(4),arr(5),0.9)
- Else
- 判断=CmpMultiCol(arr(0),arr(1),arr(2),arr(3),0.9)
- End If
- End Function
- Sub 点击(数组坐标)
- Dim arr()
- arr=数组坐标
- Tap arr(0),arr(1)
- End Sub
- Function 判断点击(数组特征)
- 判断点击=False
- If 判断(数组特征)=True Then
- Tap IntX,IntY
- 判断点击=True
- End If
- End Function
- Function 比例换算(数组)
- Dim arr(),arr_bl(),i,n
- arr=数组
- arr_bl=Array(win_w,win_h)
- i=0
- For Each n In arr
- If IsNumeric(n)=True Then
- arr(i)=n*arr_bl(i Mod 2)
- ElseIf InStr(1,n,"|")>0 Then
- Dim arr1(),str,arr2()
- arr1=Split(arr(i),",")
- str=""
- For Each n In arr1
- arr2=Split(n,"|")
- str=str & arr2(0)*win_w & "|" & arr2(1)*win_h & "|" & arr2(2) & ","
- Next
- arr(i)=Left(str,Len(str)-1)
- Exit For
- End If
- i=i+1
- Next
- 比例换算=arr
- End Function
- /////////////////////////////////////////////////////////////////////////////
- '本脚本相关教程资料(都是重点,想学就把我的教程看完,如不懂可以各大按键群(官方群)里联系我)
- '从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
- 'http://bbs.anjian.com/thread-523396-1-1.html
- '从零学起之基础核心《麻雀虽小五脏俱全》
- 'http://bbs.anjian.com/thread-509172-1-1.html
- /////////////////////////////////////////////////////////////////////////////
- '固定函数(通用型封装模块,核心函数功能,每个脚本必用,一般没新需求是不更改的)
- '固定坐标多点模糊找色
- Function CmpMultiCol(x,y,col,colstr,n)
- CmpMultiCol=False
- If CmpColor(x,y,col,n)=0 Then
- CmpMultiCol=FindMultiCol(x,y,x,y,col,colstr,n)
- Else
- CmpMultiCol=FindMultiCol(x-3,y-3,x+3,y+15,col,colstr,n)
- End If
- End Function
- '区域范围多点模糊找色
- Function FindMultiCol(x1,y1,x2,y2,col,colstr,n)
- FindMultiCol=False
- FindMultiColor x1,y1,x2,y2,col,colstr,0,n,IntX,IntY
- If IntX > -1 Then FindMultiCol=True
- End Function
- '区域范围颜色查找
- Function FindCol(x1,y1,x2,y2,col,n)
- FindCol=False
- FindColor x1,y1,x2,y2,col,0,n,intX,intY
- If intX > -1 Then FindCol=True
- End Function
- //////////////////////////////////////////////////////////////////////////////////////////
- '作业
- //1、Function 比例换算(数组),原理描述完整写出来。
- //2、Function 判断(数组特征) 与 Sub 点击(数组坐标),各列出至少一个优点描述。
- //3、Sub 点击技能(),为什么里面代码这么写,列出至少两点。
- //4、Function CmpMultiCol(x,y,col,str,n),固定多点找色原理描述。
- //5、Function FindMultiCol(x1,y1,x2,y2,col,str,n),区域多点找色原理描述。
- //////////////////////////////////////////////////////////////////////////////////////////
- //脚本作者:荆棘
- //更新日期:2014年08月21日
复制代码
|