【实现思路】大型自由开放世界的最短寻路思路,附代码与视频

项目环境

语言:按键精灵(.mq)
运行平台:Android
对象:妄想山海

大型自由开放世界的最短寻路思路的视频教程

实现思路

思路过程:

RPG游戏的寻路模式不同,可分为地图上标识和界面上标识
这次分享的时界面上标识的类型。

  • 通过搜索后显示的距离数字,进行计算最短路径。
  • 通过观察,距离数字的现实始终保持在图标的右下角,所以我们可以通过先找到图标,取得图标的坐标点后,进行偏移坐标
  • 偏移到数字的范围进行OCR识别,经过计算后即可得到最短距离。

具体代码

1.找到图标

在这里插入图片描述

  • 找到图标的方式很多,我将使用多点找色进行匹配:
    注意点:
  1. 匹配的第一个点必要比数字的 X 坐标要大(数字的上面)
  2. 并且所以的图标匹配的第一个点,都应该和数字的距离相近,不然 OCR 的范围将扩大,影响效率。
  3. 10个点最好都取满,提升准确率。

以下代码,可全屏匹配兽皮并返回匹配成功的数量:

Dim targetNumber
Dim number = Image.FindMultiColor(0,0,0,0,"383237","-2|-4|738CC6,-11|-2|BFABB2,-18|-7|363338,-12|-13|535A73,-20|-26|70717F,-26|6|CECECE,-2|-14|979796,-11|-18|717188,-8|-10|39455D",0,0.9)
targetNumber = UBOUND(number) + 1
If targetNumber >= 1 Then
    TracePrint "测试语句:目标数量"&targetNumber
    TracePrint number(0,0),number(0,1)
End If

2.偏移到数字的范围

在这里插入图片描述

  • 找到的图标后,用第一个点进行偏移,偏移到数字的左上角和右下角,然后进行 OCR 识别,将数字进行比较,保存最小的数字,同时记录是哪一个图标。

以下代码可实现上述功能:

Dim minIndex
Dim minNumber = 100
Dim OCRNumber = 100
For i= 0 to targetNumber - 1 step 1
    OCRNumber = CInt(Ocr(number(i,0)+2,number(i,1),number(i,0)-20,number(i,1)+85,"FFFFFF-303030",0.9))
    TracePrint "识别出数值:"&OCRNumber
        If OCRNumber < minNumber And OCRNumber > 0 Then 
        minNumber = OCRNumber
        minIndex = i
    End If
Next
TracePrint "最近距离图标坐标为:"&number(0,0),number(0,1)&"下标为:"&minIndex&"距离为:"&minNumber 

3.OCR识别

  • OCR 可自行写字库也可使用自带的字库,不再赘述:
  • 需要字库文件可在公众号(王菠萝包的多样空间)发送:妄想山海字库,即可获得下载链接。
SetDictEx 5, "Attachment:通用寻路数字.txt"
UseDict (5)
Dim OCRNumber = CInt(Ocr(number(i,0)+2,number(i,1),number(i,0)-20,number(i,1)+85,"FFFFFF-303030",0.9))
TracePrint "识别出数值:"&识别出数值

4.最短距离判断

  • 将最短距离的图标的做坐标赋值给变量,随后进行移动操作:
Dim moveDate(2) 
Dim stopNumber = 5
If targetNumber <> 0 Then 
    moveDate(1) = number(minIndex, 0)
    moveDate(2) = number(minIndex, 1)
End If
             
If minNumber > stopNumber And minNumber < 100 Then 
    TouchDown 1 , 397,723
    TracePrint "距离目标" & minNumber & "丈"
    TouchMove moveDate(1), moveDate(2), 1, 100
            
    TouchDown 278, 1228, 2 //疾跑
    Delay 2000
    TouchUp 2
End If     

更多交流

若还有不懂也可关注博主加入我,一起讨论技术和摸鱼,也可观看视频学习。
王菠萝的多样空间的公众号

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值