微信跳一跳小游戏python脚本

作者:蜗居Liu 时间:2023-07-06 10:15:15 

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脚本

更多内容大家可以参考专题《微信跳一跳》进行学习。

来源:http://blog.csdn.net/qq_22408539/article/details/78940417

标签:Python,微信,跳一跳
0
投稿

猜你喜欢

  • python实现使用遗传算法进行图片拟合

    2022-05-25 03:31:53
  • Python进程间通信之共享内存详解

    2022-01-06 05:47:10
  • 相同记录行如何取最大值

    2008-07-26 12:32:00
  • 用伪类:hover实现提示效果

    2008-05-29 12:59:00
  • 采用python实现简单QQ单用户机器人的方法

    2022-06-26 03:28:40
  • Python爬虫Requests库的使用详情

    2023-05-22 20:15:52
  • 教你快速掌握SQL语言中游标的使用技巧

    2009-01-08 16:24:00
  • pytorch加载预训练模型与自己模型不匹配的解决方案

    2023-06-17 14:22:24
  • python正则表达式之对号入座篇

    2021-03-31 17:59:55
  • Go语言映射内部实现及基础功能实战

    2024-04-27 15:39:30
  • JavaScript监听和禁用浏览器回车事件实例

    2023-10-12 01:58:16
  • Python爬虫小技巧之伪造随机的User-Agent

    2023-11-02 21:32:41
  • Pyecharts绘制可视化地球实现示例

    2021-03-18 17:18:48
  • Python Matplotlib库安装与基本作图示例

    2021-09-01 04:22:51
  • Python面向对象编程中的类和对象学习教程

    2023-08-14 06:47:30
  • ES2020让代码更优美的运算符 (?.) (??)

    2024-06-11 05:58:00
  • vue.js在标签属性中插入变量参数的方法

    2024-05-28 15:58:09
  • linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql

    2024-01-12 20:31:03
  • 13个你可能未使用过的Python特性分享

    2021-03-07 19:14:37
  • Microsoft JET Database Engine 错误 '80040e21' 所有记录中均未找到搜索关键字

    2009-08-30 13:07:00
  • asp之家 网络编程 m.aspxhome.com