- 按键精灵会员
- 1177096
- 186
- 3
- 64 朵
- 682 个
- 63 个
- 12720
- 2012-06-11
|
1#
t
T
发表于 2014-05-27 20:42
|
|只看楼主
本帖最后由 兄弟工程师05 于 2014-8-7 17:40 编辑 『教程图片需登录论坛方可查看』 本期主题:实战源码讲解 脚本功能:顾名思义,循环冒险。(无限循环刷副本,直到体力耗尽) 使用要求:请在“副本选择开始冒险界面” 或 “中途操作界面” 或 “战斗中” 启动脚本均可。 环境支持:分辨率:720*1280、1080*1920、540*690、靠谱专版:800*600。点击:终结分辨率噩梦!按键精灵(安卓版)全面支持靠谱助手 脚本思路:颜色判断确认当前画面内容,执行对应的触屏操作,组合实现所谓的循环冒险功能。(语文不是体育老师教的同学请自行查看主线循环) 腾讯新闻咨询:快游全民打怪兽助手 自动刷副本教程 进入正题:以下我主要介绍下写一个脚本简单需要有哪些要点必学。 一、脚本思路。 首先写一个脚本,我们得先知道写个脚本来做什么,如果我们自己都不清楚脚本是做什么,谈何写脚本。 那么这里我来进行步骤解析: 问:什么是循环冒险。 答:循环,循环做某事,有头有尾,有始有终,称为循环。 答:冒险,进入游戏副本,攻略怪物,推到BOSS,打开宝箱,获取奖励,完成冒险。 二、逻辑构建。 根据以上分析,我们已经明确了什么是循环冒险,那么接下来需要规划逻辑框架,让脚本有一定逻辑判断能力,对当前情况的信息获取,信息判断,执行对应的操作。 这里主要分两点: 1、分析脚本需要哪些环节。 2、论证每个环节的可行性。
- 您所在的用户组无法下载或查看附件
判断:在冒险开始画面 点击:开始冒险按钮。(这里提示,取点判断时取按钮边框区域的点,因为部分关卡按钮是“开始大战”)
- 您所在的用户组无法下载或查看附件
判断:选择好友,进入按钮画面 点击:进入按钮。(进入副本对战,好友默认第一个)
- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
判断:是否已开启自动战斗图标 点击:未开启则点击开启,已开启则点击右边技能图标。
- 您所在的用户组无法下载或查看附件
判断:宝箱图标 点击:奖励宝箱。(打开宝箱)
- 您所在的用户组无法下载或查看附件
判断:确认按钮。 点击:确认按钮。(领取奖励)
- 您所在的用户组无法下载或查看附件
判断:再玩一次按钮 点击:再玩一次按钮。(返回开始冒险界面,循环继续) 三、知识要点。 脚本最重要的逻辑思路已经描述完毕,相信就是“小明同学”也懂了。 脚本逻辑思路构建完毕,剩余的不过是代码填空。 代码逻辑框架:从零学起之基础核心《麻雀虽小五脏俱全》核心:脚本是代替人工操作,那么该有的都不能少,这里我们拿一个团队做比喻。1、一个主团长( 主线循环),负责管理指挥团队。 2、若干副团长( 支线循环),负责协助团长管理。 3、若干团小组( 功能模块),各个团员集合小组。 4、若干团成员( 代码命令),负责执行做事单位。 5、若干团精英( 固定模块),专精处理固定事件。 以下分类名称只是我个人命名的称呼,大家看内容理解即可,如有不懂可以跟帖,或按键群里联系。主线循环:完整脚本主线循环,全部功能都由主线中展开执行。 支线循环:结构其实与主线循环一样,只是挂钩在主线之下的一个循环事件,当主线中某个环节,需要单独循环做某事时,则可展开另一个“支线循环”,挂钩主线循环下,当该循环事件完成,必须返回一个结果给主线,成功或失败或别的什么信息,主线根据返回的信息,判断做下一步操作。 功能模块:则是一些具体执行功能代码封装,如Sub或Function,Sub不支持返回值,许多功能执行需要一个返回结果,来判断下一步操作,请使用Function。 代码命令:顾名思义,一个个功能命令即是。 固定模块:则是一些常用的函数模块,比如找图、找色、多点找色,等等这类重复用到的功能,他们的结构一样,只是部分参数不一样,为了避免每次调用都要写一大堆重复性代码,把相关命令进行封装调用,这些固定模块基本是不需要修改,不同与功能模块,功能模块是针对每个脚本而进行编写封装,而固定模块则每一个脚本都需要用到的固定函数。 重点总结: 首先本文中主要用到单点找色与多点找色的原理来识别屏幕画面,无找图。(不仅仅是找图略慢,作图麻烦,不支持同等比例缩放图像的判断等) 此外为了多分辨率兼容修改的便捷,我把全部的多点点阵特征信息与全部坐标参数写在开头,一律用数组形式赋值,传入脚本调用,这样脚本框架无需改动情况下,我只需修改前面配置信息,即可兼容其他比例的分辨率。 也许我的代码结构对于新手来说可能不太理解,对于老手来讲不太习惯,甚至不理解为什么我这么写结构,但是我可以告诉你们,本人09年接触按键从小白自学起家到后来经师傅大人指导,代码的结构也是不停的优化,才形成目前的格局。存在即是合理,我这么写自然有我的用意,希望你们的悟性点没加错,引用我格式的同学我希望你能理解为什么这么写而非照本宣科,不用我格式的同学希望你也有自己的领悟,心里清楚明白你理解了,但某些方面觉得有更好的方式所以不用,如果有认真读到这里的同学,随时欢迎加Q留言,我有好的分享会随时发布。 或许我的代码结构不是最适合你们,但在你们还未有属于自己风格特性的编写格式习惯前,希望对你们有所启发,不墨迹了。 常用功能函数:本文中需要用到的相关知识点教程。 1、想学的同学希望认证阅读理解。 2、只想下载个应用的同学也可以点下载、 3、想复制源码的同学也可以回个帖支持下,领走! 另外大家可以在手机按键群里联系到我,谢谢大家。从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》从零学起之安卓篇《按键精灵安卓版UI界面控件应用介绍》从零学起之安卓篇《如何简单获取手机画面导入PC按键抓抓》从零学起之安卓篇《独立APK小精灵制作流程介绍》APK下载:- 您所在的用户组无法下载或查看附件
UI界面预览- 您所在的用户组无法下载或查看附件
UI代码展示- 界面1:
- {
- 多选框:
- {
- 注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
- 名称:"技能",
- 提示内容:"是否使用第三个技能",
- 选中:false,
- 文字大小:0,
- 高度:0,
- 宽度:0
- },
- 文字框:
- {
- 注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
- 名称:"来自",
- 显示内容:"来自:按键精灵安卓版(http://m.anjian.com/)",
- 文字大小:0,
- 高度:0,
- 宽度:0
- },
- }
复制代码 脚本UI设置参数获取代码- /////////////////////////////////////////////////////////////////////////////
- '获取UI界面设置参数
- Dim val_jn
- val_jn=ReadUIConfig("技能",false)
- If val_jn=True Then
- ShowMessage "技能3已开启!"
- Else
- ShowMessage "技能3未开启!"
- End If
- Delay 1000
- /////////////////////////////////////////////////////////////////////////////
复制代码 完整脚本源码展示:回复可见,记得给花!- /////////////////////////////////////////////////////////////////////////////
- '定义一些常用变量:IntX IntY 找色模块返回值用,win_x win_y 屏幕分辨率用,win_w win_h 分辨率比例用
- Dim IntX,IntY
- Dim win_x,win_y,win_w,win_h
- win_x = GetScreenX()
- win_y = GetScreenY()
- TracePrint "当前分辨率:" & win_x & "*" & win_y
- '定义一些常用变量,加刮号是为了定义变量类型为数组类型
- Dim 开始按钮(),进入按钮(),奖励宝箱(),确认按钮(),再玩一次(),已自动战斗(),未自动战斗(),超越好友()
- Dim 战斗技能壹(),战斗技能貳(),战斗技能叁()
- /////////////////////////////////////////////////////////////////////////////
- '比例计算
- win_w=win_x/720
- win_h=win_y/1280
- TracePrint "屏幕比例:" & win_w & ":" & win_h
- '只支持同等比例720*1280、1080*1920、540*960,非同比例则不支持,有心学习的同学请自行理解完整实例后更新吧,去吧少年少女们!
- If win_w = win_h Then
- 开始按钮=Array(98,894,"080808","-8|26|BDAE8C,-5|12|EEDAC5,56|4|FFFFFF")
- 进入按钮=Array(80,820,"4A9ACE","3|15|002452,16|64|082452,6|74|082452,12|100|082452,-15|100|52AAD6")
- 奖励宝箱=Array(230,640,"00243A","-55|-90|00AEF7,120|-90|00FFFF,120|90|00D2F7,-50|85|08B2FF")
- 确认按钮=Array(62,588,"002452","-2|22|4A9ECE,-12|92|4AA6CE,18|112|4A9ACE")
- 再玩一次=Array(74,237,"08285A","14|48|5AB6DE,-14|48|52B2DE,5|107|4A9ECE,11|133|4A9ECE")
- 已自动战斗=Array(102,51,"FFFFFF","0|23|F7FFF7,-24|31|003519,-44|53|FFFFFF,6|52|FFFFFF,18|29|29AA94")
- 战斗技能壹=Array(85,1050)
- 战斗技能貳=Array(85,1190)
- 战斗技能叁=Array(85,910)
- 未自动战斗=Array(73,53,"FFFFFF","-15|51|FFFFFF,35|50|FFFFFF,2|-18|081829,-8|-18|081821,2|72|081829")
- 超越好友=Array(630,975,"4A9ECE","-1|20|08245A,-2|40|4A9ECE,-20|19|52BADE,14|20|4A9ECE")
- End If
- /////////////////////////////////////////////////////////////////////////////
- '比例不相等则再次进行判断
- If win_w
优化升级版本:看完的同学请试着把最后作业完成,理解一半以上的同学可以联系我专门指导。
UI界面预览
- 您所在的用户组无法下载或查看附件
UI代码展示 win_h Then
- '比例计算(该比例是针对靠谱模拟器分辨率制作,如需要增加别的分辨率比例,请学习后,对照范例更新特征)
- win_w=win_x/800
- win_h=win_y/600
- TracePrint win_w
- TracePrint win_h
- If win_w = win_h Then
- 开始按钮=Array(569,475,"040415","18|-24|FFFFFF,-1|-36|FFFFFF,20|0|BAB291")
- 进入按钮=Array(528,483,"052657","-11|0|4A9DCE,59|-4|082557,59|12|4FAAD3,73|-6|4A9DCE")
- 奖励宝箱=Array(400,410,"05263E","-84|-33|02C7FE,83|-38|00ABF5,72|-100|02E0FF,-72|41|06B8FC")
- 确认按钮=Array(357,547,"052657","18|5|4C9ED0,77|-11|082557,86|-15|4A9DCE,2|-16|4A9DCE")
- 再玩一次=Array(73,527,"082557","45|10|4A9DCE,62|-1|4A9DCE,86|22|4FB2DB,100|7|4A9DCE")
- 已自动战斗=Array(86,509,"FFFFFF","-30|-14|37BBA3,-18|-14|37BBA3,-10|-14|3FC4B4,-1|-12|41B299")
- 战斗技能壹=Array(730,525)
- 战斗技能貳=Array(610,525)
- 战斗技能叁=Array(490,525)
- 未自动战斗=Array(86,509,"FFFFFF","1|42|FFFFFF,-20|-29|5DB2D4,-19|74|1F74A7,15|20|0D1D2E")
- 超越好友=Array(943,1432,"082852","2|-32|4A9ECE,24|0|4A9ECE,0|29|4A9ECE")
- End If
- End If
- /////////////////////////////////////////////////////////////////////////////
- '最后比例还是不相等则
- If win_w 完整源码脚本源码展示,回复可见。
win_h Then
- ShowMessage "分辨率比例不同,暂不支持!请联系作者更新!"
- Delay 1000
- EndScript
- End If
- /////////////////////////////////////////////////////////////////////////////
- '获取UI界面设置参数
- Dim val_jn
- val_jn=ReadUIConfig("技能",false)
- If val_jn=True Then
- ShowMessage "技能3已开启!"
- Else
- ShowMessage "技能3未开启!"
- End If
- Delay 1000
- /////////////////////////////////////////////////////////////////////////////
- '调试区
- //KeepCapture
- //TracePrint 判断(开始按钮)
- //TracePrint 判断(进入按钮)
- //TracePrint 判断(奖励宝箱)
- //TracePrint 判断(确认按钮)
- //TracePrint 判断(再玩一次)
- //TracePrint 判断(已自动战斗)
- //TracePrint 判断(未自动战斗)
- //TracePrint 判断(超越好友)
- //ReleaseCapture
- //EndScript
- /////////////////////////////////////////////////////////////////////////////
- '主线循环
- Do
- KeepCapture
- If 判断(开始按钮)=True Then '判断开始冒险
- Call 点击(开始按钮)
- ElseIf 判断(进入按钮)=True Then
- Call 点击(进入按钮)
- ElseIf 判断(奖励宝箱)=True Then '奖励判断
- Call 点击(奖励宝箱)
- ElseIf 判断(确认按钮)=True Then
- Call 点击(确认按钮)
- ElseIf 判断(再玩一次)=True Then
- Call 点击(再玩一次)
- ElseIf 判断(已自动战斗)=True Then '战斗判断
- Call 点击战斗技能()
- ElseIf 判断(未自动战斗)=True Then
- Call 点击(未自动战斗)
- ElseIf 判断(超越好友)=True Then
- Call 点击(超越好友)
- Else
- TracePrint "未知画面"
- End If
- ReleaseCapture
- Delay 1000 '循环中适当的延时给予CPU响应时间,使脚本更为流畅
- Loop
- /////////////////////////////////////////////////////////////////////////////
- '功能模块
- Function 点击战斗技能()
- Call 点击(战斗技能壹)
- Call 点击(战斗技能貳)
- If val_jn=True Then
- Call 点击(战斗技能叁)
- End If
- End Function
- /////////////////////////////////////////////////////////////////////////////
- '固定模块
- Function 判断(数组特征)
- Dim arr()
- arr=数组特征
- 判断=CmpMultiCol(arr(0),arr(1),arr(2),arr(3),0.9)
- End Function
- Sub 点击(数组坐标)
- Dim arr()
- arr=数组坐标
- Tap arr(0) * win_w, arr(1) * win_h
- End Sub
- /////////////////////////////////////////////////////////////////////////////
- '本脚本相关教程资料(都是重点,想学就把我的教程看完,如不懂可以各大按键群(官方群)里联系我)
- '从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
- 'http://bbs.anjian.com/thread-523396-1-1.html
- '从零学起之基础核心《麻雀虽小五脏俱全》
- 'http://bbs.anjian.com/thread-509172-1-1.html
- /////////////////////////////////////////////////////////////////////////////
- '判断两个16进制值相似度是否到达对应百分比
- Function IsCol(col1,col2,n)
- IsCol=False
- Dim r1,g1,b1
- Dim r2,g2,b2
- ColorToRGB col1,r1,g1,b1
- ColorToRGB col2,r2,g2,b2
- If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=True
- End Function
- '固定坐标单点模糊找色
- Function CmpCol(x,y,col,n)
- CmpCol=False
- '比例换算
- x=x*win_w
- y=y*win_h
- Dim temp_col
- temp_col=GetPixelColor(x,y)
- If temp_col=col Then
- CmpCol=True
- Else
- CmpCol=IsCol(col,temp_col,n)
- End If
- End Function
- '固定坐标多点模糊找色
- Function CmpMultiCol(x,y,col,str,n)
- CmpMultiCol=False
- If CmpCol(x,y,col,n)=True Then
- CmpMultiCol=MultiColor(x,y,str,n)
- Else
- CmpMultiCol=FindMultiCol(x-3,y-3,x+3,y+3,col,str,n)
- End If
- End Function
- '区域范围多点模糊找色
- Function FindMultiCol(x1,y1,x2,y2,col,str,n)
- FindMultiCol=False
- '比例换算
- x1=x1*win_w
- y1=y1*win_h
- x2=x2*win_w
- y2=y2*win_h
- Dim x,y
- Do
- FindColor x1,y1,x2,y2,col,0,n,intX, intY
- If intX >= 0 Then
- If MultiColor(intX,intY,str,n)=True Then
- FindMultiCol=True
- Exit Do
- Else
- x=IntX
- y=IntY
- Do Until x > x2
- FindColor x,y,x2,y,col,0,n,intX,intY
- If intX >= 0 Then
- If MultiColor(intX,intY,str,n)=True Then
- FindMultiCol=True
- Exit Function
- Else
- x=IntX+1
- End If
- Else
- Exit Do
- End If
- Loop
- y1=y+1
- End If
- Else
- Exit Do
- End If
- Loop Until y1 > y2
- End Function
- '多点偏移点阵匹配
- Function MultiColor(x,y,str,n)
- MultiColor=False
- Dim arr1,i,arr2()
- arr1=Split(str,",")
- For Each i In arr1
- arr2=Split(i,"|")
- If CmpCol(x+Int(arr2(0)),y+Int(arr2(1)),arr2(2),n)=False Then
- 'FindColor x+Int(arr2(0))-3, y+Int(arr2(1))-3, x+Int(arr2(0))+3, y+Int(arr2(1))+3, arr2(2), 0, n, intX, intY
- 'If IntX=-1 Then
- Exit Function
- End If
- Next
- MultiColor=True
- End Function
- //////////////////////////////////////////////////////////////////////////////////////////
- '自定义固定模块组合应用,以下部分大家请理解函数模块功能作用后自行组合使用。(请理解后调用,以免出错都不懂原因)
- Function Cm(x,y,col,str)
- Cm=CmEx(x,y,col,str,0.9)
- End Function
- Function CmEx(x,y,col,str,n)
- KeepCapture
- CmEx=CmpMultiCol(x,y,col,str,n)
- ReleaseCapture
- End Function
- Function Fm(x1,y1,x2,y2,col,str)
- Fm=FmEx(x1,y1,x2,y2,col,str,0.9)
- End Function
- Function FmEx(x1,y1,x2,y2,col,str,n)
- KeepCapture
- FmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)
- ReleaseCapture
- End Function
复制代码
点评
305431948
论坛升级,我的许多帖子都残缺了,呵呵……
发表于 2016/5/1 16:28:56
|