微信跳一跳小游戏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的Django框架中的Context使用
Jul 15 Python
Python实现的计数排序算法示例
Nov 29 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
Python命名空间的本质和加载顺序
Dec 17 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
python scrapy重复执行实现代码详解
Dec 28 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
python可以用哪些数据库
Jun 22 Python
python math模块的基本使用教程
Jan 16 Python
使用Python解决图表与画布的间距问题
Apr 11 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
php中的时间处理
2006/10/09 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
php学习笔记之基础知识
2014/11/08 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
2009/08/04 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
python实现词法分析器
2019/01/31 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
人力资源管理专业应届生求职信
2013/09/28 职场文书
销售顾问岗位职责
2014/02/25 职场文书
违反交通法规检讨书
2014/09/10 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python