微信跳一跳小游戏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自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
Python内置函数reversed()用法分析
Mar 20 Python
详解通过API管理或定制开发ECS实例
Sep 30 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
django创建超级用户过程解析
Sep 18 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
python3实现常见的排序算法(示例代码)
Jul 04 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安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php生成rss类用法实例
2015/04/14 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
linux环境下Django的安装配置详解
2019/07/22 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
篮球赛口号
2014/06/18 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
文明单位创建材料
2014/12/24 职场文书
病危通知单
2015/04/17 职场文书
催款通知书范文
2015/04/17 职场文书
结婚堵门保证书
2015/05/08 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书