微信跳一跳python代码实现

yizhihongxing

下面是详细讲解“微信跳一跳Python代码实现”的完整攻略。

简介

"微信跳一跳" 是一款由腾讯推出的小程序游戏,用手指按住屏幕弹跳到下一级并收集积分。

本攻略将介绍如何使用 Python 代码实现自动跳一跳。

准备工作

在开始编写代码之前,需要先做好以下准备工作:

  1. 安卓模拟器
  2. ADB 工具
  3. Python 3.x 环境
  4. 相关 Python 库

实现步骤

步骤一:打开微信跳一跳

先把安卓模拟器启动,并打开微信跳一跳小程序。

步骤二:截取屏幕并找到下一个跳板的中心点

使用 ADB 工具截取屏幕并找到下一个跳板的中心点。在命令行中输入:

adb shell screencap -p /sdcard/screen.png && adb pull /sdcard/screen.png

这样就可以把当前屏幕截图到本地。

接下来就可以用 Python 的 Pillow 库来找到下一个跳板的中心点。代码示例如下:

import os
import time
import numpy as np
from PIL import Image

def find_target(image_path):
    im = np.array(Image.open(image_path))
    # 下一个跳板的最上部分的y坐标
    y_top = im.shape[0] * 4 // 5
    # 下一个跳板的最左部分的x坐标
    x_left = im.shape[1] // 2
    # 下一个跳板的最右部分的x坐标
    x_right = im.shape[1] // 2
    # 在下一个跳板的y方向上搜索白色像素点
    while im[y_top, x_left] != 255 or im[y_top, x_right] != 255:
        y_top -= 1
    # 在下一个跳板的x方向上搜索白色像素点
    while im[y_top, x_left] == 255 and im[y_top, x_right] == 255:
        x_left -= 1
        x_right += 1
    # 返回下一个跳板的中心点坐标
    return (x_left + x_right) // 2, y_top - 140

步骤三:计算距离并设置按压时间

在找到了目标点的中心坐标之后,我们就可以通过计算距离来确定鼠标需要按压的时间了。代码示例如下:

def get_press_time(current, target):
    # 小人的起跳点x坐标固定
    base_distance = 500
    # 计算当前位置和目标位置之间的距离
    distance = np.sqrt(np.sum(np.square(np.array(current) - np.array(target))))
    # 根据两者之间的距离计算需要按压的时间,系数可以适当调整
    time = distance * 2.18
    return time

步骤四:模拟按压动作

得到按压时间之后,我们就可以使用 ADB 工具来模拟按压动作了。代码示例如下:

def do_swipe(distance):
    # 点击屏幕并按住一段时间
    press_time = int(distance)
    cmd = 'adb shell input swipe 500 500 500 500 ' + str(press_time)
    os.system(cmd)

到这里,整个自动跳一跳的代码已经实现好了,可以将以上几个函数组合起来,然后循环调用它们来自动跳一跳了。完整代码示例如下:

import os
import time
import numpy as np
from PIL import Image

def find_target(image_path):
    im = np.array(Image.open(image_path))
    # 下一个跳板的最上部分的y坐标
    y_top = im.shape[0] * 4 // 5
    # 下一个跳板的最左部分的x坐标
    x_left = im.shape[1] // 2
    # 下一个跳板的最右部分的x坐标
    x_right = im.shape[1] // 2
    # 在下一个跳板的y方向上搜索白色像素点
    while im[y_top, x_left] != 255 or im[y_top, x_right] != 255:
        y_top -= 1
    # 在下一个跳板的x方向上搜索白色像素点
    while im[y_top, x_left] == 255 and im[y_top, x_right] == 255:
        x_left -= 1
        x_right += 1
    # 返回下一个跳板的中心点坐标
    return (x_left + x_right) // 2, y_top - 140

def get_press_time(current, target):
    # 小人的起跳点x坐标固定
    base_distance = 500
    # 计算当前位置和目标位置之间的距离
    distance = np.sqrt(np.sum(np.square(np.array(current) - np.array(target))))
    # 根据两者之间的距离计算需要按压的时间,系数可以适当调整
    time = distance * 2.18
    return time

def do_swipe(distance):
    # 点击屏幕并按住一段时间
    press_time = int(distance)
    cmd = 'adb shell input swipe 500 500 500 500 ' + str(press_time)
    os.system(cmd)

def main():
    while True:
        os.system('adb shell screencap -p /sdcard/screen.png && adb pull /sdcard/screen.png')
        target = find_target('./screen.png')
        current = (500, 1250)
        distance = get_press_time(current, target)
        do_swipe(distance)
        time.sleep(1)

if __name__ == '__main__':
    main()

示例说明

使用以上代码可以实现自动跳一跳,可以用于刷分或者调试游戏。如有需要可以根据实际情况进行适当的调整。

例如,可以在跳完一次之后截屏保存跳板位置,然后在下一次跳之前通过读取之前的跳板位置来做跳板定位,避免每次都重复找跳板的过程。

另外,根据不同的屏幕分辨率,需要根据情况对一些常量进行适当的调整,例如距离系数、小人位置等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信跳一跳python代码实现 - Python技术站

(1)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python if else语句嵌套实例说明

    在Python中,if语句可以嵌套,这允许您编写更复杂的条件语句。if语句的嵌套语法与其他编程语言非常相似,即在一个if语句块内嵌套另一个if语句块。 以下是一个示例: age = 20 if age > 18: print("成年人") if age > 21: print("可以购买酒精饮料") eli…

    2023年2月15日
    00
  • Stem 作为 python tor 客户端 – 卡在加载描述符上

    【问题标题】:Stem as python tor client – stuck on loading descriptorsStem 作为 python tor 客户端 – 卡在加载描述符上 【发布时间】:2023-04-02 18:26:01 【问题描述】: 我正在尝试使用 python stem 连接到 tor,同时尝试连接(使用修改后的示例)它只是无…

    Python开发 2023年4月8日
    00
  • python正则表达式去掉数字中的逗号(python正则匹配逗号)

    以下是“Python正则表达式去掉数字中的逗号(python正则匹配逗号)”的完整攻略: 一、问题描述 在Python中,我们有时需要去掉数字中的逗号,以便进行数值计算或其他操作。本文将详细讲解如何使用正则表达式去掉数字中的逗号,以及如何在实际开发中应用。 二、解决方案 2.1 去掉数字中的逗号 在Python中,我们可以使用正则表达式来去掉数字中的逗号。具…

    python 2023年5月14日
    00
  • 详解Python PIL Image.thumbnail() 方法

    Pillow是Python的一个图像处理库,其中的Image模块提供了多种处理图像的方法,其中之一就是thumbnail()方法,接下来我们就来详细讲解一下。 方法概览 Image.thumbnail(size, resample=None) size: 缩略图尺寸,是一个二元元组,形如(width, height),注意这里的width和height都不应…

    python-answer 2023年3月25日
    00
  • Python中文字符串截取问题

    下面是Python中文字符串截取问题的完整攻略。 问题描述 在Python中,当字符串中包含中文字符时,对该字符串的截取操作会出现一些问题。比如,我们要截取一个中文字符串的一部分,但是用普通的中括号[]操作会得到意想不到的结果,如下面的例子所示: s = "这是一段中文字符串" s_sub = s[2:6] # 截取第3个字符到第7个字符…

    python 2023年5月20日
    00
  • Python3 伪装浏览器的方法示例

    下面是Python3 伪装浏览器的方法示例的完整攻略: 1. 为什么需要伪装浏览器 在使用Python进行爬虫或数据采集时,可能会有一些网站会对爬虫进行限制,比如只允许浏览器访问,而不允许程序直接访问。这时我们需要伪装成浏览器来欺骗服务器,使其不会对我们的请求进行限制。 2. 伪装浏览器的方法 要伪装成浏览器,我们需要在请求头中添加一些必要的信息,包括 Us…

    python 2023年6月3日
    00
  • python的re正则表达式实例代码

    以下是详细讲解“Python的re正则表达式实例代码”的完整攻略,包括正则表达式的语法和两个示例说明。 正则表达式语法 正则表达式是由普通和元字符组成的,用来描述文本模式。下面是一些常用的正则表达式元字符: .:匹配意字符。 *:匹配前面的字符0次或多次。 +:匹配前面的字符1次或多次。 ?:匹配前面的字符0次或1次。 |:匹配多个正则表达式中的任意一个。 …

    python 2023年5月14日
    00
  • Python正则表达式教程之二:捕获篇

    Python正则表达式教程之二:捕获篇 在Python正则表达式教程之一中,我们介绍了正则表达式的基本语法和常用函数。在本攻略中,我们将深入探讨则表达式的捕获功能,包括如何使用捕获组、非捕获组、零宽断言等功能。 捕获组 捕获组是正则表达式中的一种特殊语法,用于将匹配到的子字符串作为一个整体进行捕获。在正则表达式中,捕获组使用圆括()表示。下面是一个例子,演示…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部