微信跳一跳小游戏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的汉字转GBK码实现代码
Feb 19 Python
常见python正则用法的简单实例
Jun 21 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
2020/01/08 Python
python 获取计算机的网卡信息
2021/02/18 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
GWT都有什么特性
2016/12/02 面试题
销售人员中英文自荐信
2013/09/22 职场文书
大学班级计划书
2014/04/29 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
美丽的大脚观后感
2015/06/03 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python
Mysql数据库命令大全
2021/05/26 MySQL
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
尝试使用Python爬取城市租房信息
2022/04/12 Python