借鉴:  一百行代码实现微信跳一跳

之前需要安装adb

开启服务:

adb nodaemon server

显示设备:

adb devices

代码:

import math

import os

import tempfile

import time

from functools import reduce

from PIL import Image

BACKGROUND_POS = (, )

DISTANCE_TO_TIME_RATIO = 1.35

SCREENSHOT_PATH = tempfile.gettempdir() + "/screenshot.png"

def calculate_jump_distance():

    im = Image.open(SCREENSHOT_PATH)

    background_rgb = im.getpixel(BACKGROUND_POS)

    role_pos_list = None

    vertex1_pos = None

    block_background_rgb = None

    vertex2_pos = None

    role_line_flag = True

    for y in range(BACKGROUND_POS[], im.height):

        if role_pos_list and role_line_flag:

            break

        role_line_flag = True

        vertex2_line_flag = True

        for x in range(BACKGROUND_POS[], im.width):

            current_rgb = im.getpixel((x, y))

            next_rgb = im.getpixel((x + , y)) if x +  < im.width else (, , )

            # 识别顶点1

            if x > BACKGROUND_POS[] and y > BACKGROUND_POS[] and not vertex1_pos 

                    and not is_similar(background_rgb, current_rgb) and is_similar(current_rgb, next_rgb):

                vertex1_pos = (x, y)

                block_background_rgb = current_rgb

            # 识别顶点2

            if block_background_rgb and vertex2_line_flag and is_similar(current_rgb, block_background_rgb, ):

                vertex2_line_flag = False

                if vertex2_pos:

                    if x < vertex2_pos[] and vertex2_pos[] - x <  and y - vertex2_pos[] < :

                        vertex2_pos = (x, y)

                else:

                    vertex2_pos = (x, y)

            # 识别小人

            if is_part_of_role(current_rgb):

                if role_line_flag:

                    role_pos_list = []

                    role_line_flag = False

                role_pos_list.append((x, y))

    if len(role_pos_list) == :

        raise Exception('无法识别小人位置!!!')

    pos_sum = reduce((lambda o1, o2: (o1[] + o2[], o1[] + o2[])), role_pos_list)

    role_pos = (int(pos_sum[] / len(role_pos_list)), int(pos_sum[] / len(role_pos_list)))

    destination_pos = (vertex1_pos[], vertex2_pos[])

    return int(linear_distance(role_pos, destination_pos))

def is_part_of_role(rgb):

    return  < rgb[] <  and  < rgb[] <  and  < rgb[] < 

def linear_distance(xy1, xy2):

    return math.sqrt(pow(xy1[] - xy2[], ) + pow(xy1[] - xy2[], ))

def is_similar(rgb1, rgb2, degree=):

    return abs(rgb1[] - rgb2[]) <= degree and abs(rgb1[] - rgb2[]) <= degree and abs(rgb1[] - rgb2[]) <= degree

def screenshot():

    os.system("adb shell screencap -p /mnt/sdcard/screencap.png")

    os.system("adb pull /mnt/sdcard/screencap.png {} >> {}/jump.out".format(SCREENSHOT_PATH, tempfile.gettempdir()))

def jump(touch_time):

    os.system("adb shell input swipe 0 0 0 0 {}".format(touch_time))

def distance2time(distance):

    return int(distance * DISTANCE_TO_TIME_RATIO)

if __name__ == '__main__':

    count = 

    while True:

        screenshot()

        distance = calculate_jump_distance()

        touch_time = distance2time(distance)

        jump(touch_time)

        print("#{}: distance={}, time={}".format(count, distance, touch_time))

        count += 

        time.sleep()

python链接安卓 跳一跳的更多相关文章

  1. python如何玩“跳一跳”!(windows安桌版本请进!)

    最近"跳一跳",很火爆,有木有? 看了一下网上的教程,动作搭建了一下环境,就可以用脚本自动跑起来啦!!! 下面说一下android手机的实现过程: 首先,是python环境的搭建 ...

  2. 利用Python玩微信跳一跳

    创建python项目jump_weixin,新建python程序jump.py 需要4个辅助文件[adb.exe,AdbWinApi.dll,AdbWinUsbApi.dll,fastboot.exe ...

  3. 【辅助工具】Python实现微信跳一跳

    最近迷上了微信跳一跳小游戏,正好也看到知乎上有大神分享了技术贴,我也参考了好多资料,原理就是通过abd命令截取图片,python计算两个点距离,然后转化按压时间,让电脑来完成游戏.我花了很长时间才把程 ...

  4. Python操作微信跳一跳

    “跳一跳”这个东西还是今天刚接触到的,看到了python群中有人再问“微信跳一跳的外挂有人写了没”,“早就有了”,“github”,“等着出个更详细的教程教程没看懂,主要没有用过adb”. 不过没关系 ...

  5. Python版本微信跳一跳,软件配置

    一.安装python3的环境: 直接从python官方网站下载python3的安装包,直接安装. 记得将python3放到PATH环境变量中,安装的过程中在该配置地方打钩就可以了. 如果安装的过程中出 ...

  6. 使用python编写微信跳一跳的自动脚本

    实现思路: 调用adb命令,截图 寻找小小人的底部中心点role(从下到上扫描,直到找到小小人相同像素的点,至于小小人像素点rgb是什么,可以使用photoshop查看) 寻找棋盘最高点top,然后寻 ...

  7. Python 帮你玩微信跳一跳 GitHub Python脚本

    前言想自己搞游戏小程序的 在github 有人已经利用 python程序, 通过adb 获取不同型号安卓手机的系统截图,然后通过计算小人与目标位置距离之后得到准确的触摸时间,再通过 开发者模式里的 a ...

  8. PYTHON 实现的微信跳一跳【辅助工具】仅作学习

    备注原地址:https://my.oschina.net/anlve/blog/1604163 我又做了一些优化,防止WX检测作弊 准备环境: Windows 10安卓手机,源码中有适配ios,然后链 ...

  9. 微信跳一跳Python辅助无需配置一键操作

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8350329.html 邮箱:moyi@moyib ...

随机推荐

  1. # js设置键名和键值de坑

    js设置键名和键值 let obj1 = {'jifeng': 60, 'lilu': 59, 'hongyan': 51, 'donghan': 4, 'liudan': 18, 'liuhaiya ...

  2. 在vue中import()语法不能传入变量

    解决办法: 一定要用变量的时候,可以通过字符串模板来提供部分信息给webpack:例如import(`./path/${myFile}`), 这样编译时会编译所有./path下的模块,但运行时确定my ...

  3. 【DB2】普通用户最小查询权限分配

    1. 通过实例用户或者有dbadm权限的用户连接数据库 db2 connect to <db-name> 2. 分配普通用户连接权限db2 "grant connect on d ...

  4. Java学习之路(二):Java中的方法

    Java中的方法 概念: 为什么要有方法: 提高代码的复用性 什么是方法: 完成特定功能的代码块 格式: 修饰符 返回值类型 方法名(参数){ 方法体语句: return 返回值: } 1.修饰符:例 ...

  5. JS支持正则表达式的 String 对象的方法

    注意:本文中所有方法的 RegExp 类型的参数,其实都支持传入 String 类型的参数,JS会直接进行字符串匹配. (相当于用一个简单的非全局正则表达式进行匹配,但字符串并没有转换成 RegExp ...

  6. vue 坑之 vuex requires a Promise polyfill in this browser

    android内嵌H5页面不显示出现这个问题,原因有很多 首先,别急,请看下面的推荐方案: 1.找个Android真机测试下(机型版本为4.4以上),真机联调测试 Android 只需要四个步骤: 1 ...

  7. KVC、KVO实现过程

    1.KVC的实现过程 以 [object setValue:@"134567" forKey:@"uid"];为例子,来探究KVC的实现过程 第一步:搜索1.首 ...

  8. maven配置编译器的版本

    发现每次启动idea时,项目里很多红色错误,都是的编译器版本不对,每次都要手动修改. 其实在pom里把默认编译器版本加进去就好了. <build> <plugins> < ...

  9. 从 JDK 源码角度看 Object

    Java的Object是所有其他类的父类,从继承的层次来看它就是最顶层根,所以它也是唯一一个没有父类的类.它包含了对象常用的一些方法,比如getClass.hashCode.equals.clone. ...

  10. WPF简单的数据库查询

    做一个简单WPF连接数据库的 控件类型和名称:DataGrid:dataGrid          Button1  :Button1              Button:   Button2   ...