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

来源:中文源码网    浏览: 次    日期:2019年11月5日

【下载文档:  使用Python实现跳一跳自动跳跃功能.txt 】

(友情提示:右键点上行txt文档名->目标另存为)

使用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)下面就来看一下「跳一跳」自动跳跃的视频。

轻轻松松得分,毫无问题。

/ 03 / 总结

相关工具及代码已上传网盘,公众号回复 「跳一跳」 即可获取。

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

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

当然代码还是有待优化的,如下图~

一方面是得分不高,另一方面就是会被检测到作弊...

总结

以上所述是小编给大家介绍的使用Python实现跳一跳自动跳跃功能 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对中文源码网网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

亲,试试微信扫码分享本页! *^_^*

跳一跳python源码_使用Python实现跳一跳自动跳跃功能相关推荐

  1. python编译器源码_编译python源码

    广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! 尝试通过源码自己编译 python,使用的系统是 ubuntu14.04 l ...

  2. python商城源码_自学Python才几天,就成功编写出俄罗斯方块游戏,附自学教程

    人们常说,python不适合做游戏,但我偏爱玩游戏,做不了大的,做个小的也行啊. 于是,我在自己毫无基础的条件下,用两天时间学python基础理论,再用已有的俄罗斯方块游戏源码和源文件,在我的不懈努力 ...

  3. python股票分析源码_用python开发股票自动技术分析的软件

    一.配置环境 python是个强大的工具,还有很多插件包可以用,所以完全可以考虑用python来编程实现股票的自动技术分析. 第一步就是实现股票历史数据的获取,这个有安装包TuShare可以用.首先是 ...

  4. python量化策略源码_【Python量化投资】趋向系统指标策略 ADX、DMI指标用于股票池(附源码)...

    原标题:[Python量化投资]趋向系统指标策略 ADX.DMI指标用于股票池(附源码) [什么是ADX] ADX(average directional indicator) 平均趋向指数,常用的趋 ...

  5. python自动抢微信红包源码_用Python实现微信自动化抢红包,再也不用担心抢不到红包了...

    1. 概述 刚刚收到了两个消息,一个好消息,一个坏消息. 先说好消息,好消息就是微信群里有人要发红包,开心~ 不过转念一想,前几次的红包一个都没抢到,这次???不由自主的叹了一口气 ... 过了一会, ...

  6. 如何阅读python源码_如何阅读源代码(转)

    众所周知,要想写出好的程序,除了要经常写之外,还有看看别人是怎么写的,所以读别人的程序是非常重要的:如今是个信息交换十分发达的时代,你可以轻易的就看到顶尖级选手的代码:开源事业蒸蒸日上,确实是所有程序 ...

  7. c语言跳一跳辅助源码,.NET 开发一个微信跳一跳辅助程序(附源码)

    原标题:.NET 开发一个微信跳一跳辅助程序(附源码) 来源:中国.NET研究协会 cnblogs.com/dotnet-org-cn/p/8149693.html 前言 微信更新了,出现了一个小游戏 ...

  8. 大商创小程序源码_小程序直播系统有哪些基本功能

    小程序直播系统源码能够构建出高品质的直播平台,现如今较为流行的"直播间+电商.""直播间+教育"等新型的"直播间+"等多元化的直播间方向都不 ...

  9. echarts python源码_基于Echarts的微代码开发平台SmartChart, 免费开源使用

    A platform that Connect Data to Echarts. 简介 SmartChart基于Echarts/Django的微代码开发平台,适用于任何WEB项目 简单, 敏捷, 高效 ...

最新文章

  1. 人工神经网络秒变脉冲神经网络,新技术有望开启边缘AI计算新时代
  2. CSS:超出部分省略号
  3. 【前端_js】JavaScript知识点总结
  4. C#只允许启动一个WinFrom进程
  5. 4.Winform实现控件拖动
  6. [NOI2016]区间-线段树
  7. 2017年2月20日 Random Forest Classifier
  8. tomcat(18)部署器
  9. TechWorld2021技术嘉年华,解锁“不一样”的技术盛会
  10. 音阶频率对照表_音符与频率关系对照表
  11. 奈奎斯特稳定性判据的推导
  12. TwinCAT 3 file记录日志txt文件程序
  13. 数学基础知识总结 —— 1. 常用导数公式
  14. 记一次前端优化首屏加载
  15. 乘积的极限等于极限之积
  16. 柯西分布——正态分布的兄弟
  17. java 快递项目_基于SpringBoot开发的Java快递代拿系统
  18. Docker学习笔记(2)--Docker常用命令
  19. Python turtle 绘制有趣的图形
  20. 不懂这些高并发分布式架构、分布式系统的数据一致性解决方案,你如何能找到高新互联网工作呢?强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构...

热门文章

  1. java byte 判断相等_转发收藏 | 史上最全Java面试题+面试网站推荐!(含答案)
  2. swagger报错No handler found for GET /swagger-ui.html
  3. Linux系统中fflush,sync,syncfs,fdatasync,fsync的比较
  4. spring + shiro + cas 实现sso单点登录
  5. ORACLE经常使用的命令
  6. OpenGL OBJ模型加载.
  7. 网页中图片大小类型等属性不可用
  8. 更改IE浏览器默认的源文件编辑器
  9. A Network in a Laptop: Rapid Prototyping for Software-Defined Networks
  10. 做正确的事,正确的做事