本文将梳理github上最火的wechat_jump_game的实现思路,并解析其图像处理部分源码
首先废话少说先看效果
核心思想
获取棋子到下一个方块的中心点的距离
计算触摸屏幕的时间
点击屏幕
重要方法
计算棋子到下一个方块中心点的距离
使用 adb shell screencap -p 命令获取手机当前屏幕画面
再通过图像上的信息找出棋子的坐标和下一个方块中心点的坐标
然后通过两点间距离公式计算出距离
计算触摸屏幕的时间
T=A * S
其中S为上步算出的像素距离,T为按压时间(ms),A为一个系数这个系数会随着屏幕分辨率的变化而变化,在1920*1080的屏幕下这个系数为1.35,在2560*1440的屏幕下这个系数为1.475
点击屏幕
adb shell input swipe x y x y time(ms)
这条命令能够点击手机屏幕x,y位置time(ms)
图像处理部分源码解析
图像处理部分代码都在 find_piece_and_board(im) 方法中
通过输入的图像im计算出棋子的坐标点以及下一个方块中心的坐标点
在find_piece_and_board的方法中一进来就是下面的两个嵌套在一起的for循环:
for i in range(int(h / 3), int(h * 2 / 3), 50):</