按键精灵实战:拾取金币

免责声明

本视频内容纯属个人爱好,目的仅限于学习交流之用,对使用视频内的信息随之而来的风险与本人无关。本人不作任何承诺。也不为视频所提供的信息错误、残缺、延时或因依靠此类信息或文件所采取的任何行动负责。访问者可将本视频提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本人及相关权利人的合法权利。

相关视频链接:

https://www.bilibili.com/video/BV1qv41117Se

https://www.bilibili.com/video/BV1SA411n7Xb

https://www.bilibili.com/video/BV1oA411n7Su

源代码:

Sub 拾取金币()
    //1.首选确定一个固定的坐标,以屏幕中心为固定坐标  1920*1080   原点(960,540)
    //2.查找范围  714,375,1221,727(以人物为中心,上下左右2格的距离范围)
    //3.计算出目标点距离中心的距离x  
    //(1)通过findcolor  查找金币的特征像素点 "00216B-050505",查找到此像素点坐标后,以该像素点为中心,进行上下左右扩散30的像素点的距离,
    //(2)然后使用getcolornum指令,得到区域金币颜色像素点 "269DDD-101010" 的个数,假如区域像素点个数满足金币的像素点最小个数150,则认为这是金币,就得到了金币的坐标
    //4.通过计算金币坐标的x和y轴分别减去原点坐标的x轴和y轴,得到了 纵向和横向的间距
    //5.再计算出人物每一格移动的距离y   人物纵向移动的距离62 ,和人物横向移动的距离96
    //那么移动的次数z=x/y 纵向移动次数= 纵向间距/62   横向移动的次数=横向间距/96
    //横向移动次数=Round(Abs (intX - 960) / 96)
    //纵向移动次数=Round(Abs(intY - 540)/62)
    //再通过for循环反复执行function移动(),进行移动,移动的次数=z
    //定义一个过程,可以在脚本中调用这个过程
    //检测到地上有金币,才进入循环
    //循环 while循环
    //当循环条件成立的时候,反复执行循环体
    //跳出循环的时机
    //(1)地上没有金币了
    //(2)超时了
    Dim t=time()
    While true
        Dim intX,intY
        FindColor 617,351,1320,755, "67DDFF-010101", 0, 1, intX, intY 
        //如果没有找到,intX和intY的值都会被置为-1
        TracePrint intX
        If Time() - t > 15 or intX = -1 Then 
            ShowMessage "拾取完毕,继续打怪"
            TracePrint "拾取物品超时或者未检测到金币"
            Exit While	
        End If
        If intX > -1 Then 
            TracePrint "找到金币特征点X坐标是"& intX & " Y坐标是" &intY	
            //找到金币的特征像素点
            Dim 颜色数量,横向移动次数,纵向移动次数
            颜色数量=GetColorNum (intX - 30, intY - 30, intX + 30, intY + 30,  "5CD8EE-101010", 0.9)
            TracePrint "金币像素数量为"&颜色数量    
            If 颜色数量 > 150 Then 
                //发现金币了
                横向移动次数=Round(Abs(intX - 968) / 96)        		
                TracePrint "横向距离为:"&Abs(intX - 968)
                TracePrint "横向移动次数为:"&横向移动次数
                纵向移动次数 = Round(Abs(intY - 580) / 62)       		
                TracePrint "纵向距离为:"&Abs(intY - 580)
                TracePrint "纵向移动次数为:"&纵向移动次数
                If intX > 960 And intY < 580 Then 
                    //金币在原点右上方            		
                    For i = 1 To 横向移动次数
                        Call 移动(500, 600, 300)
                        Delay 50
                    Next
                    Delay 1000
                    For i = 1 To 纵向移动次数
                        Call 移动(450, 550, 250)
                        Delay 50
                    Next          		
                    //End If
                ElseIf  intX > 960 And intY = 580 then
                    //金币在原点右方
                    For i = 1 To 横向移动次数
                        Call 移动(500, 600, 300)
                        Delay 50
                    Next
                ElseIf intX > 960 And intY > 580  then
                    //金币在原点右下方
                    For i = 1 To 横向移动次数
                        Call 移动(500, 600, 300)
                        Delay 50
                    Next
                    Delay 1000
                    For i = 1 To 纵向移动次数
                        Call 移动(450, 650, 250)
                        Delay 50
                    Next
                ElseIf  intX = 960 And intY > 580 then
                    //金币在原点下方
                    For i = 1 To 纵向移动次数
                        Call 移动(450, 650, 250)
                        Delay 50
                    Next
                ElseIf intX < 960 And intY > 580  then
                    //金币在原点左下方
                    For i = 1 To 横向移动次数
                        Call 移动(400, 600, 300)
                        Delay 50
                    Next
                    Delay 1000
                    For i = 1 To 纵向移动次数
                        Call 移动(450, 650, 250)
                        Delay 50
                    Next                        
                ElseIf  intX < 960 And intY = 580 then
                    //金币在原点左方
                    For i = 1 To 横向移动次数
                        Call 移动(400, 600, 300)
                        Delay 50
                    Next
                ElseIf intX < 960 And intY < 580  then
                    //金币在原点左上方
                    For i = 1 To 横向移动次数
                        Call 移动(400, 600, 300)
                        Delay 50
                    Next
                    Delay 1000
                    For i = 1 To 纵向移动次数
                        Call 移动(450, 550, 250)
                        Delay 50
                    Next
                ElseIf intX = 960 And intY < 580  then
                    //金币在原点上方
                    For i = 1 To 纵向移动次数
                        Call 移动(450, 550, 250)
                        Delay 50
                    Next
                End If
            Else 
                //不是金币,找错了
                TracePrint "没有找到金币"
                ShowMessage "金色像素点不足150个,不是金币"
                Exit While
            End If    	
        End If
        Delay 1000
    Wend	
End Sub
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

转载请注明出处橙苏博客 » 按键精灵实战:拾取金币
分享到: 生成海报

本站接广告推广、脚本定制、付费咨询

联系微信:Saynothing2020
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活