返回
辅助工具让跳一跳成为微信最热门的小游戏
前端
2023-10-27 23:59:56
玩两把微信刚出的跳一跳小游戏后,笔者身作为一个前端开发,就有了辅助的实现思路,结合Node和Android知识来一波儿。这个辅助开发的时间还算早,后来网上也出现了更牛的辅助(自动识别物体计算距离),实现思路都差不多,具体可以参见年前29号(微信的6.6.1也是当天更新的) 发的推文。
作为前端,我们肯定是不需要开发Android原生的,所以思路是通过ADB命令来控制手机,辅助功能的大部分逻辑都在Node.js里实现。
以下是辅助实现的基本原理:
- 手机截屏并将图像传到电脑
- Node.js读取图片,识别并计算出物体中心坐标
- 通过ADB发送tap命令,控制手机点击
整体的流程图如下:
[图片]
以下是详细的实现过程:
1. 截屏
安卓6.0开始,提供了截图到SD卡的功能,我们只需要发送ADB命令即可:
adb shell screencap -p /sdcard/screen.png
2. 图片读取
图片读取使用的是Node.js的gm库,可以很方便的进行图像处理:
var gm = require('gm').subClass({imageMagick: true});
gm('/sdcard/screen.png').size(function(err, size) {
console.log(size);
});
3. 物体识别
物体识别使用的是开源库node-opencv,先对图片进行二值化处理,再进行轮廓识别,最后找到最大的轮廓,并计算出中心坐标:
var cv = require('opencv');
cv.readImage('/sdcard/screen.png', function(err, im) {
if (err) throw err;
im.threshold(127, 255, function(err) {
if (err) throw err;
im.findContours(function(err, contours) {
if (err) throw err;
var biggestContour = 0;
for (var i = 0; i < contours.length; i++) {
if (contours[i].area() > contours[biggestContour].area()) {
biggestContour = i;
}
}
var moments = cv.moments(contours[biggestContour]);
var centerX = moments.m10 / moments.m00;
var centerY = moments.m01 / moments.m00;
console.log(centerX, centerY);
});
});
});
4. ADB发送tap命令
adb shell input tap X Y
其中X和Y是点击的坐标,可以通过3中计算得到。
完整代码
[代码]
使用这个辅助工具,可以更容易的玩微信跳一跳小游戏,提升自己的分数,成为朋友圈中的大神。