python控制手机自动刷新闻_Python控制android手机实现微信自动跳一跳

学习一个新东西一定要有趣,如果只是简单学习语法太枯燥了。弄了个跳一跳的程序,注释写的很清楚#!/usr/bin/env python

# encoding: utf-8

# @software: PyCharm

# @time: 2019/7/10 15:39

# @author: Paulson●Wier

# @file: jump_跳一跳.py

# @desc:

import os

import random

import time

import cv2

import numpy as np

def get_screenshot():

# 截取手机的屏幕

os.system('adb shell /system/bin/screencap -p /sdcard/screencap.png')

# 把模拟器里面的文件传到电脑上

os.system('adb pull /sdcard/screencap.png screencap.png')

def get_start(img):

"""

模板匹配,获取跳一跳起点的位置参数(小跳棋)

    :param img:跳一跳当前图片

:return 跳块中心点坐标(x,y)

"""

# 使用标准相关系数匹配,1表示完美匹配, -1表示糟糕匹配, 0表示没有任何相关性

    result = cv2.matchTemplate(img, temple, cv2.TM_CCOEFF_NORMED)

# 使用函数 minMaxloc, 确定匹配结果矩阵的最大值和最小值(val),以及它们的位置(loc)

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

# 此处选取最大值的位置,为图像的左上角

t1 = max_loc

# 获取图像的右下角

br = (t1[0] + tw, t1[1] + th)

t_x_center = (t1[0] + br[0]) // 2

t_y_center = int(max_loc[1] * 0.25 + br[1] * 0.75)

print(f"跳块中心点坐标({t_x_center},{t_y_center})")

return t_x_center, t_y_center

def get_next(img):

"""

获取下一跳目标方块中心点坐标

    :param img:

:return:

"""

# 高斯模糊

    img_rgb = cv2.GaussianBlur(img, (5, 5), 0)

    canny_img = cv2.Canny(img_rgb, 1, 10)

# 输出边缘检测图像的高和宽

    H, W = canny_img.shape

# 第一个顶点的高度,row为列表(代表每一行的像素值), max(row) 获取列表中最大的像素值

# 对图像高度大于400的行进行遍历(这样可以去除上方数字以及小程序块的影响)。

# np.nonzero() 表示获取列表元素数值不为0的位置,

    y_top = np.nonzero([max(row) for row in canny_img[420:]])[0][0] + 420

# 获取第一个顶点的宽度值

    x_top = int(np.mean(np.nonzero(canny_img[y_top])))

# 跳过小白圈,然后遍历

y_bottom = y_top + 125

for row in range(y_bottom, H):

        if canny_img[row, x_top] != 0:

y_bottom = row

break

# 得到方块的中心点

x_center, y_center = x_top, (y_top + y_bottom) // 2

print(f"目标方块中心点({x_center},{y_center})",)

return x_center, y_center

def game_over(img):

"""

模板匹配,检测是否要将程序结束

"""

# 如果在游戏截图中匹配到带"再玩一局"字样的模板,则循环中止

    res_end = cv2.matchTemplate(img, temp_end, cv2.TM_CCOEFF_NORMED)

if cv2.minMaxLoc(res_end)[1] > 0.95:

print('Game over!')

return True

def jump(distance, flag=1.5):

# 设置按压时间,系数为默认为1.35

press_time = int(distance * flag)

# 生成随机手机屏幕模拟触摸点,防止成绩无效

# 生成随机整数(0-9),最终数值为(0-90)

rand = random.randint(0, 9) * 10

# adb长按操作,即在手机屏幕上((320-410),(410-500))坐标处长按press_time毫秒

cmd = ('adb shell input swipe %i %i %i %i ' + str(press_time)) % (320 + rand, 410 + rand, 320 + rand, 410 + rand)

# 输出adb命令

print(cmd)

# 执行adb命令

os.system(cmd)

def main():

i = 0

while True:

# 将安卓手机上的截图移到电脑当前文件夹下

i += 1

get_screenshot()

# 读取截图图像

        img = cv2.imread('screencap.png', 0)

        if game_over(img):

print(f"第{i-1}次跳动失败")

break

print(f"第{i-1}次跳动成功")  # 提示上一次跳动是否成功

        begin_x, begin_y = get_start(img)

        target_x, target_y = get_next(img)

distance = ((begin_x-target_x)**2 + (begin_y-target_y)**2) ** 0.5

# 将起点位置绘制出来,一个圆

        cv2.circle(img, (begin_x, begin_y), 20, 255, -1)

# 将终点位置绘制出来,一个圆

        img_end = cv2.circle(img, (target_x, target_y), 20, 188, -1)

# 保存图片

        cv2.imwrite('last.png', img_end)

# 根据获得的距离来设置按压时长

jump(distance)

time.sleep(1.3)

if __name__ == '__main__':

# 游戏结束的模板图像

temp_end = cv2.imread('end.jpg', 0)

# 读取小跳棋模板图像

temple = cv2.imread('temple.png', 0)

# 获取小跳棋模板图像的高和宽

th, tw = temple.shape[:2]

main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独家:Havok 发布新的 AI 中间件

独家:Havok 发布新的 AI 中间件 March 23rd, 2009 Alex J. Champandard 2009-3-23,赖勇浩(http://blog.csdn.net/lanphaday)译 原文地址:http://aigamedev.com/middleware/havok-ai-announced 在20日(上周五…

mysql查询入门_Mysql入门(四)查询

我们继续查询~条件查询及逻辑运算符条件查询如果我只想查询&#xff0c;年级小于30的&#xff0c;可以加个where条件关键字~条件查询敲黑板select * from yingxiong where y_age<30where 表示条件(条件关键字)&#xff0c;在where之后跟过滤的条件注意&#xff1a;逻辑运算符…

maven provided_Maven 教程之 pom.xml 详解

点击上方“Java知音”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;作者&#xff1a;dunwuhttps://github.com/dunwu/blog推荐阅读(点击即可跳转阅读)1. SpringBoot内容聚合2. 面试题内容聚合3. 设计模式内容聚合4. Mybatis内容聚合5. 多线程内容聚合简介什…

python将一个列表里面的某类元素取出来_03|Python列表常见操作

欢迎关注pythoner派微信公众号及头条号Python常见的数据结构我们在上一节中已经讲过再阅读文章前&#xff0c;请打开PythonIDE列表&#xff1a;1.定义一个列表现在我们有3瓶不同类型的啤酒&#xff0c;现在我们将其放入列表之中beer [粉象,白熊,橙色炸弹]2.向列表中追加元素现…

使用SDL打造游戏世界之入门篇 - 2

VC6下SDL的安装和初步使用首先&#xff0c;我们为所有的工程创建一个文件夹tutorial,将下载的开发库SDL-devel-1.2.8-VC6.zip拷贝到tutorial下并解压&#xff0c;并保证如下的文件夹层次&#xff08;图2&#xff09;如下&#xff1a;图2下面我们打开Visual Studio6.0&#xff0…

python虚拟环境管理工具_Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了...

前言Python虚拟环境是一个虚拟化&#xff0c;从电脑独立开辟出来的环境。在这个虚拟环境中&#xff0c;我们可以pip安装各个项目不同的依赖包&#xff0c;从全局中隔离出来&#xff0c;利于管理。 传统的Python虚拟环境有virtualenv&#xff0c;使用pip freeze → requirements…

python中upper函数有什么用_几个有用的python字符串函数(format,join,split,startwith,endwith,lower,upper)...

你需要知道的python字符串函数 format 字符串的format函数为非字符串对象嵌入字符串提供了一种非常强大的方法。在format方法中&#xff0c;字符串使用{}来代替一系列字符串的参数并规定格式。下面通过几个例子来详细解释其用法 直接使用{} apple_num 10 print("I have {…

QA

开发期间测试人员的工作是很多的&#xff0c;首先&#xff0c;要参加评审工作&#xff0c;比如需求评审、概要设计评审、详细设计评审等等&#xff0c;在评审过程中不要只抱着学习的目的&#xff0c;而是要提出有意义的建议&#xff0c;比如在需求评审中要提出一对可测试性需求…

用于连接mysql的java类_【考试】列举Java连接数据库用到的类有哪些。

好吧&#xff0c;说明一下JDBC连接数据库的步骤。创建一个以JDBC连接数据库的程序&#xff0c;包含7个步骤&#xff1a;1、加载JDBC驱动程序&#xff1a;例如&#xff1a;try{//加载MySql的驱动类Class.forName("com.mysql.jdbc.Driver") ;}catch(ClassNotFoundExcep…

水晶报表的统计功能-Crystal Report Sub total Per Page

先大概表述下我对水晶报表的理解&#xff1a; 大体上Crystal Report 可以理解为3部分&#xff1a; 第一部分&#xff1a;数据引擎 Crystal Report 集成了各种数据访问接口&#xff0c;可以方便的从数据仓库中提取数据&#xff0c;并把返回的数据做为一个数据集。 第二部分&…

centos 6.8安装git_RPM包的卸载与安装,包含依赖包卸载

一、 rpm包的管理介绍&#xff1a;一种用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中&#xff0c;它生成具有RPM扩展名的文件&#xff0c;RPM是RedHat Package Manager&#xff08;RedHat软件包管理工具&#xff09;的缩写&#xff0c;类似windows的…

内置系统账户:Local system/Network service/Local Service 区别

LocalSystem 账户   LocalSystem是预设的拥有本机所有权限的本地账户&#xff0c;这个账户跟通常的用户账户没有任何关联&#xff0c;也没有用户名和密码之类的凭证。这个服务账户可以打开注册表的HKEY_LOCAL_MACHINE\Security键&#xff0c;当LocalSystem访问网络资源时&a…

anaconda matplotlib 输出动画_Python+Matplotlib 制作排序算法的动画

1 、算法的魅力深刻研究排序算法是入门算法较为好的一种方法&#xff0c;现在还记得4年前手动实现常见8种排序算法&#xff0c;通过随机生成一些数据&#xff0c;逐个校验代码实现的排序过程是否与预期的一致&#xff0c;越做越有劲&#xff0c;越有劲越想去研究&#xff0c;公…

如何在centos中找到安装mysql_centos上如何安装mysql

centos可以使用yum安装mysql 但是版本很低&#xff0c;且不灵活。本文将介绍如何使用安装包安装mysql将下载文件放在/opt/mysoft文件夹中解压文件tar -xf MySQL-5.6.22-1.linux_glibc2.5.x86_64.rpm-bundle.tar这里我们要安装mysql的服务端和客服端&#xff0c;所以使用下面两个…

myeclipse5.5注册码

Subscriber: myeclipse5.5 SubNULLion Code: zLR8ZC-850444-5453675708725833 转载于:https://www.cnblogs.com/shiningrise/archive/2009/04/06/1430382.html

python连接sqlite数据库的代码_Python3实现连接SQLite数据库的方法

本文实例讲述了Python3实现连接SQLite数据库的方法&#xff0c;对于Python的学习有不错的参考借鉴价值。分享给大家供大家参考之用。具体方法如下&#xff1a; 实例代码如下&#xff1a; import sqlite3 db r"D:\pyWork\test.db" #pyWork目录下test.db数据库文件 dr…

数据库mysql面试题 it_【模块三】数据库篇--MySQL面试题☞参考答案

【一】初级【二】中级执行过程【1】客户端向MySQL服务器发送一条查询请求【2】服务器首先检查查询缓存&#xff0c;如果命中缓存&#xff0c;则立刻返回存储在缓存中的结果。否则进入下一阶段【3】服务器进行SQL解析、预处理、再由优化器生成对应的执行计划【4】MySQL根据执行计…

iframe高度自适应(IE6+、FF、Opera、Chrome等测试通过)

在主页面中对于嵌入的iframe页面高度未知&#xff0c;而且iframe页面的高度也不定&#xff0c;故不能在主页面中通过DOM来控制高度。在iframe页面中加入以下脚本便可实现&#xff1a;/*iframe 高度自适应脚本&#xff08;IE6、FF、Opera、Chrome等测试通过&#xff09; 作者未知…

html选择器_css的9个常用选择器

1.类选择器&#xff08;通过类名进行选择&#xff09;<!DOCTYPE html> <html> <head><title></title> </head> <style type"text/css">.p1{color: #00ff00;}.p2{color: #0000ff;} </style> <body><p class…

dapperpoco mysql_.NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...

前言在以前的一篇文章中&#xff0c;为大家分享了《什么是ORM&#xff1f;为什么用ORM&#xff1f;浅析ORM的使用及利弊》。那么&#xff0c;在目前的.NET(C#)的世界里&#xff0c;有哪些主流的ORM&#xff0c;SqlSugar&#xff0c;Dapper&#xff0c;Entity Framework(EF)还是…