python 跳一跳辅助_微信跳一跳辅助自动跳Python

#-*- coding: utf-8 -*-

"""=== 思路 ===

核心:每次落稳之后截图,根据截图算出棋子的坐标和下一个块顶面的中点坐标,

根据两个点的距离乘以一个时间系数获得长按的时间

识别棋子:靠棋子的颜色来识别位置,通过截图发现最下面一行大概是一条

直线,就从上往下一行一行遍历,比较颜色(颜色用了一个区间来比较)

找到最下面的那一行的所有点,然后求个中点,求好之后再让 Y 轴坐标

减小棋子底盘的一半高度从而得到中心点的坐标

识别棋盘:靠底色和方块的色差来做,从分数之下的位置开始,一行一行扫描,

由于圆形的块最顶上是一条线,方形的上面大概是一个点,所以就

用类似识别棋子的做法多识别了几个点求中点,这时候得到了块中点的 X

轴坐标,这时候假设现在棋子在当前块的中心,根据一个通过截图获取的

固定的角度来推出中点的 Y 坐标

最后:根据两点的坐标算距离乘以系数来获取长按时间(似乎可以直接用 X 轴距离)"""

from __future__ importprint_function, divisionimportosimportsysimporttimeimportmathimportrandomfrom PIL importImageimportsubprocess#分数y坐标

under_game_score_y = 300

#长按的时间系数,请自己根据实际情况调节

press_coefficient = 1.392

#二分之一的棋子底座高度,可能要调节

piece_base_height_1_2 = 20

#棋子的宽度,比截图中量到的稍微大一点比较安全,可能要调节

piece_body_width = 70

defset_button_position(im):"""将 swipe 设置为 `再来一局` 按钮的位置"""

globalswipe_x1, swipe_y1, swipe_x2, swipe_y2

w, h=im.size

left= int(w / 2)

top= int(1584 * (h / 1920.0))

left= int(random.uniform(left-50, left+50))

top= int(random.uniform(top-10, top+10)) #随机防 ban

swipe_x1, swipe_y1, swipe_x2, swipe_y2 =left, top, left, topdefjump(distance):"""跳跃一定的距离"""press_time= distance *press_coefficient

press_time= max(press_time, 200) #设置 200ms 是最小的按压时间

press_time =int(press_time)

cmd= 'adb shell input swipe {x1} {y1} {x2} {y2} {duration}'.format(

x1=swipe_x1,

y1=swipe_y1,

x2=swipe_x2,

y2=swipe_y2,

duration=press_time

)print(cmd)

os.system(cmd)returnpress_timedeffind_piece_and_board(im):"""寻找关键坐标"""w, h=im.size

piece_x_sum=0

piece_x_c=0

piece_y_max=0

board_x=0

board_y=0

scan_x_border= int(w / 8) #扫描棋子时的左右边界

scan_start_y = 0 #扫描的起始 y 坐标

im_pixel =im.load()#以 50px 步长,尝试探测 scan_start_y

for i in range(int(h / 3), int(h*2 / 3), 50):

last_pixel=im_pixel[0, i]for j in range(1, w):

pixel=im_pixel[j, i]#不是纯色的线,则记录 scan_start_y 的值,准备跳出循环

if pixel !=last_pixel:

scan_start_y= i - 50

break

ifscan_start_y:break

print('scan_start_y: {}'.format(scan_start_y))#从 scan_start_y 开始往下扫描,棋子应位于屏幕上半部分,这里暂定不超过 2/3

for i in range(scan_start_y, int(h * 2 / 3)):#横坐标方面也减少了一部分扫描开销

for j in range(scan_x_border, w -scan_x_border):

pixel=im_pixel[j, i]#根据棋子的最低行的颜色判断,找最后一行那些点的平均值,这个颜

#色这样应该 OK,暂时不提出来

if (50 < pixel[0] < 60) \and (53 < pixel[1] < 63) \and (95 < pixel[2] < 110):

piece_x_sum+=j

piece_x_c+= 1piece_y_max=max(i, piece_y_max)if notall((piece_x_sum, piece_x_c)):return0, 0, 0, 0

piece_x= int(piece_x_sum /piece_x_c)

piece_y= piece_y_max - piece_base_height_1_2 #上移棋子底盘高度的一半

#限制棋盘扫描的横坐标,避免音符 bug

if piece_x < w/2:

board_x_start=piece_x

board_x_end=welse:

board_x_start=0

board_x_end=piece_xfor i in range(int(h / 3), int(h * 2 / 3)):

last_pixel=im_pixel[0, i]if board_x orboard_y:breakboard_x_sum=0

board_x_c=0for j inrange(int(board_x_start), int(board_x_end)):

pixel=im_pixel[j, i]#修掉脑袋比下一个小格子还高的情况的 bug

if abs(j - piece_x)

#修掉圆顶的时候一条线导致的小 bug,这个颜色判断应该 OK,暂时不提出来

if abs(pixel[0] -last_pixel[0]) \+ abs(pixel[1] - last_pixel[1]) \+ abs(pixel[2] - last_pixel[2]) > 10:

board_x_sum+=j

board_x_c+= 1

ifboard_x_sum:

board_x= board_x_sum /board_x_c

last_pixel=im_pixel[board_x, i]#从上顶点往下 +274 的位置开始向上找颜色与上顶点一样的点,为下顶点

#该方法对所有纯色平面和部分非纯色平面有效,对高尔夫草坪面、木纹桌面、

#药瓶和非菱形的碟机(好像是)会判断错误

for k in range(i+274, i, -1): #274 取开局时最大的方块的上下顶点距离

pixel =im_pixel[board_x, k]if abs(pixel[0] -last_pixel[0]) \+ abs(pixel[1] - last_pixel[1]) \+ abs(pixel[2] - last_pixel[2]) < 10:breakboard_y= int((i+k) / 2)#如果上一跳命中中间,则下个目标中心会出现 r245 g245 b245 的点,利用这个

#属性弥补上一段代码可能存在的判断错误

#若上一跳由于某种原因没有跳到正中间,而下一跳恰好有无法正确识别花纹,则有

#可能游戏失败,由于花纹面积通常比较大,失败概率较低

for j in range(i, i+200):

pixel=im_pixel[board_x, j]if abs(pixel[0] - 245) + abs(pixel[1] - 245) + abs(pixel[2] - 245) ==0:

board_y= j + 10

break

if notall((board_x, board_y)):return0, 0, 0, 0returnpiece_x, piece_y, board_x, board_ydefpull_screenshot():

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

os.system('adb pull /sdcard/1.png .')defcheck_screenshot():#检查获取截图的方式

if os.path.isfile('1.png'):

os.remove('1.png')

pull_screenshot()

Image.open('./1.png').load()defmain():

check_screenshot()

i, next_rest, next_rest_time= (0, random.randrange(3, 10),

random.randrange(5, 10))whileTrue:

pull_screenshot()

im= Image.open('./1.png')#获取棋子和 board 的位置

piece_x, piece_y, board_x, board_y =find_piece_and_board(im)

ts=int(time.time())print(ts, piece_x, piece_y, board_x, board_y)

set_button_position(im)

jump(math.sqrt((board_x- piece_x) ** 2 + (board_y - piece_y) ** 2))

im.close()

i+= 1

if i ==next_rest:print('已经连续打了 {} 下,休息 {}s'.format(i, next_rest_time))for j inrange(next_rest_time):

sys.stdout.write('\r程序将在 {}s 后继续'.format(next_rest_time -j))

sys.stdout.flush()

time.sleep(1)print('\n继续')

i, next_rest, next_rest_time= (0, random.randrange(30, 100),

random.randrange(10, 60))#为了保证截图的时候应落稳了,多延迟一会儿,随机值防 ban

time.sleep(random.uniform(0.9, 1.2))if __name__ == '__main__':

main()

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

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

相关文章

asterisk for mipsel

任务&#xff1a;将asterisk1.8.24.0移植到rt5350上面 交叉工具链&#xff1a;mipsel-linux(3.4.2) 1. 配置asterisk&#xff0c;执行./configure --hostmipsel-linux 找不到termcap和libxml2&#xff0c;分别对他们交叉编译&#xff0c;然后将生成的库拷贝到交叉工具链的lib…

uniapp开发实例github_跨端开发痛点?送你一款Vue最流行的跨端框架——uni-app

前言今天来聊一下前端必备技能——小程序开发。从最早发布的微信小程序&#xff0c;到后来的支付宝小程序、字节跳动小程序、百度小程序、QQ小程序&#xff0c;还有最近发布的360小程序&#xff0c;面对这么多套的代码&#xff0c;开发者该如何开发呢&#xff1f;当业务要求同时…

计算机怎么把单元格内容水平居中,win10系统下怎样让Word中的表格内容居中

Word是我们经常会使用到的一款文字处理软件&#xff0c;其具有非常强大的功能。那么&#xff0c;我们应该怎样使Word中的表格内容居中呢&#xff1f;接下来&#xff0c;小编就以 windows10正式版系统 为例&#xff0c;给大家分享具体操作方法。具体如下:1、首先在Word软件中准备…

双稳态电路的两个稳定状态是什么_从双稳态到双“更”稳态 ——叶芳伟课题组在拓扑光子学研究方向上取得新进展...

你拿起一个计算器&#xff0c;输入“26”&#xff0c;计算器会输出“8”&#xff1b;过了一会儿&#xff0c;你又在这个计算器上输入“26”&#xff0c;它依然会输出“8”。这种靠谱的计算器——对于同一个输入&#xff0c;它始终还给我们同一个输出——我们称之为线性计算器或…

Webots实现大疆Mavic2pro无人机定点飞行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、将无人机当成一个对象1.1定义无人机相关属性1.2定义用于控制无人机运动的代码1.3主函数实现无人机的点位固定和飞行检测 二、用键盘控制测试代码三、效果展…

【C++专题】static_cast, dynamic_cast, const_cast探讨

首先回顾一下C类型转换&#xff1a;C类型转换分为&#xff1a;隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”&#xff0c;包括以下几种情况&#xff1a;1) 算术转换(Arithmetic conversion) : 在混合类型的 算术表达式中, 最宽的数据类型成为目标转换…

浅谈程序员的职业规划

不知不觉参加工作成为程序员已经4年多&#xff0c;记得上高中的时候&#xff0c;从网络上知道了很多IT精英创业成功的例子&#xff0c;如没有读过大学的“汽车之家”创始人李想、facebook创始人马克扎克伯格&#xff0c;让我觉得互联网是个充满梦想的舞台&#xff0c;只要有想法…

python调用数据库数据创建函数_Pyhton应用程序数据库函数封装

1.函数2.迭代器3.递归4.数据库函数5.fetchall函数1.函数&#xff1a;实现指定功能代码的集合def 函数名( ) :2.在python中没有括号&#xff0c;函数体以缩进的方式进行展示快捷键&#xff1a;tab实现了函数的缩进&#xff0c;shifttab实现前移3.调用&#xff1a;函数名( )作用&…

电子计算机和多媒体教材分析,人教新课标:电子计算机与多媒体教材分析

电子计算机与多媒体(4篇)主要内容&#xff1a;本文简要地介绍了电子计算机的发明到多媒体的运用的基本情况&#xff0c;展示了电子计算机的飞速发展和灿烂前景。课文从美国史密森博物馆里存放的世界上第一台电子计算机写起&#xff0c;先概括地交代了电子计算机的飞速发展和它在…

安卓工控主板运行时会自动重启_工控主板在工业自动化中的应用

原标题&#xff1a;工控主板在工业自动化中的应用大家都知道随着科技的发展对于工控主板的用途和应用大大超出了工业自动化的范围&#xff0c;而对于本文联智通达小编将仅坚持工业自动化范围内的应用。首先跟随联智通达小编看一下制造以及工业PC的应用以及如何使该领域的工业自…

am335x gpio驱动

任务: GPIO0_19(带下拉)作为中断, GPIO0_20(带上拉)和GPIO1_14作为输出管脚&#xff0c;GPIO0_11(带下拉)和 GPIO1_15(带上拉)。并编写驱动程序。

海量小文件存储

海量小文件存储 [转自:http://www.fuchaoqun.com/2009/04/deal-with-tons-of-small-files/] Web2.0网站&#xff0c;数据内容以几何级数增长&#xff0c;尤其是那些小文件&#xff0c;几K&#xff5e;几百K不等&#xff0c;数量巨多&#xff0c;传统的文件系统处理起来很是吃力…

与0xf2值相等的是python_腾讯笔试题涵盖的基础知识

1.下列减少内存碎片的方法有哪些是正确的&#xff1f;增加实际申请和释放的次数频繁调用的子函数尽量使用栈内存系统申请一大块内存&#xff0c;自己实现内存分配和释放&#xff0c;定时清理内存降低虚拟内存的大小解答&#xff1a;答案2,3是正确的。属于操作系统中内存管理的问…

重庆大学 计算机组成原理,重庆大学计算机组成原理集(含部分)解决方案.doc

《计算机组成原理》试题集一、选择题在每小题列出的四个备选项中只有一个是符合题目要求的&#xff0c;请将其代码填写在题后的括号内。1&#xff0e;反映计算机基本功能的是( )A)操作系统 B)系统软件 C)指令系统 D)数据库系统2&#xff0e;若二进制数为1111.101&#xff0c;则…

diff算法_vue源码解读 diff算法

导语 最近碰到部分业务场景&#xff0c;代码逻辑需要了解"数组变更后&#xff0c;具体变更了哪一些元素&#xff0c;以及变更的位置.."。于是仔细研究并覆写了一遍针对数组变化的diff算法&#xff0c;在这里做下diff算法的逻辑分享&&源码解读一.介绍前的准备…

Linux驱动模块编译进内核中

BQ27501驱动编译进内核 一、 驱动程序编译进内核的步骤 在 linux 内核中增加程序需要完成以下三项工作&#xff1a; 1. 将编写的源代码复制到 Linux 内核源代码的相应目录&#xff1b; 2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项&#xff1b; 3. 在…

oracle 的进程

W000: Wnnn命名为W000&#xff0c;W001&#xff0c;W002.....&#xff0c;由smcO动态产生执行上述相关任务。 Pmon: Pmon后台进程负责一下的工作:进程异常终止,会话被杀掉,事务超过空闲时间,网络连接超时,将实例信息注册到监听器上,手工注册 altersystem register; Pmon进程的清…

请简述计算机硬件系统的运行过程,操作系统简述题

✔什么是操作系统&#xff1f;它的功能&#xff1f;操作系统是控制和管理计算机硬件和软件资源&#xff0c;合理地组织计算机工作流程以及方便用户使用计算机系统的程序的集合。功能&#xff1a;处理机管理&#xff0c;存储器管理&#xff0c;I/O设备管理和文件管理以及作为操作…

python闭环最短路径_最短路径算法的实现(dijskstra):Python

dijskstra最短路径算法步骤&#xff1a;输入&#xff1a;图G(V(G),E(G))有一个源顶点S和一个汇顶点t&#xff0c;以及对所有的边ij属于E(G)的非负边长出cij。输出&#xff1a;G从s到t的最短路径的长度。第0步&#xff1a;从对每个顶点做临时标记L开始&#xff0c;做法如下&…

黑群晖二合一安装不了套件_玩PT还是得安装transmission,星际蜗牛安装黑群晖制作家用NAS...

原文作者&#xff1a;pt老萌新To小白&#xff1a;黑群晖docker安装PT神器transmission——星际蜗牛安装黑群晖制作家用NAS的折腾日记写在前面&#xff1a;里面的技术方法不是我原创的&#xff0c;都是网上找的&#xff0c;侵删。折腾的过程记录是原创的(好像没啥原创的了)&…