微信跳一跳小游戏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使用webbrowser浏览指定url的方法
Apr 04 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
python加载自定义词典实例
Dec 06 Python
python实现贪吃蛇游戏源码
Mar 21 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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实现MySQL更新记录的代码
2008/06/07 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
javascript replace()正则替换实现代码
2010/02/26 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
js尾调用优化的实现
2019/05/23 Javascript
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
python中执行shell的两种方法总结
2017/01/10 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
python实现图书管理系统
2018/03/12 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
iPython pylab模式启动方式
2020/04/24 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
Linux文件操作命令都有哪些
2015/02/27 面试题
材料物理专业个人求职信
2013/12/15 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
试用期转正员工自我评价
2014/09/18 职场文书