这个代码实现的是   手动点击起点 和 终点  ,程序自动判断距离、触屏时间  完成跳跃 

 

原理(摘自项目说明页面):
1. 将手机点击到“跳一跳”小程序界面;
2. 用Adb 工具获取当前手机截图,并用adb将截图pull上来:
     adb shell screencap -p /sdcard/1.png
     adb pull /sdcard/1.png .
3. 用matplot显示截图;
4. 用鼠标点击起始点和目标位置,计算像素距离;
5. 根据像素距离,计算按压时间;
6. 用Adb工具点击屏幕蓄力一跳:
     adb shell input swipe x y x y time

 

环境准备(window7):

1. 下载 、安装 python3

2pip安装   

     cmd窗口中 进入python3根目录下的script文件夹,

     执行命令  

       

Python 跳一跳 python跳一跳小游戏设计_Image

    则Scripts文件夹下会出现一系列和pip有关的文件,其中有pip.exe
    
将pip.exe的路径也添加到环境变量PATH中
    在cmd下输入“pip”,如果能识别"pip"指令,则说明pip安装成功了

3adb驱动安装

    adb驱动下载地址:https://adb.clockworkmod.com/
    下载完后  将adb 命令 添加到系统环境变量里面

     打开CMD控制台,输入adb,出现如下界面,即为配置成功。如图:

     

Python 跳一跳 python跳一跳小游戏设计_python_02

 

4.下载源码

到这一步,我们要将源码下载到本地电脑里。

 

github地址:https://github.com/wangshub/wechat_jump_game

5.安装依赖包

跳一跳微信辅助的最终运行需要很多的Python模块,作者已经将这些所需要的模块都写在了源码中的requirements.txt中,
所以我们执行命令 pip install -r requirements.txt,即可将这些必须的模块下载下来,模块包括有matplotlib,numpy等。

 

如图,我们使用CD命令,切换到源码的下载目录,
再执行命令pip install -r requirements.txt

 

 
6.设置手机权限

将安卓手机用USB与电脑相连接,在安卓手机上打开开发者模式,并开启USB调试模式,
每种安卓手机开启的方法都不一样,
以小米 Mix2 手机为例,在设置中找到手机版本号,连续点击5次即可开启开发者模式
然后进入开发者选项打开   usb调试、usb调试(安全设置)、

如果以上操作没有任何错误,那么在CMD控制台,执行命令 adb devices可显示当前手机连接的端口号。

7.运行
在以上步骤都没有任何错误的情况下,打开微信,开启跳一跳小游戏,进入游戏主页面,
然后再打开CMD控制台,使用CD命令切换目录,切换到跳一跳辅助的源码目录下,执行命令wechat_jump_auto.py。

参数调节请打开源码目录下的config文件夹,里面有适配各种屏幕和机型的文件夹,
根据自己的分辨率或机型,点击进入相应文件夹,打开里面的config.json文件,修改参数即可。建议修改前最好备份一份。

 

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from PIL import Image
import math
import time
import os

def pull_screenshot():    定义 截取手机屏幕 并 发送截图到电脑  函数
    os.system('adb shell screencap -p /sdcard/autojump.png')  发送 截屏命令 到手机
    os.system('adb pull /sdcard/autojump.png .')              发送 拉取图片到电脑 命令

def jump(distance):                 定义 跳跃函数 形参为距离
    press_time = distance * 1.35    计算按屏幕 时间 
    press_time = int(press_time)
    cmd = 'adb shell input swipe 320 410 320 410 ' + str(press_time) 按屏幕命令
    print(cmd)
    os.system(cmd)    发送 按屏幕命令

fig = plt.figure()    创建一个图像对象(窗口) 
index = 0
cor = [0, 0]

pull_screenshot()   执行截屏函数
img = np.array(Image.open('autojump.png'))  Image.open读取图片  到名为 img 的图片数组

update = True 
click_count = 0
cor = []

def update_data():  定义更新数据的函数  更新图片
    return np.array(Image.open('autojump.png'))

im = plt.imshow(img, animated=True)      im = 绘制图像(数组名、动画=打开)


def updatefig(*args):      定义动画函数
    global update
    if update:
        time.sleep(1.5)
        pull_screenshot()
        im.set_array(update_data())
        update = False
    return im,

def onClick(event):         定义 鼠标点击 处理函数
    global update    
    global ix, iy
    global click_count
    global cor

    # next screenshot
    
    ix, iy = event.xdata, event.ydata 
    coords = []
    coords.append((ix, iy))         [(x1,y1)|(x2,y2)]
    print('now = ', coords)
    cor.append(coords)              [[(x1,y1)],[(x2,y2)]]
    

    click_count += 1
    if click_count > 1:
        click_count = 0
        
        cor1 = cor.pop()      [(x2,y2)]
        cor2 = cor.pop()      [(x1,y1)]

        distance = (cor1[0][0] - cor2[0][0])**2 + (cor1[0][1] - cor2[0][1])**2 
 x2 - x1                           y2 - y1      
        distance = distance ** 0.5
        print('distance = ', distance)
        jump(distance)
        update = True
        


fig.canvas.mpl_connect('button_press_event', onClick)  鼠标点击 处理函数 onClick  
ani = animation.FuncAnimation(fig, updatefig, interval=50, blit=True)
              图像函数    动画函数    更新频率50ms    更新所有点
plt.show()   显示图像

 

运行结果:

python wechat_jump_py3.py

 

Python 跳一跳 python跳一跳小游戏设计_安卓手机_03

第一行 发送截图
   2       第一次鼠标点击  生成坐标
   3       第二次鼠标点击  生成坐标
   4        计算距离
   5         发送点击屏幕命令  swipe后面四个参数是    (滑动起点 x   y     滑动终点   x   y      滑动用时
 
第一次点击

 

Python 跳一跳 python跳一跳小游戏设计_python_04

 

第二次点击

Python 跳一跳 python跳一跳小游戏设计_Image_05