用python玩跳一跳

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zzpdbk/article/details/78956358

微信跳一跳被同学说是淘宝买的,委屈巴巴,jpg。为了证明清白,把实现过程写下来。

游戏人物跳跃的距离是由按压时间决定的,所以基本原理是

1.利用adb的adb shell screencap -p/**/**/的命令进行截屏

2.将截下来的图pull到电脑上

3.点击当前位置和要跳位置,计算距离

4.计算按压时间

5.模拟按压

由于我没有mac,没办法对苹果进行模拟控制,只能用adb实现对安卓手机的控制。

直接贴代码


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

os.chdir(r'C:\Users\zhu\platform-tools')    #改变当前工作路径
fig = plt.figure()
index = 0
cor = [0, 0]
pull_screenshot()
img = np.array(Image.open('1.png'))    #将图片转化为numpy的array数组
update = True
click_count = 0 #计算点击次数,需要两次
distancesave = []


def pull_screenshot():
    os.system('adb shell screencap -p /sdcard/1.png')
    os.system('adb pull /sdcard/1.png .')


def jump(distance):
    press_time = distance * 1.3    #计算按压时间,机型不同,系数不同。
    press_time = int(press_time)   #强制转化
    cmd = 'adb shell input swipe 320 410 320 410 ' + str(press_time)  # 控制按压时间。这个为滑动命令,由于滑动前后的点都为320,410.所以相当于长按一点
    print(cmd)
    os.system(cmd)   #利用adb控制手机按压
def update_data():
    return np.array(Image.open('1.png'))


im = plt.imshow(img, animated=True)


def updatefig(*args):     #更新函数
    global update
    if update:
        time.sleep(1)     #停一秒
        pull_screenshot()
        im.set_array(update_data())
        update = False
    return im,


def onClick(event):
    global update
    global ix, iy
    global click_count
    global distancesave

    # next screenshot

    ix, iy = event.xdata, event.ydata  #记录点击的坐标
    coords = []
    coords.append((ix, iy)) 
    cor.append(coords)  #添加坐标到列表中

    click_count += 1 
    if click_count > 1:  #点击两下才开始工作
        click_count = 0  #清零

        cor1 = distancesave.pop() #取出坐标
        cor2 = distancesave.pop()

        distance = (cor1[0][0] - cor2[0][0]) ** 2 + (cor1[0][1] - cor2[0][1]) ** 2  
        distance = distance ** 0.5  #计算坐标距离

        #print
        #'distance = ', distance
        jump(distance)
        update = True


fig.canvas.mpl_connect('button_press_event', onClick)
ani = animation.FuncAnimation(fig, updatefig, interval=50, blit=True) 
plt.show()
有大佬已写出自动运行程序,可以在github查找。






            

没有更多推荐了,返回首页