微信跳一跳小游戏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之for循环语句
Oct 02 Python
分享Python文本生成二维码实例
Jan 06 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
Python搭建Spark分布式集群环境
Jul 05 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
Python list与NumPy array 区分详解
Nov 06 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
Python借助with语句实现代码段只执行有限次
Mar 23 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
在数据量大(超过10万)的情况下
2007/01/15 PHP
php采集速度探究总结(原创)
2008/04/18 PHP
php array_slice函数的使用以及参数详解
2008/08/30 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
JS实现div居中示例
2014/04/17 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python版DDOS攻击脚本
2019/06/12 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
汽车专业毕业生自荐信
2013/11/03 职场文书
高中毕业自我鉴定
2013/12/13 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
罚款通知怎么写
2015/04/22 职场文书
家长会开场白和结束语
2015/05/29 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang