微信跳一跳小游戏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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
python中使用序列的方法
Aug 03 Python
基于Python实现文件大小输出
Jan 11 Python
python 写入csv乱码问题解决方法
Oct 23 Python
用Python设计一个经典小游戏
May 15 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python读取图片任意范围区域
Jan 23 Python
浅谈python中get pass用法
Mar 19 Python
解决python 上传图片限制格式问题
Oct 30 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
IDLE下Python文件编辑和运行操作
Apr 25 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 select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
深入理解ES6中let和闭包
2018/02/22 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
用实例说明python的*args和**kwargs用法
2013/11/01 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
Python中print和return的作用及区别解析
2019/05/05 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
介绍一下except的用法和作用
2015/01/22 面试题
一份恶作剧的检讨书
2014/09/13 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
东京审判观后感
2015/06/01 职场文书
好员工观后感
2015/06/17 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
2016年五一促销广告语
2016/01/28 职场文书
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android