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

2017-12-30 12:55:12 +08:00
 uglyer

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

15874 次点击
所在节点    Kotlin
40 条回复
hsuan
2017-12-30 17:03:13 +08:00
费了点劲总算跑起来了,但第一步都过不了? 一下就跳出屏幕去了
uglyer
2017-12-30 18:01:30 +08:00
@hardman Constants.kt
需要先运行游戏在打开,可以在 AI.kt 修改一下 magic number,不同的手机有所区别的,默认是 2.2,可以适当加减调整.
uglyer
2017-12-30 18:04:29 +08:00
@hsuan 需要先运行游戏在打开,可以在 AI.kt 修改一下 magic number,不同的手机有所区别的,默认是 2.2,可以适当加减调整.
hardman
2017-12-30 19:08:53 +08:00
可惜了跑起来是蓝屏
stardust21
2017-12-30 22:01:10 +08:00
识别不太准,不能连续加分
stardust21
2017-12-30 22:01:39 +08:00
跑了两次,都没过 300 分。。。
gongziya
2017-12-30 22:23:18 +08:00
识别不准确啊,每次都把分数识别成目标方块,第一步都跳不出去
gongziya
2017-12-30 22:24:58 +08:00
@hsuan 我跟你的情况一样,他是把第一个非背景的图形(分数)识别成目标方块,所以老是跳错
uglyer
2017-12-31 02:06:13 +08:00
@stardust21
@gongziya
可以适当增加一下定时时间,或者把识别错误的图贴到 issues,我处理一下。
dangyuluo
2017-12-31 07:52:19 +08:00
可以试试 Harris Corner 算法,找到菱形的四个角。
cljnnn
2017-12-31 08:17:19 +08:00
@uglyer 一个建议。可以把屏幕前 3 分之一排除掉再识别。如果有小白点识别小白点(颜色恒定)更稳妥,还可以连续加分。
uglyer
2017-12-31 10:33:30 +08:00
@dangyuluo

@cljnnn

现在更改了查找目标区域的方式,可以找到中心点了,查找 现在已经过滤掉高的前 200 像素,处理的时候有把图片缩放过。
uglyer
2017-12-31 11:05:39 +08:00
@stardust21
@gongziya
快试试现在的 opencv 版本,现在跳了一千多还没死。
mritd
2017-12-31 11:21:51 +08:00
手撸 140 路过
uglyer
2017-12-31 11:48:18 +08:00
@mritd 厉害了,我手撸只能 80.
lxy42
2017-12-31 12:49:01 +08:00
我写了个 Python 的,跳到 5000 多分。重点是保证每次都跳到中心点,加分快一点
uglyer
2017-12-31 14:22:21 +08:00
@lxy42 对的,现在我这个方式顶部不是纯色的找不到正中心,想了解一下找目标点正中心的方式。
chenqh
2017-12-31 15:45:37 +08:00
为甚么感觉是个人就会 opencv 但是我不会呀
uglyer
2017-12-31 17:36:10 +08:00
@chenqh 我也不会,现学的,这个识别还是比较简单的。
lxy42
2017-12-31 18:13:06 +08:00
@uglyer 笨方法,一行一行扫描,排除背景像素和阴影像素,如果连续像素长度超过旗子,则认为该行是方块。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/418831

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX