用Python实现跳一跳自动跳跃
经由前两期的介绍,对于「跳一跳」自动化的实现,基本差不多了。
本期就来完整的跑一遍,快乐学习。
1. OpenCV:模板匹配。 获得小跳棋中心位置
2. OpenCV:边缘检测。 获得下一方块中心位置
Python+ADB+OpenCv,实现「跳一跳」自动化。
/ 01 / ADB
ADB工具即Android Debug Bridge(安卓调试桥) tools。
ADB是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。
与之前小F接触过的Appium有点相似。
ADB的安装很简单,就是将安装包解压后,将路径添加到系统的环境变量中即可。
然后使用Python的os模块执行ADB命令。
def get_screenshot():
# 截取手机的屏幕
os.system('adb shell /system/bin/screencap -p /sdcard/screencap.png')
# 把模拟器里面的文件或文件夹传到电脑上
os.system('adb pull /sdcard/screencap.png screencap.png')
def jump(distance):
# 设置按压时间,系数为1.35
press_time = int(distance * 1.35)
# 生成随机手机屏幕模拟触摸点,防止成绩无效
# 生成随机整数(0-9),最终数值为(0-90)
rand = random.randint(0, 9) * 10
# adb长按操作,即在手机屏幕上((320-410),(410-500))坐标处长按press_time毫秒
cmd = ('adb shell input swipe %i %i %i %i ' + str(press_time)) % (320 + rand, 410 + rand, 320 + rand, 410 + rand)
# 输出adb命令
print(cmd)
# 执行adb命令
os.system(cmd)
本次涉及到的ADB命令,就只有三个,不多。
一个截屏,一个推送手机截图到电脑上,最后模拟长按手机屏幕。
/ 02 / 跳动实现
先检测游戏结束画面。
判断是否需要结束游戏程序。
# 游戏结束的模板图像
temp_end = cv2.imread('end.jpg', 0)
def game_over(img):
"""
模板匹配,检测是否要将程序结束
"""
# 如果在游戏截图中匹配到带"再玩一局"字样的模板,则循环中止
res_end = cv2.matchTemplate(img, temp_end, cv2.TM_CCOEFF_NORMED)
if cv2.minMaxLoc(res_end)[1] > 0.95:
print('Game over!')
return True
模板匹配原理图如下。
当返回的最大矩阵值大于0.95时,则认为原始图像中肯定出现了再玩一局字样。
则游戏结束,程序也随之结束。
小跳棋的模板匹配代码如下。
主要是获取小跳棋的位置,即「跳一跳」起点位置参数。
# 读取小跳棋模板图像
temple = cv2.imread('temple.png', 0)
# 获取小跳棋模板图像的高和宽
th, tw = temple.shape[:2]
def 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(result)
# 得到小跳棋的中心位置参数
return max_loc[0] + 47, max_loc[1] + 208
得到结果如下。
下面通过OpenCV的边缘检测获取「跳一跳」的终点位置。
def get_end(img):
"""
边缘检测,获取跳一跳终点的位置参数(方块)
"""
# 高斯模糊
img_rgb = cv2.GaussianBlur(img, (5, 5), 0)
# 边缘检测
canny_img = cv2.Canny(img_rgb, 1, 10)
# 获得边缘检测图像的高和宽
H, W = canny_img.shape
# 第一个顶点的高度
y_top = np.nonzero([max(row) for row in canny_img[400:]])[0][0] + 400
# 第一个顶点的宽度
x_top = int(np.mean(np.nonzero(canny_img[y_top])))
# 跳过小白圈,然后遍历
y_bottom = y_top + 80
for row in range(y_bottom, H):
if canny_img[row, x_top] != 0:
y_bottom = row
break
# 得到方块的中心点
x_center, y_center = x_top, (y_top + y_bottom) // 2
return x_center, y_center
边缘检测原理图如下。
最后便是主程序啦。
# 循环直到游戏失败结束
for i in range(10000):
# 将安卓手机上的截图移到电脑当前文件夹下
get_screenshot()
# 读取截图图像
img = cv2.imread('screencap.png', 0)
# 游戏结束
if game_over(img):
break
# 得到起点位置参数
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)
# 计算起点和终点的直线距离,勾三股四弦五
distance = (x_start - x_end) ** 2 + (y_start - y_end) ** 2
distance = distance ** 0.5
# 根据获得的距离来设置按压时长
jump(distance)
time.sleep(1.3)
下面就来看一下「跳一跳」自动跳跃的视频。
https://v.qq.com/x/page/e0887dhjvux.html
轻轻松松得分,毫无问题。
/ 03 / 总结
相关工具及代码已上传网盘,公众号回复「跳一跳」即可获取。
安装好ADB工具,然后通过数据线将安卓手机和电脑连接。
最后运行代码,亲测有效。
当然代码还是有待优化的,如下图~
一方面是得分不高,另一方面就是会被检测到作弊...
所以还有待改进呢!!!
用Python实现跳一跳自动跳跃相关推荐
- 跳一跳python源码_使用Python实现跳一跳自动跳跃功能
使用Python实现跳一跳自动跳跃功能 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 使用Python实现跳一跳自动跳跃功能.txt ] (友情提示:右键点上行 ...
- python编程跳一跳_使用Python实现跳一跳自动跳跃功能
1. OpenCV:模板匹配. 获得小跳棋中心位置 2. OpenCV:边缘检测. 获得下一方块中心位置 Python+ADB+OpenCv,实现「 跳一跳 」自动化. / 01 ...
- 用Python实现跳一跳自动跳跃。
转发文章最多的朋友可以免费进入价值99元的<湾区AI精英会>海归圈子 经由前两期的介绍,对于「跳一跳」自动化的实现,基本差不多了. 本期就来完整的跑一遍,快乐学习. 1. OpenCV: ...
- python微信跳一跳小游戏刷分
iOS #python 微信跳一跳小游戏刷分 首先我们安装Facebook的WebDriverAgent,这是一款新的iOS移动测试框架 在GitHub上找到https://github.com/fa ...
- 跳一跳python开挂_用Python玩跳一跳小游戏,我能开挂
原标题:用Python玩跳一跳小游戏,我能开挂 对很多人来说,可能是已经过时的游戏,对于Python刚入门来说,却是一个非常值得学习的项目. 我们收集了很多有关python入门的项目案例,包含了相应的 ...
- python玩转android_如何用python玩跳一跳 ?(安卓版)
微信小程序的游戏相信大家都很爱玩,用手机方便而且玩起来简单.其实,我们也可以用python来玩跳一跳,一起试试吧~ 以win10系统+安卓手机为例 第一步.安装python2.7 默认安装到C盘就行 ...
- 易语言上 微信跳一跳 自动跳 思路分析
现在跳一跳已经没有以前这么火了 而且乱七八糟的检测机制也让很多玩家流失. 加上现在的辅助层出不穷 就连玩个跳一跳都要开挂 太过分了. 现在我们就简单分析这个在易语言上怎么 写一个 跳一跳 自动跳的小程 ...
- Python微信跳一跳自动化脚本
Python微信跳一跳自动化脚本 前言 准备 模块及版本 思路与流程 详细步骤 总结 前言 这是我在CSDN上的第一篇文章,以后会陆续记录我的学习生涯,希望我的知识能帮助到更多的朋友~ 准备 这篇将详 ...
- 微信跳一跳java实现自动跳_微信跳一跳自动连跳挂java源码
火凤下载吧小编为大家带来了微信跳一跳自动连跳挂java源码分享哦,可以快速帮您在游戏中获得高分,而且还不会被系统检查到,是大家在玩微信小游戏跳一跳时候的最佳助手哦,有想要体验的亲们就来下载吧! 微信跳 ...
最新文章
- 遮挡人脸检测--Detecting Masked Faces in the Wild with LLE-CNNs
- 基于UDP客户端服务器的编程模型-linux网络编程
- java.lang.NoClassDefFoundError: hudson/tasks/Mailer$UserProperty
- java递归解决百元百鸡_JS计算输出100元钱买100只鸡问题的解决方法
- Socket.Receive 无法预知字节长度的数据接收
- android 仿QQ手机版
- Bootstrap 标签页Tab插件使用方法
- [知识整理]Linux系统WIFI知识的一些整理
- 【HDU 5965】扫雷【线性递推】
- 统计字符串中汉字的个数,字符串中字符自然排序
- 生成base64二维码带logo
- Tomcat 下载、安装与配置
- 计算机考研各省份学校,想考研究生,哪个省份的高校更容易考上?
- java短语音聊天室_实现一个简单的语音聊天室(多人语音聊天系统)
- 瀑布模型、快速原型模型、螺旋模型优缺点
- 如何自动生成参考文献格式
- Dubbo源码解析(一)---架构概述
- [Golang]写文件的权限定义perm
- 【Python基础】python中的re模块
- 30道python自动化测试面试题
热门文章
- linux 运行go文件路径,go程序部署到linux上运行-Go语言中文社区
- Word文档怎么删除html标签,word怎么删除一整页的两种方法
- android 自动亮屏解锁,android锁屏唤醒并解锁屏幕
- 在中国,混哪个“圈子”最有“钱”途?
- C#实现改变图片的像素
- 如何提高本地文件上传至百度云的速度_【软件推荐】满速下载软件,说出来你可能不信最高速度达到150m/s...
- 数据分析系统的设计与实现
- [Java]分布式自平衡多文件云传输
- SourceTree提交vue前端代码报错git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\
- LQ0262 棋盘放麦子【大数+亿进制】