去年火了一阵子的微信小游戏"跳一跳"相信大家都玩过,要说操作也着实简单,依靠手指按压屏幕让棋子在各种方格间跳跃,所谓老少皆宜的游戏也不外乎这种,没有复杂的操作,而望着大家乐此不疲的一遍遍地刷记录的时候,那是真累啊!所以我第一个想法就是如何自动的让棋子跳呢?
  有了上面的想法,说干就干,让棋子自动跳那就是模拟屏幕按压就行了,有了这个思路结合前段时间写完的"pyapp"自动化测试框架,知道可以利用adb命令swipe来实现屏幕按压(大家可以参考我之前写的文章《python自动化测试应用-第10篇(APP测试)之adb命令》),只要掌握好按压的时间就能模拟不同的按压力度,那么接下来这个按压时间该如何确定呢?自然我们是根据两个矩形物体间的距离了,隔得远我们就需要按压时间长,反之离得近,时间就短。所以之后的重点就是如何计算出这个距离呢?我们先看一下下面这张图。
  
  准确的说我们是要得到这两个红点之间的距离,上面这张截图就是我通过程序画出的。那么这两个红点所在位置是如何找出的呢?由于之前研究过一段时间的车牌识别,知道利用opencv可以分析图片,比如将彩色图片转化成灰度图,转化成灰度图后便于我们去识别图片中各种形状,这之间用到的功能函数还有cv2.threshold(二值化),cv2.morphologyEx(图像的开,闭运算)最终我们可以将上图转化为这样。
  
  通过以上的一些逻辑运算,得到的这张图可以清楚的将我们的棋子显示出来,接下来就可以自然的计算出棋子的坐标了。同样的方式我们看下图。
  
  从这张图我们可以看到棋子和左边下一步要跳的矩形格子的边缘,正是利用这种关系我们就可以找到白色边缘,进一步分析出矩形格子的位置。这里着重说明一下下一步所跳矩形格子坐标位置我是如何分析的,同样我们还是按照轮询图片每一处坐标点的颜色,当然我们起始坐标不用从[0,0]开始,也就是可以屏蔽掉分数所在向上的位置,那么这样我们遇到的第一个坐标颜色是白色也就是为0的坐标点必然是在这个矩形范围内,那么找到这个点还没有完,因为我们要尽可能的找到矩形的中心点,因为目前我们只是找到了矩形边缘。向开篇第一张图的红点位置是如何确定到的呢?
  这里我分享一下我的方法:既然我们找到了边缘点,之后我们从边缘点向上下左右四个方向继续分别获取颜色值(当然这里我们就要在原图获取颜色了),当某个方向遇到背景色时停止,这样我们就可以分析出我们这个边缘点是在矩形格子的哪个方位(是左边,还是下边,上边或右边),以这张图的情况举例,边缘点是在左边,那么自然我们就要让边缘点向右侧移动,这个偏移量自然就是我们向右找到背景色停止的那个位置的一半,因为我们是要定位中心点。这里再说明一点为什么要确定边缘点是在矩形格子的方位呢?因为跳一跳的格子它的颜色变化很多,且颜色不固定,所以我们通过cv2的函数运算得到图3,矩形格子的边缘不一定是完全的边缘,所以我们要分析边缘与矩形实际的位置关系再确定中心点。
  好了,知道了两个坐标点,棋子的和矩形格子的,那么他们之间的距离就可以得到了。这个距离大家就可以理解成按压力度,因为他们是正比关系。比如我们得到的像素距离是600,那么我们的swipe命令最后的参数时间就是乘以2即1200毫秒。
  最后我将代码贴出来。


---------------------------------------------------------------
注:我这有个学习基地,里面有很多学习资料,感兴趣的+Q群:895817687
---------------------------------------------------------------
# -*-encoding:utf-8 -*-from __future__ import divisionimport cv2import timeimport subprocessimport hashlibimport os,shutilimport numpy as npfrom PIL import Imageimport pytesseractimport mathfrom wg_main import *loop_count=0while 1:try:loop_count+=1shot()time.sleep(1)img=cv2.imread("d:\\cp\\screenshot.png")img=cv2.resize(img,(720,1280))hsvimg=hsv(img)_colorImage=img_colorImage1=img.copy()(w1,h1,_)=img.shapedis1=ch1(img,w1,h1)dis2=ch11(img,w1,h1,dis1[0])if dis2:if abs(dis1[0]-dis2[0])>100:(color1,_,_)=hsvimg[dis1[1],dis1[0]](color2,_,_)=hsvimg[dis2[1],dis2[0]]if 110<color2<120 and (color1>125 or color1<110):dis1=dis2(color1,_,_)=hsvimg[dis1[1],dis1[0]]if color1>125 or color1<110:dis3=ch111(img,w1,h1)dis1=dis3img=gry(img)#灰度转化img=sb(img)#Sobel算子img=th2(img)#threshold算法img=mo(img)#开闭运算pi,pj=mid_position(img,_colorImage,w1,h1,dis1)middle_pos=last_mid_pos(_colorImage1,pi,pj,h1)cv2.rectangle(_colorImage,(middle_pos[0],middle_pos[1]),(middle_pos[0],middle_pos[1]),(0,0,255),4)cv2.rectangle(_colorImage,(dis1[0],dis1[1]),(dis1[0],dis1[1]),(0,0,255),4)dis=int(math.sqrt(abs(dis1[0]-middle_pos[0])**2+abs(dis1[1]-middle_pos[1])**2))dis=diss(dis)if dis<100:dis=250jump(dis)time.sleep(2)os.remove("d:\\cp\\screenshot.png")except Exception,e:print e

最后,说明一点谨此篇文章请大家以自动化测试的角度去看待,游戏玩多了伤身,用外挂玩则是伤别人的身。

Python一步步实现微信小游戏“跳一跳”外挂相关推荐

  1. 微信小游戏跳一跳外挂教程(安卓版)

    一.开始准备: 请将安卓手机的usb调试模式打开,>开发者选项>USB调试然后与电脑相连 运行环境(这里我是基于ubuntu中的python3环境) 安装程序所需要的所有包,进入到这个包链 ...

  2. python 控制鼠标点击需要100ms为什么_用 Python3 和 OpenCV 替我玩一玩微信小游戏 — 跳一跳 (这算外挂么)...

    0 瞎弄 我知道你们喜欢先看效果 手残的我,始终跳不过你们这些超过 50 分的大佬.想起最近在用 Python 学习 ML (Mechine Learning, 机器学习) ,怎么用没学会,倒是里面神 ...

  3. python自动游戏脚本_微信小游戏跳一跳的自动化脚本

    weixinhop 微信小游戏跳一跳的自动化脚本 目前没发现会跳不中的情况,大约90%的可能性会跳到中心. 注意:纯属娱乐!刷分刷多了,会被微信禁号的哦! 使用方法 准备一台 Android 手机,u ...

  4. 微信小游戏跳一跳作弊方法

    微信小游戏跳一跳作弊方法 本实现方法代码来源:https://zhuanlan.zhihu.com/p/32473340 原理粗解 微信小游戏跳一跳,本质上时一个半离线游戏,它的与服务器的通信其实是在 ...

  5. mfc使用cef源代码实现_如何获得微信小游戏跳一跳源码以及源代码组合包括哪些...

    很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇瑰网小编带大家来了解一下相关的内容吧. 源代码组合包括哪些 ...

  6. 如何拷贝工程_如何获得微信小游戏跳一跳源码以及源代码组合包括哪些

    很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇瑰网小编带大家来了解一下相关的内容吧. 源代码组合包括哪些 ...

  7. c语言小游戏跳一跳代码及注释,如何获得微信小游戏跳一跳源码以及源代码组合包括哪些...

    原标题:如何获得微信小游戏跳一跳源码以及源代码组合包括哪些 很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇 ...

  8. 用Kotlin破解Android版微信小游戏-跳一跳

    前言 微信又更新了,从更新日志上来看,似乎只是一次不痛不痒的小更新. 不过,很快就有人发现,原来微信这次搞了个大动作--在小程序里加入了小游戏.今天也是朋友圈被刷爆的缘故. 看到网上 有人弄了一个破解 ...

  9. 用Python编写微信小游戏“跳一跳”的运行脚本

    前言 更新了微信后发现了一款小游戏跳一跳,但是玩了一下午最高才达到200,每次差点破纪录后总是手抖就挂掉了,气的想要砸手机..闲来无事刷微博的时候正好看到有人分析如何编写脚本自动运行游戏破了3000多 ...

最新文章

  1. UE4_Lighting Scenarios
  2. 科大星云诗社动态20210210
  3. redis占用内存过低_使用多种数据结构优化Redis 内存占用
  4. python处理nc文件并输出_利用python如何处理nc数据详解
  5. 荣耀系统更新服务器不可用,荣耀确认系统更新方式 4月1日前发布的机型固件升级由华为负责...
  6. 【Latex】修改文章字号的几种方式
  7. 如何让你的JavaScript代码更加语义化
  8. 【紫书第六章】二叉树、欧拉图基本概念与性质
  9. 微软应用商店下载应用教程(附带power shell命令)
  10. 利用imageio将多张.jpg转.gif图片(Python3)
  11. 软件供应链安全威胁:从“奥创纪元”到“无限战争”
  12. 计算机管理里面删打印机就卡住了,windows系统无法删除打印机任务(重启打印机无效)的解决方法...
  13. usb共享远程服务器,USB Network Gate
  14. 2017年数据库技术盘点
  15. 50条字面和实际意思大不同的英语
  16. C#与PLC通信开发之三菱FX系列PLC
  17. 使用jsp实现用户注册及登录
  18. Springboot电商项目前后端搭建
  19. 【电子学会】2021年06月图形化一级 -- 奔跑的马
  20. 一起卷吧,arduino/mixly语音识别模块,10元,可以自定义,提供自制的mixly库

热门文章

  1. Sui开发人员备忘录
  2. Spark大型项目实战、Elasticsearch完整视频(百度网盘链接)
  3. 玩 Diablo3 前要会写脚本
  4. python中int() 取整
  5. matlab 四元数叉乘,四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数
  6. 两个数组根据相同id合并数组es6、原生js
  7. antd Datepick 禁选时间 (30天之内)
  8. i5-8250U 宏碁swift3_【黑苹果】宏基Acer Swift 3(SF315-51-518S)+i5-8250U+macos 10.15 efi文件下载!...
  9. 飞机机翼升力原因-流体力学
  10. 你真的了解装箱和拆箱吗?