uglyer
V2EX  ›  Kotlin

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

  •  
  •   uglyer · Dec 30, 2017 · 17549 views
    This topic created in 3230 days ago, the information mentioned may be changed or developed.

    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

    Supplement 1  ·  Dec 30, 2017

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

    @cljnnn

    现在更改了查找目标区域的方式,可以找到中心点了,查找 现在已经过滤掉高的前 200 像素,处理的时候有把图片缩放过。
    uglyer
    uglyer
    OP
    Dec 31, 2017❤️1
    33
    @stardust21
    @gongziya
    快试试现在的 opencv 版本,现在跳了一千多还没死。
    mritd
    mritd
    Dec 31, 2017 via iPhone
    34
    手撸 140 路过
    uglyer
    uglyer
    OP
    Dec 31, 2017
    35
    @mritd 厉害了,我手撸只能 80.
    lxy42
    lxy42
    Dec 31, 2017 via Android
    36
    我写了个 Python 的,跳到 5000 多分。重点是保证每次都跳到中心点,加分快一点
    uglyer
    uglyer
    OP
    Dec 31, 2017
    37
    @lxy42 对的,现在我这个方式顶部不是纯色的找不到正中心,想了解一下找目标点正中心的方式。
    simple2025
    simple2025
    Dec 31, 2017 via iPhone
    38
    为甚么感觉是个人就会 opencv 但是我不会呀
    uglyer
    uglyer
    OP
    Dec 31, 2017
    39
    @chenqh 我也不会,现学的,这个识别还是比较简单的。
    lxy42
    lxy42
    Dec 31, 2017 via Android
    40
    @uglyer 笨方法,一行一行扫描,排除背景像素和阴影像素,如果连续像素长度超过旗子,则认为该行是方块。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1653 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 23:36 · PVG 07:36 · LAX 15:36 · JFK 18:36
    ♥ Do have faith in what you're doing.