学习一个新东西一定要有趣,如果只是简单学习语法太枯燥了。弄了个跳一跳的程序,注释写的很清楚#!/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()

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

  1. python控制手机自动刷新闻_Python脚本利用adb进行手机控制的方法

    一. adb 相关命令: 1. 关闭adb服务:adb kill-server 2. 启动adb服务 adb start-server 3. 查询当前运行的所有设备 adb devices 4. 可能 ...

  2. python控制手机自动刷新闻_python +adb控制手机自动化签到

    #coding=utf8 importos,re,time,loggingimportpyautoguifrom apscheduler.schedulers.background import Ba ...

  3. android蓝牙 相机,如何使用摄像头构建蓝牙控制的汽车,以及如何将Android手机用作摄像头...

    了解如何使用摄像头构建蓝牙控制的汽车,以及如何将Android手机用作摄像头. 硬件组件: · Arduino UNO×1个 · 双H桥电机驱动器L298×1个 · HC-05蓝牙模块×1个 · 9V ...

  4. Android模拟电子墨水屏,高刷墨水屏的 Android 手机,海信 A5 Pro 体验报告

    原标题:高刷墨水屏的 Android 手机,海信 A5 Pro 体验报告 Matrix 精选 Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考.我们会不定期挑选 M ...

  5. android手机用户,ZDC:2011年Android手机用户使用行为研究报告

    一.市场概述及研究背景 谷歌Android,自获得摩托罗拉.三星.HTC.中兴.华为等诸多品牌的拥趸开始,就扮演起了智能手机市场竞争格局颠覆者的角色.经过近三年时间的发展,Gartner最新数据显示, ...

  6. python做的游戏放到微信_【1、 创建一个python的文件,运行后,文字版方式模拟微信游戏“跳一跳?】...

    python脚本学习过程推荐 学习流程: 一:打础 1.找到合适的书籍(推荐Python核心编程2Dive into Python),大致读一次,循环啊判,常用类啊,搞懂(太难的跳过) 2.勤练习py ...

  7. [经验教程]微信自动续费服务在哪里怎么关闭微信自动续费?

    微信自动续费服务在哪里怎么关闭微信自动续费? 1.微信搜索:微信支付: 2.找到微信自动续费的签约成功通知,并点击进入: 3.进入后点击[关闭扣费服务],并点击再次确认关闭: 4.确认关闭后微信自动续 ...

  8. python自动刷视频_python+adb命令实现自动刷视频脚本案例

    python小白第一次发博客,自己自学了一下写了一个demo,可能语法啥的不够标准,毕竟没有真正学过python 主要用到的是 import os #os包用于运行cmd命令 adb shell #这 ...

  9. python设计游戏使用手机操作_如何使用python控制手机(以微信游戏跳一跳为例)

    打开手机的开发者选项,本人小米手机,系统android 7.0(miui 9.1),设置->我的设备->全部参数(点击miui版本5次,即可开启开发者模式) 设置->更多设置(倒数第 ...

最新文章

  1. mysql5.7.20安装红黑_Window环境安装MySQLServer5.7.21
  2. 三、索引优化(3)聚集索引上的非聚集索引
  3. 2014 WAP校园招聘笔试题
  4. php字符串加密解密源码,PHP中加密解密字符串函数源代码
  5. c语言形参的隐含存储类型,C存储类型
  6. 基于AFNetworking的封装的工具类
  7. 《中学生可以这样学Python》84节微课免费观看地址
  8. GitHub热榜第四!这套Python机器学习课,免费获取还易吸收 | 资源
  9. python基础系列教程——Python的安装与测试:python解释器、PyDev编辑器、pycharm编译器
  10. LINQ to SQL语句 收藏系列
  11. ffmpeg (二):ffmpeg结合SDL2.0解码视频流
  12. 华为VRRP+VLAN+DHCP配置实例
  13. 私人影院音响效果如何有效提升?
  14. 蓝牙技术谈之跳频技术(一)
  15. Specification动态查询
  16. 《Cocos Creator游戏实战》打砖块主要功能与逻辑实现
  17. 运行jar包时报错:[mybatis-config.xml] cannot be opened because it does not exist
  18. 最简单的免费安卓手机投屏电脑游戏直播工具推荐:电脑控制手机玩游戏了解一下
  19. 更方便!微信小程序任务栏功能升级:增加「我的小程序」
  20. 多可文档管理迁移说明

热门文章

  1. axios请求超时,设置重新请求的完美解决方法
  2. 课时66.颜色控制属性下(理解)
  3. 6.5 开始进入设计 … Transition to Design
  4. python模块之configparser
  5. APPLE STORE
  6. NFS网络共享文件系统
  7. POJ2251Dungeon Master
  8. linux 认证考试 题库,Linux认证考试题库及答案
  9. shouji android输入法,安卓手机主流输入法对比
  10. mysql查询出过去一个月_Mysql查询今天、昨天、7天、近30天、本月、上一月 数据...