这两天玩了一个微信的小游戏,想到以前的跳一跳可以通过模拟按键和截取屏幕的方式做辅助程序,所以想针对这个小游戏也做个机器人自动玩,虽然结果是失败的,但是也学到了点东西。
1.做这种小游戏机器人的关键点有两个,一个是模拟按键,一个是截取屏幕。模拟按键很简单,直接调用以下命令即可在安卓手机上任意一个坐标点击一次,部分手机记得在开发者选项里开启允许模拟点击
adb shell input tap x y
2.图像识别起初想和跳一跳一样,用adb shell来截图,但是发现这种方式速度太慢了,大概3秒一张图,跳一跳没有时间限制,而我现在玩的游戏有时间限制,所以截图速度要快,快速截图有以下几种
- 安卓手机内用APP截图,这种方式我觉得是最快的,因为可以直接把图像数据放在内存里,减少了IO,但是这种方式我自己没研究过
- PC上使用安卓模拟器,模拟器内玩游戏,然后用PC上的API截图,这种方式和第一种速度上不相上下,缺点是部分游戏不支持模拟器
- 使用局域网同屏APP,然后在PC上截图,这种方式也比较快,但是有一定的延迟,画质越高延迟越大,所以推荐可以自定义画质的同屏APP,我用过爱莫助手和AirDroid,前者画质虽然没后者好,但是延迟低且PC上不用额外安装软件,浏览器上就可以用
3.截取屏幕后,就可以根据游戏规则写算法来识别什么时候需要点击了,简单的游戏可以判断像素。复杂点的嘛。。。我也没研究过,所以不知道
4.至于为什么最后失败了,我觉得有两点
- adb shell input这种模拟点击方式不可靠,比如发送三次模拟点击,间隔300毫秒,虽然百分之90的情况都是点击了3次,但是依然有几率只会点击2次
- 对于速度要求高的游戏,同屏截图依然还是慢了
5.类似这种小游戏,还可以找到上报分数的地方拦截修改掉,或者修改游戏代码达到一些变态功能,因为这些小游戏的数据校验一般都在客户端
原文地址:https://www.cnblogs.com/Potato-Eater/p/9644151.html
时间: 2024-09-30 16:01:57