微信跳一跳小游戏python脚本
作者:蜗居Liu 发布时间:2023-07-06 10:15:15
Python编写微信小游戏“跳一跳”的运行脚本,分享给大家。
更新了微信后发现了一款小游戏跳一跳,但是玩了一下午最高才达到200,每次差点破纪录后总是手抖就挂掉了,气的想要砸手机。闲来无事刷微博的时候正好看到有人分析如何编写脚本自动运行游戏破了3000多分,细看后觉得原理并不复杂,就索性花了一个晚上,参考大神的实现方法,在他的基础上删减了一些代码,也用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,以及控制台窗口运行结果。
图2.真机运行
图3.控制台输出信息
下载链接:跳一跳python脚本
更多内容大家可以参考专题《微信跳一跳》进行学习。
来源:http://blog.csdn.net/qq_22408539/article/details/78940417


猜你喜欢
- 本文实例讲述了Python基于dom操作xml数据的方法。分享给大家供大家参考,具体如下:1、xml的内容为del.xml,如下<?x
- 一个else语句可以使用if语句结合起来。如果在if语句中的条件表达式解析为0或false值,那么else语句包含代码执行。el
- 一、Pyecharts简介和安装1、简介Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的
- MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。MyISAM是My
- 其实如果要去除字符串前后的空格很简单,那就是用strip(),简单方便>>> ' A BC '.strip
- 代理模式Proxy模式是一种常用的设计模式,它主要用来通过一个对象(比如B)给一个对象(比如A) 提供'代理'的方式方式访问
- 微信小程序要去哪里找?又该怎么用?秘密全在这里微信小程序正式发布 看完你也会玩小程序! 2017年1月9日,是一个值得载入互联网
- OVER的定义OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的
- 常用的代码UPDATE `表名` SET `字段名`=ceiling(rand()*500000+500000) WHERE (条件);up
- 写下这篇博客,起源于Tornado邮件群组的这个问题how to use outer variable in inner method,这里
- XMLHTTP对象及其方法------------------MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到R
- 如下所示:import urllib.requestimport urllib.parseurl = 'https://weibo.
- IT行业,技术要比学历、年龄、从业经验更为重要,技术水平直接决定就业薪资,想要学好python,首先要先了解精通Python语言基础、Pyt
- Excel是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领
- 引言所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe卷
- 前言这篇博客针对《Python OpenCV识别行人入口进出人数统计》编写代码,功能包括了入口行人识别,人数统计。代码整洁,规则,易读。应用
- 如果我们的语句为:IF NOT EXISTS(SELECT 1 FROM sys.views WHERE name='Report_
- 本系列专栏写作将采用首创的问答式写作形式,快速让你学习到 OpenCV 的初级、中级、高级知识。6. 在 Python OpenCV 针对图
- PHP从主流来看,是一门面向过程的语言,它的最大缺点就是无法实现多线程管理,其程序的执行都是从头到尾,按照逻辑一路执行下来,不可能出现分支,
- 先来看一个栗子EXPLAIN select * from employees where name > 'a';如果用