V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uglyer
V2EX  ›  Kotlin

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

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

    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 各种姿势都试过了,大佬可以给个教程吗?
    cdlnls
        13
    cdlnls  
       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   ·   实用小工具   ·   5007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:56 · PVG 11:56 · LAX 19:56 · JFK 22:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.