• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

返回列表 12345678» / 78
发新话题 回复该主题

从零学起之安卓实战篇《全民打怪兽循环冒险》 [复制链接]

1#
本帖最后由 兄弟工程师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. 界面1:
  2. {
  3. 多选框:
  4. {
  5. 注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
  6. 名称:"技能",
  7. 提示内容:"是否使用第三个技能",
  8. 选中:false,
  9. 文字大小:0,
  10. 高度:0,
  11. 宽度:0
  12. },
  13. 文字框:
  14. {
  15. 注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
  16. 名称:"来自",
  17. 显示内容:"来自:按键精灵安卓版(http://m.anjian.com/)",
  18. 文字大小:0,
  19. 高度:0,
  20. 宽度:0
  21. },
  22. }
复制代码
脚本UI设置参数获取代码
  1. /////////////////////////////////////////////////////////////////////////////
  2. '获取UI界面设置参数
  3. Dim val_jn
  4. val_jn=ReadUIConfig("技能",false)
  5. If val_jn=True Then
  6. ShowMessage "技能3已开启!"
  7. Else
  8. ShowMessage "技能3未开启!"
  9. End If
  10. Delay 1000
  11. /////////////////////////////////////////////////////////////////////////////
复制代码
完整脚本源码展示:回复可见,记得给花!
  1. /////////////////////////////////////////////////////////////////////////////
  2. '定义一些常用变量:IntX IntY 找色模块返回值用,win_x win_y 屏幕分辨率用,win_w win_h 分辨率比例用
  3. Dim IntX,IntY
  4. Dim win_x,win_y,win_w,win_h
  5. win_x = GetScreenX()
  6. win_y = GetScreenY()
  7. TracePrint "当前分辨率:" & win_x & "*" & win_y
  8. '定义一些常用变量,加刮号是为了定义变量类型为数组类型
  9. Dim 开始按钮(),进入按钮(),奖励宝箱(),确认按钮(),再玩一次(),已自动战斗(),未自动战斗(),超越好友()
  10. Dim 战斗技能壹(),战斗技能貳(),战斗技能叁()
  11. /////////////////////////////////////////////////////////////////////////////
  12. '比例计算
  13. win_w=win_x/720
  14. win_h=win_y/1280
  15. TracePrint "屏幕比例:" & win_w & ":" & win_h
  16. '只支持同等比例720*1280、1080*1920、540*960,非同比例则不支持,有心学习的同学请自行理解完整实例后更新吧,去吧少年少女们!
  17. If win_w = win_h Then
  18. 开始按钮=Array(98,894,"080808","-8|26|BDAE8C,-5|12|EEDAC5,56|4|FFFFFF")
  19. 进入按钮=Array(80,820,"4A9ACE","3|15|002452,16|64|082452,6|74|082452,12|100|082452,-15|100|52AAD6")
  20. 奖励宝箱=Array(230,640,"00243A","-55|-90|00AEF7,120|-90|00FFFF,120|90|00D2F7,-50|85|08B2FF")
  21. 确认按钮=Array(62,588,"002452","-2|22|4A9ECE,-12|92|4AA6CE,18|112|4A9ACE")
  22. 再玩一次=Array(74,237,"08285A","14|48|5AB6DE,-14|48|52B2DE,5|107|4A9ECE,11|133|4A9ECE")
  23. 已自动战斗=Array(102,51,"FFFFFF","0|23|F7FFF7,-24|31|003519,-44|53|FFFFFF,6|52|FFFFFF,18|29|29AA94")
  24. 战斗技能壹=Array(85,1050)
  25. 战斗技能貳=Array(85,1190)
  26. 战斗技能叁=Array(85,910)
  27. 未自动战斗=Array(73,53,"FFFFFF","-15|51|FFFFFF,35|50|FFFFFF,2|-18|081829,-8|-18|081821,2|72|081829")
  28. 超越好友=Array(630,975,"4A9ECE","-1|20|08245A,-2|40|4A9ECE,-20|19|52BADE,14|20|4A9ECE")
  29. End If
  30. /////////////////////////////////////////////////////////////////////////////
  31. '比例不相等则再次进行判断
  32. If win_w
    优化升级版本:看完的同学请试着把最后作业完成,理解一半以上的同学可以联系我专门指导。

    UI界面预览
    您所在的用户组无法下载或查看附件


    UI代码展示 win_h Then
  33. '比例计算(该比例是针对靠谱模拟器分辨率制作,如需要增加别的分辨率比例,请学习后,对照范例更新特征)
  34. win_w=win_x/800
  35. win_h=win_y/600
  36. TracePrint win_w
  37. TracePrint win_h
  38. If win_w = win_h Then
  39. 开始按钮=Array(569,475,"040415","18|-24|FFFFFF,-1|-36|FFFFFF,20|0|BAB291")
  40. 进入按钮=Array(528,483,"052657","-11|0|4A9DCE,59|-4|082557,59|12|4FAAD3,73|-6|4A9DCE")
  41. 奖励宝箱=Array(400,410,"05263E","-84|-33|02C7FE,83|-38|00ABF5,72|-100|02E0FF,-72|41|06B8FC")
  42. 确认按钮=Array(357,547,"052657","18|5|4C9ED0,77|-11|082557,86|-15|4A9DCE,2|-16|4A9DCE")
  43. 再玩一次=Array(73,527,"082557","45|10|4A9DCE,62|-1|4A9DCE,86|22|4FB2DB,100|7|4A9DCE")
  44. 已自动战斗=Array(86,509,"FFFFFF","-30|-14|37BBA3,-18|-14|37BBA3,-10|-14|3FC4B4,-1|-12|41B299")
  45. 战斗技能壹=Array(730,525)
  46. 战斗技能貳=Array(610,525)
  47. 战斗技能叁=Array(490,525)
  48. 未自动战斗=Array(86,509,"FFFFFF","1|42|FFFFFF,-20|-29|5DB2D4,-19|74|1F74A7,15|20|0D1D2E")
  49. 超越好友=Array(943,1432,"082852","2|-32|4A9ECE,24|0|4A9ECE,0|29|4A9ECE")
  50. End If
  51. End If
  52. /////////////////////////////////////////////////////////////////////////////
  53. '最后比例还是不相等则
  54. If win_w 完整源码脚本源码展示,回复可见。
    win_h Then
  55. ShowMessage "分辨率比例不同,暂不支持!请联系作者更新!"
  56. Delay 1000
  57. EndScript
  58. End If
  59. /////////////////////////////////////////////////////////////////////////////
  60. '获取UI界面设置参数
  61. Dim val_jn
  62. val_jn=ReadUIConfig("技能",false)
  63. If val_jn=True Then
  64. ShowMessage "技能3已开启!"
  65. Else
  66. ShowMessage "技能3未开启!"
  67. End If
  68. Delay 1000
  69. /////////////////////////////////////////////////////////////////////////////
  70. '调试区
  71. //KeepCapture
  72. //TracePrint 判断(开始按钮)
  73. //TracePrint 判断(进入按钮)
  74. //TracePrint 判断(奖励宝箱)
  75. //TracePrint 判断(确认按钮)
  76. //TracePrint 判断(再玩一次)
  77. //TracePrint 判断(已自动战斗)
  78. //TracePrint 判断(未自动战斗)
  79. //TracePrint 判断(超越好友)
  80. //ReleaseCapture
  81. //EndScript
  82. /////////////////////////////////////////////////////////////////////////////
  83. '主线循环
  84. Do
  85. KeepCapture
  86. If 判断(开始按钮)=True Then '判断开始冒险
  87. Call 点击(开始按钮)
  88. ElseIf 判断(进入按钮)=True Then
  89. Call 点击(进入按钮)
  90. ElseIf 判断(奖励宝箱)=True Then '奖励判断
  91. Call 点击(奖励宝箱)
  92. ElseIf 判断(确认按钮)=True Then
  93. Call 点击(确认按钮)
  94. ElseIf 判断(再玩一次)=True Then
  95. Call 点击(再玩一次)
  96. ElseIf 判断(已自动战斗)=True Then '战斗判断
  97. Call 点击战斗技能()
  98. ElseIf 判断(未自动战斗)=True Then
  99. Call 点击(未自动战斗)
  100. ElseIf 判断(超越好友)=True Then
  101. Call 点击(超越好友)
  102. Else
  103. TracePrint "未知画面"
  104. End If
  105. ReleaseCapture
  106. Delay 1000 '循环中适当的延时给予CPU响应时间,使脚本更为流畅
  107. Loop
  108. /////////////////////////////////////////////////////////////////////////////
  109. '功能模块
  110. Function 点击战斗技能()
  111. Call 点击(战斗技能壹)
  112. Call 点击(战斗技能貳)
  113. If val_jn=True Then
  114. Call 点击(战斗技能叁)
  115. End If
  116. End Function
  117. /////////////////////////////////////////////////////////////////////////////
  118. '固定模块
  119. Function 判断(数组特征)
  120. Dim arr()
  121. arr=数组特征
  122. 判断=CmpMultiCol(arr(0),arr(1),arr(2),arr(3),0.9)
  123. End Function
  124. Sub 点击(数组坐标)
  125. Dim arr()
  126. arr=数组坐标
  127. Tap arr(0) * win_w, arr(1) * win_h
  128. End Sub
  129. /////////////////////////////////////////////////////////////////////////////
  130. '本脚本相关教程资料(都是重点,想学就把我的教程看完,如不懂可以各大按键群(官方群)里联系我)
  131. '从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
  132. 'http://bbs.anjian.com/thread-523396-1-1.html
  133. '从零学起之基础核心《麻雀虽小五脏俱全》
  134. 'http://bbs.anjian.com/thread-509172-1-1.html
  135. /////////////////////////////////////////////////////////////////////////////
  136. '判断两个16进制值相似度是否到达对应百分比
  137. Function IsCol(col1,col2,n)
  138. IsCol=False
  139. Dim r1,g1,b1
  140. Dim r2,g2,b2
  141. ColorToRGB col1,r1,g1,b1
  142. ColorToRGB col2,r2,g2,b2
  143. If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=True
  144. End Function
  145. '固定坐标单点模糊找色
  146. Function CmpCol(x,y,col,n)
  147. CmpCol=False
  148. '比例换算
  149. x=x*win_w
  150. y=y*win_h
  151. Dim temp_col
  152. temp_col=GetPixelColor(x,y)
  153. If temp_col=col Then
  154. CmpCol=True
  155. Else
  156. CmpCol=IsCol(col,temp_col,n)
  157. End If
  158. End Function
  159. '固定坐标多点模糊找色
  160. Function CmpMultiCol(x,y,col,str,n)
  161. CmpMultiCol=False
  162. If CmpCol(x,y,col,n)=True Then
  163. CmpMultiCol=MultiColor(x,y,str,n)
  164. Else
  165. CmpMultiCol=FindMultiCol(x-3,y-3,x+3,y+3,col,str,n)
  166. End If
  167. End Function
  168. '区域范围多点模糊找色
  169. Function FindMultiCol(x1,y1,x2,y2,col,str,n)
  170. FindMultiCol=False
  171. '比例换算
  172. x1=x1*win_w
  173. y1=y1*win_h
  174. x2=x2*win_w
  175. y2=y2*win_h
  176. Dim x,y
  177. Do
  178. FindColor x1,y1,x2,y2,col,0,n,intX, intY
  179. If intX >= 0 Then
  180. If MultiColor(intX,intY,str,n)=True Then
  181. FindMultiCol=True
  182. Exit Do
  183. Else
  184. x=IntX
  185. y=IntY
  186. Do Until x > x2
  187. FindColor x,y,x2,y,col,0,n,intX,intY
  188. If intX >= 0 Then
  189. If MultiColor(intX,intY,str,n)=True Then
  190. FindMultiCol=True
  191. Exit Function
  192. Else
  193. x=IntX+1
  194. End If
  195. Else
  196. Exit Do
  197. End If
  198. Loop
  199. y1=y+1
  200. End If
  201. Else
  202. Exit Do
  203. End If
  204. Loop Until y1 > y2
  205. End Function
  206. '多点偏移点阵匹配
  207. Function MultiColor(x,y,str,n)
  208. MultiColor=False
  209. Dim arr1,i,arr2()
  210. arr1=Split(str,",")
  211. For Each i In arr1
  212. arr2=Split(i,"|")
  213. If CmpCol(x+Int(arr2(0)),y+Int(arr2(1)),arr2(2),n)=False Then
  214. '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
  215. 'If IntX=-1 Then
  216. Exit Function
  217. End If
  218. Next
  219. MultiColor=True
  220. End Function
  221. //////////////////////////////////////////////////////////////////////////////////////////
  222. '自定义固定模块组合应用,以下部分大家请理解函数模块功能作用后自行组合使用。(请理解后调用,以免出错都不懂原因)
  223. Function Cm(x,y,col,str)
  224. Cm=CmEx(x,y,col,str,0.9)
  225. End Function
  226. Function CmEx(x,y,col,str,n)
  227. KeepCapture
  228. CmEx=CmpMultiCol(x,y,col,str,n)
  229. ReleaseCapture
  230. End Function
  231. Function Fm(x1,y1,x2,y2,col,str)
  232. Fm=FmEx(x1,y1,x2,y2,col,str,0.9)
  233. End Function
  234. Function FmEx(x1,y1,x2,y2,col,str,n)
  235. KeepCapture
  236. FmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)
  237. ReleaseCapture
  238. End Function
复制代码

点评

305431948  论坛升级,我的许多帖子都残缺了,呵呵……  发表于 2016/5/1 16:28:56

    已有20评分我要评分查看所有评分

    2#

    就喜欢玉米

    3#


    4#

    急看源码学习啊

    5#


    6#

    感觉裹脚布

    7#


    8#

    1

    9#

    学习了!学习了!学习了!

    10#

    学习喽

    11#

    学习

    12#

    希望查看完整的源码

    13#

    太棒了

    14#

    可口可乐了框架啊

    15#

    看看,支持一下

    16#

    1111111111111111111

    17#

    学习学习。刚开始学脚本

    18#

    看看你

    19#

    零学起之安卓实战篇《全民打怪兽循环冒险》修改

    20#

    支持一下给点动力!!!!!!!

    发新话题 回复该主题