【辅助工具】用Python代码实现微信跳一跳,再忍不住了

in #programming7 years ago

最近迷上了微信跳一跳小游戏,正好也看到知乎上有大神分享了技术贴,我也参考了好多资料,原理就是通过abd命令截取图片,python计算两个点距离,然后转化按压时间,让电脑来完成游戏。我花了很长时间才把程序跑起来,作为一名技术小白我谈谈自己的认识,尽量让大家少走弯路。

准备工具

  • abd驱动
  • 安卓手机
  • 打开手机调试模式
  • usb线连接好手机与电脑

1.首先需要安装adb这里是下载地址点击这里;

这里是对adb的解释(https://baike.baidu.com/item/ADB/840725?fr=aladdin)

2.安装好之后将安装路径配置到环境变量中:(注意:路径后加 英文格式的;号,例如D:\adb;)

快速配置环境:新建 environmen.txt ,内容如下:


backports.functools-lru-cache==1.4
cycler==0.10.0
matplotlib==2.1.1
numpy==1.13.3
olefile==0.44
opencv-python==3.4.0.12
Pillow==4.3.0
pyparsing==2.2.0
python-dateutil==2.6.1
pytz==2017.3
six==1.11.0

python install -r environmen.txt 即可

或者直接在abd所在的文件夹shift右键打开cmd

在cmd窗口中输入abd

然后有一些库需要提前下载好:matplotlib, PIL, numpy

我之前下载的anaconda自带这些库

获取手机截图:

os.system('adb shell screencap -p /sdcard/screen.png')#手机获取实时截图
os.system('adb pull /sdcard/screen.png')#PC端获取截图

通过numpy转化成多维数组进行图片绘制:

numpy.array(PIL.Image.open('screen.png'))

3.github 大神的 代码下载 再次感谢分享

下载解压即可。

4.新建python文件wechat.py,写入一下代码


# -*- coding: utf-8 -*-
import os
import time
import numpy,PIL
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

need_update = True

def get_screen_image():
    os.system('adb shell screencap -p /sdcard/screen.png')
    os.system('adb pull /sdcard/screen.png')
    return numpy.array(PIL.Image.open('screen.png'))

def jump(point1, point2):
    x1, y1 = point1; x2, y2 = point2
    dis = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
    os.system('adb shell input swipe 320 410 320 410 {}'.format(int(dis * 1.35)))#抓包获取(坐标、1.35是单位按压时间)

def on_click(event, coor = []):#点击事件的坐标位置
    coor.append((event.xdata, event.ydata))
    if len(coor) == 2:#单击2次开始计算
        jump(coor.pop(), coor.pop())
    need_update = True

def update_screen(frame):
    global need_update
    if need_update:
        time.sleep(1)
        axes_image.set_array(get_screen_image())#更新图片
        need_ipdate = False
    return axes_image,

figure = plt.figure()#创建空白对象
axes_image = plt.imshow(get_screen_image(), animated = True)#把获取的图片画在坐标轴
figure.canvas.mpl_connect('button_press_event', on_click)#单击回调函数(传递的是对象不是参数!!)
ani = FuncAnimation(figure, update_screen, interval = 50, blit = True) #刷新图片、时间50ms
plt.show()
  • 用adb连接手机

    1. 通过usb
      把手机通过usb接上pc,打开手机USB调试,传输模式选MTP。
      可通过cmd打开adb.exe所在目录输入 adb devices 查看是否有设备已连接。
      如果adb并没有连接上手机,于是下载了android驱动程序(驱动精灵等软件就能下载),安装了, 就好了。
    2. 通过wifi
      adb connect 192.168.1.100
      其中192.168.1.100为手机的ip(需要在手机信息里面查找),如果连接成功, 就可以进入android的shell了。
  • 打开微信跳一跳,点击开始游戏

  • 用cmd打开至wechat.py所在目录,输入 python wechat.py 运行wechat.py

 业余爱好,不足之处请不吝指正,欢迎留言交流!

提示:(别搞太高分,适可而止,小心被封号就尴尬了...)

大家看完不要忘了点波关注哦~~~~~

Sort:  

看起来挺有意思的!

看了不会系列,哈哈

厉害了,有机会用用,已mark

不错,有前途:D