按键精灵 - 安卓版 - 罗盘 - 八向方位模拟 - 自动寻路

Time: 2022年4月20日03:47:57 by: MemoryErHero

源码参考案例 (非最优方案,请自行测试优化,仅供学习参考)

1 . 罗盘 - 八向方位模拟 - 自动寻路 1

参数1: 目标坐标X 整数型

参数2: 目标坐标Y 整数型

参数3: 挪动间隔 整数型

Function 自动寻路_八方位向(mbx,mby,tnumber)
    Dim 识别坐标,坐标,坐标2()
    Dim 次数 = 0
    Dim x坐标 = 190
    Dim y坐标 = 193
    //(要修改,此处坐标为方向摇杆中点)  
    Do
        /*识别坐标 = int(SmartOcr(555,1159,579,1279,"CFDCE6-202020|B5C0C9-121212|8A939A-121212|9DA7AF-121212"))
        //(要修改,此处为坐标数字范围/字体颜色/字体边缘颜色)
        //坐标 = Split(识别坐标, ",")
        //坐标(0) = CLng(坐标(0))
        //坐标(1) = CLng(坐标(1)) 
        */
        坐标(0) = Int(SmartOcr(556, 1175, 581,1220,"CFDCE6-202020|B5C0C9-121212|8A939A-121212|9DA7AF-121212"))
        坐标(1) = int(SmartOcr(556,1175,581,1220,"CFDCE6-202020|B5C0C9-121212|8A939A-121212|9DA7AF-121212"))
        TracePrint 坐标(0),坐标(1)
        If 坐标2(0) = 坐标(0) and 坐标2(1) = 坐标(1) Then 
            次数 = 次数 + 1
        Else 
            次数=0
        End If
        坐标2(0) = 坐标(0)
        坐标2(1) = 坐标(1)
        If Abs(坐标(0) - mbx) <= 2 and Abs(坐标(1) - mby) <= 2 Then  
            Exit Do
        End If
        TouchDown x坐标, y坐标, 1
        If 坐标(0) > mbx and 坐标(1) > mby Then 
            '左上
            TouchMove x坐标 + 150, y坐标 - 150, 1, tnumber
        ElseIf 坐标(0) > mbx and 坐标(1) < mby Then
            '左下
            TouchMove x坐标 - 150, y坐标 - 150, 1, tnumber
        ElseIf 坐标(0) < mbx and 坐标(1) > mby Then
            '右上
            TouchMove x坐标 + 150, y坐标 + 150, 1, tnumber
        ElseIf 坐标(0) < mbx and 坐标(1) < mby Then
            '右下
            TouchMove x坐标 - 150, y坐标 + 150, 1, tnumber
        Else 
            If Abs(坐标(0) - mbx) > Abs(坐标(1) - mby) Then 
                '左右移动
                If 次数 > 2 Then 
                    If 坐标(1) > mby Then 
                        '上
                        TouchMove x坐标 + 150, y坐标, 1, tnumber
                    Else 
                        '下
                        TouchMove x坐标 - 150, y坐标, 1, tnumber
                    End If
                    次数 = 0
                Else 
                    If 坐标(0) > mbx Then 
                        '左
                        TouchMove x坐标, y坐标 - 150, 1, tnumber
                    Else 
                        '右
                        TouchMove x坐标, y坐标 + 150, 1, tnumber
                    End If
                End If
            Else 
                '上下移动
                If 次数 > 2 Then 
                    If 坐标(0) > mbx Then 
                        '左
                        TouchMove x坐标, y坐标 - 150, 1, tnumber
                    Else 
                        '右
                        TouchMove x坐标, y坐标 + 150, 1, tnumber
                    End If
                    次数 = 0
                Else 
                    If 坐标(1) > mby Then 
                        '上
                        TouchMove x坐标 + 150, y坐标, 1, tnumber
                    Else 
                        '下
                        TouchMove x坐标 - 150, y坐标, 1, tnumber
                    End If
                End If
            End If
        End If
        TouchUp 1
    Loop	
End Function


Call 自动寻路_八方位向(285,606,300)

1 . 罗盘 - 八向方位模拟 - 自动寻路 2

参数1: 目标坐标X 整数型

参数2: 目标坐标Y 整数型

参数3: 罗盘移动时间 整数型

参数4: 目的坐标误差值 整数型

参数5: 罗盘移动上限 整数型

返回值: 成功返回 true 上限返回 false 逻辑型

//Time:202242004:19:10 By:MemoryErHero
Function moveCompass(data)
    //函数名: 罗盘移动  传参类型: 数组
    //例子: dataArr = {"左下", 188, 192, 118, 261, moveTime}
    //      moveCompass(dataArr)
    TracePrint "罗盘移动:",data(0)
    Swipe data(1), data(2), data(3), data(4), data(5)
End Function

Function 自动寻路_八方位向限次(mbx, mby, moveTime, deviation, jobmax)
	/* 注释 : 精确度误差 +1左右,时间最好控制 500 毫秒以内.
	** 参数1: 目的坐标x 整数型
	** 参数2: 目的坐标y 整数型
	** 参数3: 罗盘移动时间 整数型
	** 参数4: 目的坐标误差值 整数型
	** 参数5: 罗盘移动上限 整数型
	** 返回值: 成功返回 true  上限返回 false 逻辑型
	*/
    Dim MoveArr(9)
    //按键精灵数组从0开始,方便阅读所以选用下表1位起始
    MoveArr[1] = {"左下", 188, 192, 118, 261, moveTime}
    MoveArr[2] = {"左上", 188, 192, 263, 118, moveTime}
    MoveArr[3] = {"右下", 188, 192, 117, 118, moveTime}
    MoveArr[4] = {"右下", 188, 192, 266, 265, moveTime}
	
	
    MoveArr[5] = {"下", 188, 192, 89, 191, moveTime}
    MoveArr[6] = {"上", 188, 192, 296, 191, moveTime}
    MoveArr[7] = {"左", 188, 192, 191, 298, moveTime}
    MoveArr[8] = {"右", 188, 192, 191, 90, moveTime}
		
    Dim nowX,nowY,cx1,xy1,jobNumber
    Do
        nowX = int(SmartOcr(556,1175,581,1220,"CFDCE6-202020|B5C0C9-121212|8A939A-121212|9DA7AF-121212"))
        nowY = int(SmartOcr(557,1224,578,1271, "CFDCE6-202020|B5C0C9-121212|8A939A-121212|9DA7AF-121212"))
        TracePrint "识别坐标: ",nowX,nowY	
        If Abs(mbx - nowX) <= deviation and Abs(mby - nowY) <= deviation   Then
            TracePrint"状态: 到达目的"
            自动寻路_八方位向限次 = true
            Exit Function
        Else
            jobNumber = jobNumber+1
            TracePrint "已执行: "&jobNumber&" 次"
            If jobNumber = jobmax Then 
                自动寻路_八方位向限次 = false
                Exit Function	
            End If
        End If  
        If Abs(mbx - nowX) >= 1 or Abs(mby - nowY) >= 1  Then	
            If (mbx - nowX) > 0 and (mby - nowY) > 0 Then 
                //TracePrint "右下"
                moveCompass(MoveArr[1])	
            ElseIf (mbx - nowX)<0 and (mby - nowY)<0 Then
                //TracePrint "左上"
                moveCompass(MoveArr[2])	
            ElseIf (mbx - nowX)<0 and (mby - nowY)>0 Then
                //TracePrint "右下"
                moveCompass(MoveArr[3])	
            ElseIf (mbx - nowX)>0 and (mby - nowY)<0 Then
                //TracePrint "右上"
                moveCompass(MoveArr[4])
            ElseIf (mbx - nowX)=0 and (mby - nowY)>0 Then
                //TracePrint "下"
                moveCompass(MoveArr[5])
            ElseIf (mbx - nowX)=0 and (mby - nowY)<0 Then
                //TracePrint "上"   
                moveCompass(MoveArr[6])
            ElseIf (mbx - nowX)>0 and (mby - nowY)=0 Then
                //TracePrint "左"
                moveCompass(MoveArr[7])
            ElseIf (mbx - nowX)<0 and (mby - nowY)=0 Then
                //TracePrint "右" 
                moveCompass(MoveArr[8])
            End If
        End If
    Loop   
End Function

Call 自动寻路_八方位向限次(285, 606, 300, 3, 50)

/*
Dim MoveArr(9)
Dim moveTime = 0
MoveArr[1] = {"左下", 188, 192, 118, 261, moveTime}
MoveArr[2] = {"左上", 188, 192, 263, 118, moveTime}
MoveArr[3] = {"右下", 188, 192, 117, 118, moveTime}
MoveArr[4] = {"右下", 188, 192, 266, 265, moveTime}
	
	
MoveArr[5] = {"下", 188, 192, 89, 191, moveTime}
MoveArr[6] = {"上", 188, 192, 296, 191, moveTime}
MoveArr[7] = {"左", 188, 192, 191, 298, moveTime}
MoveArr[8] = {"右", 188, 192, 191, 90, moveTime}

For index = 1 To 8
	TracePrint "序号: "&index
    For Each a In MoveArr[index]
        TracePrint a()
    Next
    TracePrint "-------------------------------"
Next
 
moveCompass (MoveArr[1])
*/
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MemroyErHero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值