微信跳一跳。。。。

周末没什么事做看到网上做的外挂也想试试,做的没有大神效果好,但是也勉强比一般人玩的好那么一点点,最高纪录2560,一般就只有1500左右。记录下我的学习过程。

首先我介绍一下我用到的东西

一台安装ubuntu电脑,使用的是python3.6环境,eclipse编写程序

一个Android手机,屏幕分辨率 1080×1920 这个会影响到识别距离以及点击跳跃时间,

从最初的环境搭建开始

>> lsusb     

显示电脑usb连接设备


Bus 001 Device 006: ID 12d1:107e Huawei Technologies Co., Ltd. 

找到你手机对应的设备如上,


>> sudo vi /etc/udev/rules.d/51-android.rules

新建文件51-android.rules将ID 12d1    107e 数字填入下面的对应位置,保存

SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="107e", MODE="0666"

接下来输入以下的命令

>> udevadm control --reload

重新加载51-android.rules配置文件

>> sudo apt-get install android-tools-adb

首先安装adb,如果已经安装就不用再安装了;

>> adb kill-server

关闭adb服务,然后重新启动,确保可以识别到你的手机
>> sudo adb start-server


>> adb devices
显示到该这样的就说明配置好了
ThinkPad-Edge:~$ adb devices
List of devices attached 
CKL4C16C03001052 device

试试截屏功能
>> adb shell
HWBLN-H:/:/ $ screencap /sdcard/1.png
HWBLN-H:/:/ $ exit
adb pull /sdcard/1.png ./phonephoto/

没有问题就可以看看我的代码,随便写写大神请轻点喷!!!


play.py文件如下

import os
import time
import image_recongnize as imgre


while(1):
    os.system('adb shell screencap /sdcard/1.png') #获取截图
    os.system('adb pull /sdcard/1.png ./Myphoto/') #保存截图到电脑
    time1 = imgre.image1()*1.35  #获取跳跃距离
    os.system('adb shell input swipe 500 1000 500 1000 %d'%(time1))  #点击按钮, time1点击时长
    time.sleep(2) #延时2s


image_recongnize.py文件简单的对三通道像素进行分解,然后划分阈值,if语句到底。。。。。简单粗暴,适合玩耍

import numpy as np
from PIL import Image
from skimage import draw
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
from math import sqrt


def image1():
    img=Image.open('./Myphoto/1.png') #打开图片
    pix = img.load() #获取像素值
    width = img.size[0]
    height = img.size[1]
    image2 = []
    flag = 0
    me_X = 0
    me_Y = 0
    black = [1000,1000]
    black1 = [1000,1000]
    r1,g1,b1,a = pix[100,650]
    for x in range(850):
        for y in range(750):
            r,g,b,a = pix[x+100, +650+y];
            if r==58 and g==54 and b==81 :#获取小人坐标
                image2.append(255)
                me_X = x;
                me_Y = y;
            else:
                image2.append(0)
    for x in range(850): #获取下一次跳跃坐标
        for y in range(me_Y ):
            r,g,b,a = pix[x+100, +650+y];
            if r1-20<r<r1+20 and g1-20<g<g1+20 and b1-20 < b < b1+20:
                 image2[750*x+y] = 0        
            else:
                image2[750*x+y] = 150 
                if r==245 and g==245 and b==245: #如果出现小白点就一小白点位置为下次跳跃目标
                    if black1[1]>y:
                        black1[0]=x
                        black1[1]=y
                        flag=1
                else:
                    if black[1]>y and abs(x-me_X)>150: #以最高非背景像素为参考对象
                        black[0]=x
                        black[1]=y
    me_X = me_X-35

    if (abs(black1[0] - me_X )<100) and flag == 1:

flag = 0
    if(flag==1): 
        black[1] = black1[1];
        black[0] = black1[0];
    else:
        black[1] = black[1]+50;
        
#     image2= np.reshape(image2,[850,750])  #输出处理后图片
#     plt.figure("screencapr")
#     rr, cc=draw.circle(me_X,me_Y,20)
#     draw.set_color(image2,[rr,cc],122)
#     rr, cc=draw.circle(black[0],black[1],20)
#     draw.set_color(image2,[rr,cc],233)
#     plt.imshow(image2.T, cmap ='gray')
#     plt.show()
    distance = sqrt((me_X-black[0])*(me_X-black[0])+(me_Y-black[1])*(me_Y-black[1]))
    print(distance) #输出距离
    return distance
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值