狂暴补师亚丝娜 发表于 2018-11-6 11:55

QQ炫舞手游传统模式自动按键原理及源码

本帖最后由 狂暴补师亚丝娜 于 2018-11-6 13:03 编辑

首先,声明:
1、本写法为亚丝娜原创,暂且不知道市面上的QQ炫舞自动按键的写法是否与我相同。据我所知写法是不同的,传统炫舞脚本是找色。
2、目前叉叉助手和金手指均有QQ炫舞手游的自动按键脚本等,为了不破坏市场,不公布自动按空格的写法。


原理:
自己制作字库然后识别字库,读取屏幕上的信息,识别过后遍历进行按键。

成品效果:
链接:https://pan.baidu.com/s/1eOo0wu8fLMCe56jqV-gFew
提取码:jgmo

第一点:
制作字库。
制作字库的具体教程如下:https://www.zybuluo.com/xxzhushou/note/807167


具体是这样制作的。
首先在PS上写下:【↑↓←→】,然后选择字体(微软雅黑,其他字体也可以,只要看起来和游戏里面的一样就可以了)。接下来使用jTessBoxEditor工具修正。我源码里面是识别到 【↑】就是s,【↓】就是x....然后再生成字库即可。


源码代码如下(已加注释):
适用分辨率:1080*1920(我手机是一加5)



local ocr, msg = createOCR({
                type = "tesseract", -- 指定tesseract引擎
                path = "res/", -- 使用开发助手/叉叉助手的扩展字库
                lang = "num" -- 使用英文增强字库(注意需要提前下载好)
      })

local function Mytext(a,b,c,d) --获取屏幕上的文字,a,b,c,d是对应的坐标
      if ocr ~= nil then
                local rect = {a,b,c,d}
                local diff = {"0xffffff-0x0f0f0f"}
                local code, text = ocr:getText({
                              rect = rect,
                              diff = diff
                        })
                if code == 0 then
                        return text --返回读取的字符串
                end
      end
end

function tap(x, y)
      touchDown(0, x, y);
      mSleep(100);
      touchUp(0, x, y);
end
local is_ok = 0
init("0",1)
setScreenScale(1080,1920)
local text = string.match(Mytext(583,652,1299,729),"%s*(.-)%s*$") --将待按的按钮去除特殊字符后存入文本框
--sysLog(text)
local t,t1,t2 = 0

while true do
      x, y = findColor({861, 654, 1025, 729},
                "0|0|0xfcffff",
                95, 0, 0, 0)
      --sysLog(x)
      if x > -1then--判断当前是否需要按键
               
                local texta = string.match(Mytext(498,648,1144,723),"%s*(.-)%s*$")--将待按的按钮去除特殊字符后存入文本框
                --sysLog(texta)
               
                local k=string.len(texta)--判断当前有多少个按键
                --sysLog("k:"..k)
                local list1={} --数组,用于将待按下的按钮存入
                for i=1,k do
                        list1=string.sub(texta,i,i) --将读取的按键存入数组
                end
                for i=1,k do --遍历数组
                        if (string.find(list1,"z") ~= nil) then --如果是左
                              tap(1413,717)
                        end
                        if (string.find(list1,"y") ~= nil) then --如果是右
                              tap(1724,683)
                        end
                        if (string.find(list1,"x") ~= nil) then--如果是下
                              tap(1554,844)
                        end
                        if (string.find(list1,"s") ~= nil) then--如果是上
                              tap(1590,556)
                        end
                end
      
      end
end



以上,就通过识别字库,完成了对QQ炫舞手游的自动按键。



推荐大家学习LUA(安卓/ios)端的脚本开发,可以到叉叉开发者平台去学习。
网址:http://dev.xxzhushou.cn/


这个应该不算广告或者推广,和windows一样提供开发者手册一样的。


以上引用如果违规,版主删除即可。只是告诉大家一个学习的平台。


最后:
编程是一种思想,只要了解原理,自己就能写出来。比如QQ炫舞脚本,我的想法就是识别字库!!!!


最后的最后:
我是狂暴补师亚丝娜,请帮我寻找黑衣剑士桐人,请告诉我他我在吾爱等他,谢谢大家!

狂暴补师亚丝娜 发表于 2018-11-6 12:01

艾莉希雅 发表于 2018-11-6 11:59
破坏市场可还行……此时一位PC端QQ炫舞前玩家路过

:lol哈哈哈哈哈哈,就不要破坏手游脚本市场啦

狂暴补师亚丝娜 发表于 2018-11-6 15:19

六哥。 发表于 2018-11-6 14:21
黑衣剑士桐人没找到,找到了一个差不多的,黑人。。。你要不将就一下?

哈哈哈哈哈哈哈

艾莉希雅 发表于 2018-11-6 11:59

破坏市场可还行……此时一位PC端QQ炫舞前玩家路过

willgoon 发表于 2018-11-6 12:23

这游戏现在还有人玩吗???

xiaopeng206 发表于 2018-11-6 12:25

楼主我帮你找到桐人了:keai

狂暴补师亚丝娜 发表于 2018-11-6 12:37

xiaopeng206 发表于 2018-11-6 12:25
楼主我帮你找到桐人了

在哪呢????

17826616063 发表于 2018-11-6 12:50

请问大佬又蜂窝的cf手游脚本吗?求分享

滨州IT疯子 发表于 2018-11-6 13:02

顶大佬大佬的思路很棒

苏紫方璇 发表于 2018-11-6 13:10

桐人没找到,我找到了你的本子{:1_1:}

LightSylcanus 发表于 2018-11-6 13:11

狂暴补师亚丝娜 发表于 2018-11-6 12:37
在哪呢????

我來了{:1_892:}
页: [1] 2
查看完整版本: QQ炫舞手游传统模式自动按键原理及源码