微信跳一跳小游戏python脚本


Posted in Python onJanuary 05, 2018

Python编写微信小游戏“跳一跳”的运行脚本,分享给大家。

更新了微信后发现了一款小游戏跳一跳,但是玩了一下午最高才达到200,每次差点破纪录后总是手抖就挂掉了,气的想要砸手机。闲来无事刷微博的时候正好看到有人分析如何编写脚本自动运行游戏破了3000多分,细看后觉得原理并不复杂,就索性花了一个晚上,参考大神的实现方法,在他的基础上删减了一些代码,也用Python写了个脚本。接下来进行原理和代码分析。

微信跳一跳小游戏python脚本

图1.跳一跳启动界面

原理

配置adb环境变量,在我的电脑?》属性?》高级系统设置?》环境变量?》Path上添加adb.exe所在的路径。

打开手机的usb调试模式,并连接电脑,打开跳一跳,然后通过adb工具获取当前手机截图,具体指令如下所示:

adb shell screencap -p /sdcard/1.png
adb pull /sdcard/1.png
在程序中的具体代码实现如下所示:

def screenshot():
 cmd = 'adb shell screencap -p /sdcard/1.png'
 os.system(cmd)
 cmd = 'adb pull /sdcard/1.png'
 os.system(cmd)

查找棋子的位置,通过颜色来识别棋子,通过将棋子底盘所在行的所有点的x轴坐标相加,然后取平均值获得X轴坐标,将Y轴坐标取最低点减去棋子底盘高度的一半。具体代码实现如下:

#开始查找棋子的坐标,从start_y开始据目测棋子不会位于屏幕底部1/3处
for i in range(start_y, int(height * 2 / 3)):
 for j in range(border_x, width - border_x): #删除周围空白部分,加快程序运行速度
 next_point = im[j,i]
 # 根据棋子的颜色判断,求所有点的和然后求平均值
 if (50 < next_point[0] < 60) and (53 <next_point[1] < 63) and (95 < next_point[2] < 110):
 x1_temp += j #点求和
 x1_num += 1 #点的个数
 y1_max = max(i, y1_max)

if not all((x1_temp,x1_num)):
 return 0,0,0,0
x1 = x1_temp / x1_num
y1 = y1_max - piece_height/2 # 棋子Y轴坐标上移到底盘高度的一半

查找下一个棋盘的位置,一般可以通过两种方法实现。第一种是通过鼠标点击下一个棋盘的位置,具体参考编程美丽写的博客。

第二种是本文使用的,从上往下一行一行扫描,找到块中点的X轴坐标,然后通过截图中两个具体的棋盘获取的固定的角度,即正切值来推出中点的 Y坐标。 具体代码如下:

#查找下一个棋盘的位置
for i in range(start_y, height * 2 / 3):
 start_point = im[0, i]
 if x2 or y2:
 break
 x2_temp = 0
 x2_num = 0
 for j in range(width):
 next_point = im[j,i]

 if abs(j - x1) < body_width:
 continue

 # 棋盘为圆
 if abs(next_point[0] - start_point[0]) + abs(next_point[1] - start_point[1]) + abs(next_point[2] - start_point[2]) > 10:
 x2_temp += j
 x2_num += 1
 if x2_temp:
 x2 = x2_temp / x2_num
# 按实际的角度通过tan值来算计算下一个棋盘的中心点的Y轴坐标
y2 = y1 - abs(x2 - x1) * abs(sample_y1 - sample_y2) / abs(sample_x1 - sample_x2)

if not all((x2, y2)):
 return 0, 0, 0, 0

根据棋子的位置跟下一个棋盘的位置求得两点的具体,推算出长按时间。具体代码如下:

#跳到下一个棋盘
def jump(distance):
 press_time = distance * press
 press_time = max(press_time, 200) # 设置最小的按压时间位200ms
 press_time = int(press_time)
 cmd = 'adb shell input swipe {} {} {} {} {}'.format(swipe_x1, swipe_y1, swipe_x2, swipe_y2, press_time)
 print(cmd)
 os.system(cmd)

结果展示

通过运行脚本,能够轻松上分到400+,由于时间原因并没有继续测试,下图为测试时截的动态gif,以及控制台窗口运行结果。

微信跳一跳小游戏python脚本微信跳一跳小游戏python脚本 

图2.真机运行

微信跳一跳小游戏python脚本 

图3.控制台输出信息

下载链接:跳一跳python脚本

更多内容大家可以参考专题《微信跳一跳》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python构造函数及解构函数介绍
Feb 26 Python
python获取android设备的GPS信息脚本分享
Mar 06 Python
使用Python中的greenlet包实现并发编程的入门教程
Apr 16 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
python爬虫-模拟微博登录功能
Sep 12 Python
python 遍历pd.Series的index和value
Nov 26 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
Python unittest装饰器实现原理及代码
Sep 08 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 #Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 #Python
微信跳一跳辅助python代码实现
Jan 05 #Python
使用python为mysql实现restful接口
Jan 05 #Python
微信跳一跳python代码实现
Jan 05 #Python
python+opencv轮廓检测代码解析
Jan 05 #Python
python selenium UI自动化解决验证码的4种方法
Jan 05 #Python
You might like
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
简单的js分页脚本
2009/05/21 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
JS实现多物体运动的方法详解
2018/01/23 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
python 实现dict转json并保存文件
2019/12/05 Python
Python插件机制实现详解
2020/05/04 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
护理毕业生自我鉴定
2014/02/11 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书