,,使用Python实现跳一跳自动跳跃功能

,,使用Python实现跳一跳自动跳跃功能

本文主要介绍利用Python实现自动跳转功能。本文通过实例和代码进行说明,非常详细,具有一定的参考价值。有需要的朋友可以参考一下。

1.OpenCV:模板匹配。获得跳棋的中心位置。

2.OpenCV:边缘检测。获取下一个方块的中心位置。

Python ADB OpenCv,实现“跳跳”自动化。

/ 01 / ADB

ADB工具是Android调试桥工具。

ADB是一个命令行窗口,用于通过计算机与模拟器或真实设备进行交互。

和小F之前接触过的Appium有点类似。

ADB安装很简单,就是安装包解压后,可以将路径添加到系统的环境变量中。

然后使用Python的os模块执行ADB命令。

def get_screenshot():

#捕捉您手机的屏幕

OS . system(' ADB shell/system/bin/screen cap-p/SD card/screen cap . png ')

#将模拟器中的文件或文件夹传输到计算机

OS . system(' ADB pull/SD card/screen cap . png screen cap . png ')

定义跳跃(距离):

#用系数1.35设定按压时间。

press_time=int(距离* 1.35)

#生成随机手机屏幕模拟触摸点,防止无效结果。

#生成一个最终值为(0-90)的随机整数(0-9)

rand=random.randint(0,9) * 10

# adb长按操作,即在手机屏幕上按下press_time毫秒((320-410),(410-500))。

cmd=('adb shell输入刷卡%i %i %i %i ' str(press_time)) % (320兰特,410兰特,320兰特,410兰特)

#输出adb命令

打印(cmd)

#执行adb命令

操作系统(cmd)

这次只涉及到三个ADB命令,不多。

截图,把手机截图推送到电脑上,最后在手机屏幕上模拟长按。

/ 02 / 跳动实现

首先,查看游戏结束画面。

判断游戏程序是否需要结束。

#游戏结束时的模板图像

temp_end=cv2.imread('end.jpg ',0)

定义游戏结束(img):

模板匹配,检查是否要结束程序'''

#如果游戏截图中匹配到带有‘再玩一局’字样的模板,则循环中止。

res_end=cv2.matchTemplate(img,temp_end,cv2。TM_CCOEFF_NORMED)

if cv2 . minmax loc(RES _ end)[1]0.95:

打印(“游戏结束!”)

返回True

模板示意图如下。

当返回的最大矩阵值大于0.95时,认为原始图像中必须出现“再玩一局”字样。

然后游戏结束,程序结束。

跳棋的模板匹配代码如下。

主要是获取小跳棋的位置,也就是“跳-跳”的起始位置参数。

#阅读小跳棋模板图像

temple=cv2.imread('temple.png ',0)

#获取小方格模板图像的高度和宽度

th,tw=temple.shape[:2]

定义get_start(img):

模板匹配,得到跳跃起点的位置参数(跳棋)“”

#使用标准相关系数进行匹配,1表示完全匹配,-1表示不匹配,0表示不相关。

result=cv2.matchTemplate(img,temple,cv2。TM_CCOEFF_NORMED)

#使用minMaxLoc函数,确定匹配结果矩阵的最大值和最小值(val)及其位置(Loc)

min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(结果)

#获取跳棋的中心位置参数。

return max_loc[0] 47,max_loc[1] 208

结果如下。

接下来,通过OpenCV的边缘检测获得“跳转”的结束位置。

定义get_end(img):

‘’边缘检测,得到跳结束的位置参数(框)。'''

#高斯模糊

img_rgb=cv2。高斯布朗(img,(5,5),0)

#边缘检测

canny_img=cv2。Canny(img_rgb,1,10)

#获取边缘检测图像的高度和宽度

h,W=canny_img.shape

#第一个顶点的高度

y_top=np .非零([max(row)for row in canny _ img[400:]])[0][0]400

#第一个顶点的宽度

x_top=int(np.mean(np .非零(canny_img[y_top]))

#跳过小白圈,然后穿过

y_bottom=y_top 80

对于范围内的行(y_bottom,H):

if canny_img[row,x_top]!=0:

y_bottom=row

破裂

#得到正方形的中心点

x_center,y_center=x_top,(y_top y_bottom) //2

返回x中心,y中心

边缘检测的原理图如下。

最后是主程序。

#循环直到游戏失败结束

对于范围内的I(10000):

#将截图从Android手机移动到您电脑的当前文件夹

get _截图()

#阅读截图

img=cv2.imread('screencap.png ',0)

#游戏结束

如果游戏结束(img):

破裂

#获取起始位置参数

x_start,y_start=get_start(img)

#获取终点位置参数

x_end,y_end=get_end(img)

#绘制起始位置,一个圆

cv2.circle(img,(x_start,y_start),10,255,-1)

#绘制结束位置,一个圆

img_end=cv2.circle(img,(x_end,y_end),10,255,-1)

#保存图片

cv2.imwrite('end.png ',img_end)

#计算起点和终点的直线距离,勾三股、四股、五股。

距离=(x _ start-x _ end)* * 2(y _ start-y _ end)* * 2

距离=距离** 0.5

#根据获得的距离设置按压时间。

跳跃(距离)

时间.睡眠(1.3)

我们来看看“跳跳”自动跳的视频。

轻松得分,没问题。

/ 03 / 总结

相关工具和代码已经上传到网盘,微信官方账号回复“跳转”即可获取。

安装ADB工具,然后通过数据线连接安卓手机和电脑。

最后运行代码,亲测有效。

当然代码还是需要优化的,如下图~

一方面分数不高,另一方面作弊会被查出来。

总结

以上就是边肖给大家介绍的用Python实现自动跳转功能的内容。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: