使用 Kotlin 完成 微信跳一跳 的自动找点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uglyer
V2EX    Kotlin

使用 Kotlin 完成 微信跳一跳 的自动找点

  •  
  •   uglyer 2017-12-30 12:55:12 +08:00 16497 次点击
    这是一个创建于 2842 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/uglyer/wechat_jump_ai_kotlin

    wechat_jump_ai_kotlin


    微信小游戏 跳一跳 kotlin AI 自动寻找开始跳的坐标,目标坐标.

    成果


    成果

    跳一跳


    微信小程序可以玩游戏了,我们来破解一下《跳一跳》这个官方出品的小游戏吧。

    思路


    用 usb 调试安卓手机,用 adb 截图并用鼠标测量距离,然后计算按压时间后模拟按压。

    $ adb shell input swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen) # 模拟长按 $ adb shell screencap <filename> # 保存截屏到手机 $ adb pull /sdcard/screen.png # 下载截屏文件到本地 
    1. 得到手指按的时间 t
    2. 时间 = 距离 / 速度(常量) t = L / k
    3. L = p2 - p1
    4. 获取到起始点和结束点的坐标

    源码


    开发环境:Kotlin, IetelliJ IDEA

    https://github.com/uglyer/wechat_jump_ai_kotlin

    使用方法


    1. 在电脑上下载好 adb
    2. 打开安卓手机的 usb 调试模式并授权连接的电脑
    3. 打开微信跳一跳,并点击开始
    4. Constans.kt中配置好 adb 路径与截图路径,运行
    5. 会自动识别完成跳跃

    参考


    https://github.com/easyworld/PlayJumpJumpWithMouse https://github.com/iOSDevLog/JumpJump

    第 1 条附言    2017-12-30 14:31:47 +08:00

    第 2 条附言    2017-12-30 15:02:02 +08:00
    现在主要死于其它的消息推送还有电话.
    第 3 条附言    2017-12-31 04:30:52 +08:00
    新的加入了 opencv 做图形识别,准确多了.
    40 条回复    2017-12-31 18:13:06 +08:00
    wwek
        1
    wwek  
       2017-12-30 13:09:38 +08:00   2
    补全各种语言
    exalex
        2
    exalex  
       2017-12-30 13:17:27 +08:00
    6666 安卓模拟器能否使用? 楼主测试最高多少分
    m3s
        3
    m3s  
       2017-12-30 13:19:21 +08:00 via iPhone   1
    真的是 6,我玩这个都要崩溃了
    zj299792458
        4
    zj299792458  
       2017-12-30 13:25:27 +08:00 via iPhone
    获取终点坐标是怎么做到的……
    uglyer
        5
    uglyer  
    OP
       2017-12-30 13:27:15 +08:00
    @exalex 现在 500 多分,还在训练各种情况.
    uglyer
        6
    uglyer  
    OP
       2017-12-30 13:30:04 +08:00
    @zj299792458 现在用最简单的方式,扫颜色,自动找到背景色 , 排除背景色的范围 ,除此之外第一个其它颜色就是目标点。
    没有去找图形,这样很容易死在距离特别近的位置.
    harwck
        7
    harwck  
       2017-12-30 13:33:49 +08:00 via iPhone
    666 ……回学校试试
    uglyer
        8
    uglyer  
    OP
       2017-12-30 14:16:46 +08:00
    @harwck hahahaha 快去给我点星星。
    nutting
        9
    nutting  
       2017-12-30 14:37:27 +08:00 via Android
    怎么弄呢,缺什么 iosdev 包
    uglyer
        10
    uglyer  
    OP
       2017-12-30 14:56:17 +08:00
    @nutting 重新拉取一下,更新了.
    hardman
        11
    hardman  
       2017-12-30 15:32:37 +08:00
    关键是我今天配置一天 adb 就是不行
    hardman
        12
    hardman  
       2017-12-30 15:35:08 +08:00
    adb shell 老跑错 error:device not found 各种姿势都试过了,大佬可以给个教程吗?
    cctv6
        13
    cctv6  
       2017-12-30 15:38:19 +08:00 via iPhone
    我的 python 自动找点也快完成了。。。
    hsuan
        14
    hsuan  
       2017-12-30 15:48:59 +08:00
    @hardman #12 也许你用的是 iphone
    uglyer
        15
    uglyer  
    OP
       2017-12-30 15:52:37 +08:00
    @hardman 手机打开开发者模式,允许 usb 调试.
    hardman
        16
    hardman  
       2017-12-30 15:56:46 +08:00
    @uglyer 我用的小米手机,手机打开了开发者模式允许 usb 调试
    hsuan
        17
    hsuan  
       2017-12-30 16:26:09 +08:00
    用 intellj 打开了,不知道要怎么运行
    hardman
        18
    hardman  
       2017-12-30 16:26:09 +08:00
    问题已解决:首先运行 adb 的时候不要先 adb 这样的话 adb.exe 就会占用端口号,直接进入子目录然后直接用 adb shell 命令即可
    uglyer
        19
    uglyer  
    OP
       2017-12-30 16:30:51 +08:00
    @hsuan Main.kt main 方法,run
    hardman
        20
    hardman  
       2017-12-30 16:40:37 +08:00
    @uglyer adb 路径与截图路径这个一般在哪,或者在那里配置
    hsuan
        21
    hsuan  
       2017-12-30 17:03:13 +08:00
    费了点劲总算跑起来了,但第一步都过不了? 一下就跳出屏幕去了
    uglyer
        22
    uglyer  
    OP
       2017-12-30 18:01:30 +08:00
    @hardman Constants.kt
    需要先运行游戏在打开,可以在 AI.kt 修改一下 magic number,不同的手机有所区别的,默认是 2.2,可以适当加减调整.
    uglyer
        23
    uglyer  
    OP
       2017-12-30 18:04:29 +08:00
    @hsuan 需要先运行游戏在打开,可以在 AI.kt 修改一下 magic number,不同的手机有所区别的,默认是 2.2,可以适当加减调整.
    hardman
        24
    hardman  
       2017-12-30 19:08:53 +08:00
    可惜了跑起来是蓝屏
    stardust21
        25
    stardust21  
       2017-12-30 22:01:10 +08:00
    识别不太准,不能连续加分
    stardust21
        26
    stardust21  
       2017-12-30 22:01:39 +08:00
    跑了两次,都没过 300 分。。。
    gongziya
        27
    gongziya  
       2017-12-30 22:23:18 +08:00
    识别不准确啊,每次都把分数识别成目标方块,第一步都跳不出去
    gongziya
        28
    gongziya  
       2017-12-30 22:24:58 +08:00
    @hsuan 我跟你的情况一样,他是把第一个非背景的图形(分数)识别成目标方块,所以老是跳错
    uglyer
        29
    uglyer  
    OP
       2017-12-31 02:06:13 +08:00 via Android
    @stardust21
    @gongziya
    可以适当增加一下定时时间,或者把识别错误的图贴到 issues,我处理一下。
    dangyuluo
        30
    dangyuluo  
       2017-12-31 07:52:19 +08:00
    可以试试 Harris Corner 算法,找到菱形的四个角。
    cljnnn
        31
    cljnnn  
       2017-12-31 08:17:19 +08:00 via Android
    @uglyer 一个建议。可以把屏幕前 3 分之一排除掉再识别。如果有小白点识别小白点(颜色恒定)更稳妥,还可以连续加分。
    uglyer
        32
    uglyer  
    OP
       2017-12-31 10:33:30 +08:00   1
    @dangyuluo

    @cljnnn

    现在更改了查找目标区域的方式,可以找到中心点了,查找 现在已经过滤掉高的前 200 像素,处理的时候有把图片缩放过。
    uglyer
        33
    uglyer  
    OP
       2017-12-31 11:05:39 +08:00   1
    @stardust21
    @gongziya
    快试试现在的 opencv 版本,现在跳了一千多还没死。
    mritd
        34
    mritd  
       2017-12-31 11:21:51 +08:00 via iPhone
    手撸 140 路过
    uglyer
        35
    uglyer  
    OP
       2017-12-31 11:48:18 +08:00
    @mritd 厉害了,我手撸只能 80.
    lxy42
        36
    lxy42  
       2017-12-31 12:49:01 +08:00 via Android
    我写了个 Python 的,跳到 5000 多分。重点是保证每次都跳到中心点,加分快一点
    uglyer
        37
    uglyer  
    OP
       2017-12-31 14:22:21 +08:00
    @lxy42 对的,现在我这个方式顶部不是纯色的找不到正中心,想了解一下找目标点正中心的方式。
    chenqh
        38
    chenqh  
       2017-12-31 15:45:37 +08:00 via iPhone
    为甚么感觉是个人就会 opencv 但是我不会呀
    uglyer
        39
    uglyer  
    OP
       2017-12-31 17:36:10 +08:00
    @chenqh 我也不会,现学的,这个识别还是比较简单的。
    lxy42
        40
    lxy42  
       2017-12-31 18:13:06 +08:00 via Android
    @uglyer 笨方法,一行一行扫描,排除背景像素和阴影像素,如果连续像素长度超过旗子,则认为该行是方块。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5584 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 07:52 PVG 15:52 LAX 00:52 JFK 03:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86