前言

人在美国,刚下飞机,在等行李的时候写下这篇博客,纪念一下我长达两天的踩坑史,以及一种新的思维,面向百度编程,本文介绍的是如何用python做钢琴块脚本,用到模块有

PIL模块

numpy模块

ctypes模块(使用动态链接库)

正文

好,接下来就开始漫长的踩坑史了,Are you ready?

ADB坑

一开始,我想的是在手机上进行触屏操作,还别说,真有这东西

工具包我打包了,点击此处下载 密码:xsx3

放在你的工作目录下(其实可以不用全放的,但是全放肯定没问题),手机打开usb 调试,

然后打开ADBDriverInstaller.exe:

点击之后就可以关闭了

进入工作目录,cmd,输入命令:

adb shell

出现一大串参数就代表没问题,

介绍几个会用到的adb命令:

//(保存到SDCard)

adb shell /system/bin/screencap -p /sdcard/screenshot.png

// 从SD卡导出到电脑,注意 F:\\mvp 为电脑路径,必须存在

adb pull /sdcard/screenshot.png F:\\mvp(保存到电脑)

//在(x,y)处模拟点击

adb shell input tap x y

然后在介绍下 PIL模块:

from PIL import Image

import numpy as np

path=""#path为图片路径

img=np.array(Image.open(path))#img为这张图片的三维矩阵[y][x][r,g,b]

如果在某一点的rgb相加小于100,那么它就是可以点击的地方,即为黑色方块。纵坐标固定,横坐标检查四个点对应四列,要不是因为我测试了一下截一张图传到电脑上要两秒,点击一下要一秒,我差点就兴奋了,怎么玩,一次要三秒,开什么玩笑,还不如手玩,果断认同放弃ADB

于是我苦思冥想,痛定思痛,终于灵光一现,有没有一种方法,是可以直接在电脑上操作手机,而不需要向ADB这么慢的呢,很庆幸,答案是有的!!!傲软投屏,满足你的一切需求,支持逆向操作!! 界面如图:

利用鼠标可以模拟手机点击,果断百度python 如何操作鼠标,有一个库是pyhook,刚好满足这种需求,结果我编译器安装失败,百度一看

原文链接https://www.cnblogs.com/nymrli/p/9557023.html

哈哈哈,如果一个钩子算邪恶,那windows API岂不是罪大恶极?该放弃时就要放弃,稍加思索,决定写一个动态链接库来操作鼠标点击,新建一个文件夹命名为Pro1,新建一个文件命名为Click.c放在Pro1文件夹下。Click.c内容如下

#include

#include

void click(int x,int y){//定义一个方法,传坐标参数

SetCursorPos(x, y);//移动鼠标到(x,y)

mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//鼠标左键点击

}

然后用gcc 把它编译成动态链接库,步骤如下:

打开cmd,进入Pro1目录下

输入命令

gcc -m64 -shared Click.c -o Click.dll//如果python是32位的就用-m32

回车

然后就发现在你的Pro1目录下有一个Click.dll文件了

如何用这个动态库呢

安装ctypes模块,pycharm界面如下:

来测试一下这个点击的速度吧,在Pro文件夹下新建test.py

from ctypes import *

import _thread#这个模块需要安装

import time

test=CDLL("./Click.dll")

class date:

Count=0#存储点击次数

def t(name,n):#至少要两个参数,随便填

while True:

test.click(500,500)

date.Count+=1

_thread.start_new_thread(t,("ll",1))

time.sleep(1)#过一秒

print("在一秒钟之内点击了{n}下".format(n=date.Count))

除去加载图片的时间,也绰绰有余了木有,哈哈,很好的开端,为了少走弯路,使数据计算的更简单,我们要耍点聪明,把傲软录屏拖到左上角,如图:

尽量保持手机左上角和电脑屏幕左上角对齐,此时坐标为(0,0),经过测验,右下角坐标为(450,805),数据出来直接上整代码

import numpy as np

from PIL import ImageGrab

from ctypes import *

BOX=(0,699,450,701)

screen=np.array(ImageGrab.grab(BOX)#截取纵坐标从699到701,横坐标为0到450的屏幕区域

click=CDLL("./Click.dll")

def click(x,y):#自定义鼠标点击方法,引用Click动态链接库

click.click(x,y)

def judge(x,y):#判断(x,y)是不是深色像素

sum=int(screen[y][x][0])+int(screen[y][x][1])+int(screen[y][x][2])#要强转型为int 原型为0~255的类型,这里对(x,y)这个像素点的rgb求和,纯黑为(0,0,0)

if(sum<=100):#如果为深色

return True

return False

while True:

screen=np.array(ImageGrab.grab(BOX)#不断更新选屏区

for n in range(0,4):

if(judge(int(56.25+N*113),1)):#经过不断计算,发现横坐标取这四个点最为合适,纵坐标实际上为699+1

click(45 + 90 * n, 565)#此处进行了单位转换,上面的单位是像素点,这里的我也不知道是什么,数据是经过计算得出的,我用着没事

至此,只能说大概完成了,但是还有bug,当我按下一个黑色方块后,下一帧的时候,我又会接着去按那个按过了的方块,所以要杜绝这种情况的发生,代码修改如下:

import numpy as np

from PIL import ImageGrab

from ctypes import *

BOX=(0,699,450,701)

screen=np.array(ImageGrab.grab(BOX)#截取纵坐标从699到701,横坐标为0到450的屏幕区域

click=CDLL("./Click.dll")

def click(x,y):#自定义鼠标点击方法,引用Click动态链接库

click.click(x,y)

def judge(x,y):#判断(x,y)是不是深色像素

sum=int(screen[y][x][0])+int(screen[y][x][1])+int(screen[y][x][2])#要强转型为int 原型为0~255的类型,这里对(x,y)这个像素点的rgb求和,纯黑为(0,0,0)

if(sum<=100):#如果为深色

return True

return False

N=-1#上一帧点击了哪一列的方块,初始值为-1

while True:

screen=np.array(ImageGrab.grab(BOX)#不断更新选屏区

for n in range(0,4):

if(judge(int(56.25+N*113),1)):#经过不断计算,发现横坐标取这四个点最为合适,纵坐标实际上为699+1

if(n!=N):#如果上一帧的所在列和现在的不同

N=n#更改N

click(45 + 90 * n, 565)#此处进行了单位转换,上面的单位是像素点,这里的我也不知道是什么,数据是经过计算得出的,我用着没事

到这里,已经差不多了,但是如果万的分数多了,就会出现一个问题,

比如,这一次我点击了第三列,但是我领了金币之后,下一个方块又从第三列下来,那么照它的逻辑,就game over!!了,所以得杜绝,更改如下

import numpy as np

from PIL import ImageGrab

from ctypes import *

BOX=(0,699,450,701)

screen=np.array(ImageGrab.grab(BOX)#截取纵坐标从699到701,横坐标为0到450的屏幕区域

click=CDLL("./Click.dll")

def click(x,y):#自定义鼠标点击方法,引用Click动态链接库

click.click(x,y)

def judge(x,y):#判断(x,y)是不是深色像素

sum=int(screen[y][x][0])+int(screen[y][x][1])+int(screen[y][x][2])#要强转型为int 原型为0~255的类型,这里对(x,y)这个像素点的rgb求和,纯黑为(0,0,0)

if(sum<=100):#如果为深色

return True

return False

N=-1#上一帧点击了哪一列的方块,初始值为-1

canC=False#是否可以点击

while True:

screen=np.array(ImageGrab.grab(BOX)#不断更新选屏区

for n in range(0,4):

if(judge(int(56.25+N*113),1)):#经过不断计算,发现横坐标取这四个点最为合适,纵坐标实际上为699+1

if(n!=N):#如果上一帧的所在列和现在的不同

N=n#更改N

canC=True

click(45 + 90 * n, 565)#此处进行了单位转换,上面的单位是像素点,这里的我也不知道是什么,数据是经过计算得出的,我用着没事

if (canC):

if(judge(int(56.25+N*113),1)==False ):

N=-1

canC=False

至此,就没什么太大了的问题了,建议运行的时候电脑保持流畅,我最高跑了小星星1073分

来闲扯两句,其实我不怎么用python的,搭建神经网络的时候用了下python,然后大一下学期的时候左字符串动画用了下,现在快大二了,小专科一个,能活到现在,多亏了度娘,这两天左这个东西,完全就是突发奇想,百度了两天,跑到1000多分的时候我已经兴奋了,本来是想着插上USB,再最后垂死挣扎一下,然后洗洗睡的,结果稍微改了下还跑成功了,差点喜极而泣,谢谢谢谢,已经语无伦次了,如果我这篇博客能帮到你,我会更开心

python弹钢琴_python钢琴块自动脚本相关推荐

  1. JAVA、Python、selenium、问卷星自动脚本

    项目地址 https://gitee.com/Hardy1/questionnaire-star-script 前期准备 配置jdk 安装python 下载安装mitmproxy 代码实现 项目中se ...

  2. python钢琴块自动脚本

    前言      人在美国,刚下飞机,在等行李的时候写下这篇博客,纪念一下我长达两天的踩坑史,以及一种新的思维,面向百度编程,本文介绍的是如何用python做钢琴块脚本,用到模块有 PIL模块 nump ...

  3. python积分管理系统_python实现每天自动签到领积分的示例代码

    自动签到的python脚本源码 新建一个python文件,checkin.py,保存到电脑上某个位置,我这里保存到的是E:\pyproject\checkin.py # 引入3个包 from sele ...

  4. python animation 轨迹_Python实例:自动轨迹绘制

    1. 问题分析 需求:根据脚本来绘制图形 Python的 turtle 库通过写代码的方式来绘图,现在我们要根据数据来绘制轨迹. 使用数据脚本时自动化最重要的第一步.例如,根据下面的几组数据绘制出的图 ...

  5. python校园网登录_python实现校园网自动登录的示例讲解

    python实现校园网自动登录的示例讲解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  python实现校园网自动登录的示例讲解.txt ] (友情提示:右键点上 ...

  6. python数据库连接信息加密_python实现对服务器脚本敏感信息的加密解密功能

    背景 在实际项目实施中,会编写很多在服务器执行的作业脚本.程序中凡是涉及到数据库链接.操作系统用户链接.IP地址.主机名称的内容都是敏感信息.在纯内网系统中往因为开发时间紧迫,往往都直接将这些敏感信息 ...

  7. python论坛签到_python实现网页自动签到功能

    本文实例为大家分享了python实现网页自动签到功能的具体代码,供大家参考,具体内容如下 第1步.环境准备(用的chrome浏览器) 1.安装selenium包 pip install seleniu ...

  8. python 日志分析_python 日志分析统计脚本 | 学步园

    脚本类似shell的tail功能,用来统计每分钟的4xx.5xx的状态码数量,统计php执行时间小于1秒.1-5秒.5秒以上的数量,和每秒的并发请求.将结果放到/tmp目录下, 也可以用cacti将结 ...

  9. python延时函数_Python实现屏幕自动截图

    教程目录 需要实现的功能:自动屏幕截图 具体需求: 1. 支持设置截图频率和截图文件存储路径 2. 在存储截图时判断与前一张截图的相似度,只有屏幕发生了显著的变化才存储截图 所需技术(搜索关键词): ...

  10. python遍历文件_python遍历目录文件脚本的示例

    例子 自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理.没啥技术含量,但是也记录一下吧. 代码如下 复制代码 #!/usr/bin/python # -*- coding: utf-8 ...

最新文章

  1. UIPickerView和UIDataPicker
  2. redis安装步骤(单机配置)
  3. kiss原则包括什么_求职干货想让HR瞬间对你产生好感?简历做好这三个原则
  4. python朋友圈为什么这么火-利用Python让你的微信朋友圈与众不同,更加高大上
  5. 装饰器设计模式的应用
  6. C++|Qt笔记-关于extern和namespace的区别与联系
  7. 疫情中该如何保证高效远程办公(1)-员工到底是在家办公,还是在家躺着??
  8. 统计学习方法(—)——统计学习方法概念
  9. ubuntu18.04 安装Teamviewer15出现依赖库出错
  10. 实习成长之路——Spring Bean 二:如何注册BeanDefinition?
  11. maven打包时加入依赖jar包
  12. cad转shp 奥维_CAD转化为Shp
  13. Visual Studio C++/C 游戏——双人贪吃蛇 实现方法+代码讲解+算法优化+成功展示+源代码+总结(超详细,适合小白)
  14. ubuntu16启用daytime服务
  15. Centos7中Docker安装Redis
  16. 23届秋招美团内推推推!开始啦!!
  17. Linux内核自带SPI设备驱动测试程序分析:spidev_test.c
  18. ​网易游戏实时 HTAP 计费风控平台建设
  19. 文本文档改扩展名之后没反应、格式不变之解决办法
  20. Onvif OSD相关操作

热门文章

  1. sqlyog错误号码2058解决方式
  2. 计算机的内存不足建议使用,别再说内存不足了!教你一招彻底解决,电脑运行加速3倍!...
  3. 超详细—狂神Mybatis笔记
  4. IB幼儿课程怎么理解?
  5. 如何解决fillRect方法画矩形变形的问题?
  6. DB---数据模型的三要素
  7. Element DateTimePicker 日期时间选择器 今天日期设置,并获取value值
  8. 计算机网络安全学校,网络空间安全学院
  9. Microsoft.Office.Interop.Word 分页操作(文本和表格分开)
  10. word2010公式编辑器 格式设置