用 Lua 实现微信跳一跳辅助

开发环境

电脑:Windows 或 Mac
软件:Lua 编辑器、抓色器(可以在官网下载)
手机:触动精灵(iOS 或者安卓都可以)

工作原理

抓色器远程连接手机截图,找到坐标点和颜色值,作业部落上有使用教程。(https://www.zybuluo.com/miniknife/note/629913)。
通过 Lua 实现模拟点击

网上分享的帖子不管是 python 还是其他语言基本都是安卓平台的,其实 iOS 也可以用 Lua 模拟点击实现跳一跳自动辅助。
前提是你的 iPhone 越狱了。

步骤:

  • 安装抓色器(用来截图取点)
  • 越狱手机添加源:apt.touchsprite.com,安装触动精灵
  • 在手机上截取跳一跳界面,也可以用抓色器远程截图:打开触动更多界面的局域网广播开关,手机和电脑在同一局域网就可以
  • 在抓色器上打开截图,鼠标放到小人的底部中心点,同时按下 CTRL 和鼠标,在周围也取两个点
    抓色器
  • 生成代码,插入到下面的代码中(可以用触动精灵的编辑器,远程调试比较方便)
  • 编辑器设备标签页搜索连接设备(也要在同一个局域网),打开脚本点击远程运行(需要提前进入游戏界面)


    编辑器

代码:

local screenWidth, screenHeight= getScreenSize();--获取屏幕分辨率
local distanceTimeRate = 1.15--按压时间与距离的系数,数字越大表示蓄力时间越长,当前为 6P 的系数local
local targetPositionOffset = screenHeight * 0.012--表示方块最上方的点,距离中心点的偏移

function Touch(x, y, millsSecond)
    touchDown(x, y)
    mSleep(millsSecond)
    touchUp(x, y)
end

function main()
--  dialog("请在3秒内打开游戏,并点击开始按钮", 0);
    mSleep(1000)
    DoLoop()
end

function DoLoop()
    while true do 
        keepScreen(true);  
        if DoJump() == false then
            keepScreen(false); 
            break
        end
        keepScreen(false); 
        mSleep(2000)
    end
end

function DoJump() 
    local x, y = GetCalcSelfPosition()
    if x == -1 or x == 0 then
        return false
    end
    local endX = screenWidth-3  -- 1080 1920
    local endY = screenHeight * 0.7
    local startX = 0
    local startY = screenHeight * 0.2

    if x < screenWidth / 2 then
        startX =  screenWidth / 2
    else
        endX = screenWidth / 2
    end
    
    local targetX, targetY = GetTargetPosition(startX, startY, endX, endY)
    local distance = math.sqrt( (x - targetX) * (x - targetX) + (y - targetY) * (y - targetY) )
    local pressTime = CalcHoldTime(distance)
    Touch(100,100, pressTime)
    return true
end

function GetCalcSelfPosition()
    x,y = findMultiColorInRegionFuzzy( 0x373860, "-2|-214|0x34353d,-42|-2|0x2b2b49,40|-4|0x393550", 98, 0, 0, screenWidth, screenHeight) -- 6p
--  x,y = findMultiColorInRegionFuzzy( 0x38365e, "-16|-6|0x35335a,13|-5|0x39375f", 98, 0, 0, screenWidth, screenHeight)
    return x, y
end

function GetTargetPosition(startX, startY, endX, endY)
    local step = 3
    local r, g, b, rr, gg, bb 
    for y = startY , endY, step do
        r, g, b = getColorRGB(1, y)
        for x = startX, endX , step do
            rr, gg, bb  = getColorRGB(x, y)
            if isColor(r, g, b, rr, gg, bb, 98)  then
                r = rr
                g = gg
                b = bb
            else
                return x, y + targetPositionOffset
            end
        end
    end
    return -1, -1
end

function isColor(rr, gg, bb, r, g, b ,s) 
    local fl,abs = math.floor,math.abs
    s = fl(0xff*(100-s)*0.01)
    if abs(r-rr)<s and abs(g-gg)<s and abs(b-bb)<s then
        return true
    end
    return false
end

function CalcHoldTime(distance)
    return distance * distanceTimeRate
end

main()

如果脚本跑的并不准确,可以修改参数
distanceTimeRate:数字越大表示蓄力时间越长
targetPositionOffset:表示方块最上方的点,距离中心点的偏移
如果还是不行的话,那就算了吧...

思路

  1. 确定自己的当前位置
    直接查找像素就可以了
  2. 确定目标点位置
    可以通过自己当前的位置判断一个大致的范围。
    然后通过从左上,到右下角,依次遍历像素。找到方块最上方的像素点。
    然后把y + 上一个大概的值来确定。
  3. 距离与时间转换
    游戏的公式是线性的,直接乘以系数就可以了

需要优化的点

  1. 并没有去精确的识别位置
  2. sleep 函数并不精确,需要一个更加精确的方式来控制
  3. 不同分辨率的屏幕,并没有做完美的适配,需要各自截图取小人底部的坐标
  4. 距离时间的比率,不应该粗暴的用一个值去控制,应该用两个值去分别乘以x,y的距离,然后再算距离(这得看游戏画面本身的屏幕适配是如何做的)
  5. 性能差的机型,跑得并不稳定(我用红米2,跑了大概10次,最高跑到2000多分,最低只跑了几百分),这有一部分是因为“优化点 1”导致的。

本文源码和原理参考自知乎 xtutu

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,999评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,102评论 1 302
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,709评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,439评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,846评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,881评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,062评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,783评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,517评论 1 248
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,762评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,241评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,236评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,145评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,941评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,965评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,802评论 2 275

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,217评论 0 17
  • 摘要 家庭一般都是拨号上网,只有一个人能用网络资源,家里的其他成员就不能用网络资源,为了让每个成员都能用网络资源,...
    smallBear阅读 4,643评论 1 4
  • 我们可以把因特网看成由许多主干网络组成,而这些主干网络由一些国际的、国家的和地区的ISP来运营。主干网通过一些连接...
    Zhang21阅读 3,022评论 0 6
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,589评论 25 707
  • 我参加了草莓的品叔战队,每周要写一篇拆书笔记(RIA)。 我大部分时候是提前写好,在规定期限发上,但有几次,因为遗...
    花儿的书房阅读 88评论 0 0