【C++】逻辑配合LUA实现自动答题(微信小程序通杀)
本帖最后由 wushaominkk 于 2018-4-27 17:48 编辑首先声明:
1、此源码为原创源码,相信吾爱的大神们见多识广。
2、本源码基本上通杀微信上判断类的游戏,如判断加减、判断数字大小,通关免费拿礼品的。(需要修改部分源码)
3、由于微信小程序上的基本上都是套路,越来越快,除非修改内存,所以即使是脚本秒回答+100%正确,也不一定通关。但是平均3把通关一次是没有问题的。
接下来,就让我详细地将源码+翻译+思路全部发出来。
首先说说原理:
通过对屏幕的识别,使用自己的字库,读取屏幕上的文字,再将文字通过判断,来选择按正确的按钮还是错误的按钮。
难点如下:效率。微信小程序对效率讲究极高,是必须回答这道题过后,才会出现下一道题,所以没办法预判。
源码如下:
local ocr, msg = createOCR({
type = "tesseract",
})
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
init("0",0)
setScreenScale(1080,1920)
local qq = 1 --全局变量,用于判断画面是否改变
for i = 1, 100 do --模仿continue,跳过本次循环
while true do
local texta5 = Mytext(492,489,594,568)
if qq ~= texta5 then --如果捕获到的画面与上次内容不同
qq = texta5--赋值给全局变量
local texta = Mytext(204,750,471,944) --第一个数字
local texta3 = Mytext(608,765,930,951) --第二个数字
local texta4 = Mytext(303,961,779,1162) --结果
if getColor(544,818) == 0xffffff then --判断是加号还是减号
local result = texta + texta3
if(string.find(texta4,result) ~= nil) then --判断读取到的字符串是否包含正确答案
touchDown(0,318,1652)
mSleep(10)
touchUp(0,318,1652)
break
else
touchDown(0,815,1623)
mSleep(10)
touchUp(0,815,1623)
break
end
else
local result = texta - texta3
if(string.find(texta4,"-")) then --判断如果是减号,答案是否含有负号
if result >= 0 then --正确结果>0,却有负号,说明这道题答案是错的
touchDown(0,815,1623)
mSleep(10)
touchUp(0,815,1623)
break
else
touchDown(0,318,1652)
mSleep(10)
touchUp(0,318,1652)
break
end
end
if(string.find(texta4,result) ~= nil) then --判断读取到的字符串是否包含正确答案
touchDown(0,318,1652)
mSleep(10)
touchUp(0,318,1652)
break
else
touchDown(0,815,1623)
mSleep(10)
touchUp(0,815,1623)
break
end
end
else
break
end
end
end
微信小程序界面:
成品效果:https://pan.baidu.com/s/1R9LHt07BpixBBhUZxXqXxA?from=timeline
首先,为了效率:
1、LUA不能进行大范围的读取屏幕,否则影响效率。
2、由于脚本非商用,所以去掉了所有不该有的判断,只留下主方法。(大幅度提高效率)
3、【重点】读取到的字符串可能还有未知字符串,即使读取到的数字是3,但是获取到的长度却是4,据大神透露这是正常的。(即使是空白),所以用 local a = b这种方法是完全不行的。
4、为了少读取一块区域,因此在判断是加号还是减号,直接判断减号上面有没有白色的点,如果有,那么他就是加号,没有就是减号!(判断点比判断区域效率提高很多!)
5、源码中的texta4是包含等号的所有结果。比如图中6+5,lua脚本读取到的结果为:【=13】,而非13,。并且如果再把等号去掉进行比较,效率又会降低,所以使用find方法,直接在字符串中查找字符串!特殊情况就是1和-1这种区别,所以需要判断是否大于0.如果结果大于0,正确答案却含有负号,则直接是错的!
6、texta5读取的区域是【第1题】。可以根据屏幕的变化自己设定。texta5的作用涉及到C++的逻辑,下面会讲!
7、除了按钮以外坚决不用sleep!(sleep是最影响效率的!)
C++逻辑如下:【重点】
1、LUA是没有类似于continue这种函数(死循环中跳过本次循环),所以得自己实现continue。我这里用的方法是在死循环外面再套一个循环,即可实现:死循环中跳过本次循环!就是在while外面嵌套一个for循环。
2、由于效率的原因,如果用texta5的方法进行每次屏幕对比,效率可想而知。但是为了屏幕的变化,又必须保存(总不可能保存缓存吧!)在这里,我用了C++的逻辑,即中间变量(源码当中为qq)。qq为全局变量,当texta5读取到字符串过后,会将读取的字符串保存到qq上,当下次再循环的时候,如果qq等于texta5,则屏幕没有变化,否则,屏幕变化了!(原创吧属于,网络上的源码是读取屏幕色块,两种原理完全不同。)
其他:
1、为什么要判断屏幕是否变化?
答:如果不判断的话无法保存按钮的正确率。自己拿源码测一遍就可以了哦~
2、不能用orc接口,本地判断永远效率大于网络,这里我用的是LUA自带的一种字库~
再次申明:本份源码稍微修改即可通杀所有判断类微信小程序,如判断加减、判断数字大小等~
大家最关心的问题,怎么使用lua脚本在手机运行?(教程来啦)
安卓手机需要root!用于调试
1、首先需要下载2个工具。下载地址:http://dev.xxzhushou.cn/userIndex.html(网址就像微软的一个下载集合一样,不用上传百度云吧)
下载:叉叉集成开发环境 、 叉叉开发助手。
2、电脑、手机都安装过后,打开,将手机与电脑通过叉叉集成开发环境连接(同一个wifi下即可,具体可以看教程)
3、就和易语言、VS一样了,新建项目,在main里面复制我的代码,直接运行即可。(一般不用调试,用运行~) 正在打包脚本,请稍候
开始运行脚本...
发送信息完毕...
运行已停止
错误信息: :5: '=' expected near 'local'
报错~~~
stack traceback:
:-1: in function ''
:-1: in function 'require'
:2: in main chunk
:-1: in function 'require'
:1: in main chunk main.lua:45: attempt to perform arithmetic on local 'texta' (a string value)
stack traceback:
main.lua:45: in main chunk
local vars: ocr=msg='3.02.02',Mytext=<func>,qq=''
:-1: in function 'require'
:1: in main chunk
27关挂,试了10多次 楼主有心了,还录制个小视频!支持一个!{:1_921:} 头脑王者可以用吗 zhk1985 发表于 2018-4-19 19:23
头脑王者可以用吗
头脑王者应该用不了这个 不错,有时间看看 JackDx 发表于 2018-4-20 11:27
正在打包脚本,请稍候
开始运行脚本...
发送信息完毕...
原封不动复制进去不会报错啊,你看下是不是复制少了 不错,收藏一下。 本来我想写这个的...我是想通过在电脑上开模拟器,在电脑上运行微信小程序.然后通过截屏,然后用算法将图片进行分割,处理和识别,然后在电脑计算运行结果,再手动点击. . 这个加减那个数子,利用向量对比识别应该可以 mr清扬 发表于 2018-4-27 17:07
本来我想写这个的...我是想通过在电脑上开模拟器,在电脑上运行微信小程序.然后通过截屏,然后用算法将图片进 ...
这样太麻烦了
页:
[1]
2