剑与远征_python_自动战斗
作者:互联网
继上一个yys脚本后又写了一个剑与远征的小脚本
今天刚写的 用了一会 感觉还不错 虽然功能单一 但是还是很稳定所以就拿来和大家分享一下 不多bb 上代码
# coding=gbk
# 声明解码方式
# 导入相关模块
import os
import cv2
import random
import time
# -------------------Settings-----------------------
class Settings():
def __init__(self):
# 开启1范围
self.start1_x = [470, 630]
self.start1_y = [1640, 1680]
# 开启1.5范围
self.start15_x = [470, 630]
self.start15_y = [1440, 1515]
# 开启2范围
self.start2_x = [400, 600]
self.start2_y = [1800, 1855]
# 关闭范围
self.end_x = [129, 300]
self.end_y = [1620, 1740]
s = Settings()
# -----------------y_functions--------------------
class Y_function(object):
# 截屏并返回图片
def get_screen(self):
# 截屏口令
cmd_get = 'adb shell screencap -p /sdcard/img000.png'
# 发送图片口令
cmd_send = 'adb pull sdcard/img000.png ./JYYZimg'
# 截屏和发送操作
os.system(cmd_get)
os.system(cmd_send)
img = cv2.imread('./JYYZimg/img000.png', 0)
return img
# 对比图片返回相似度
def match(self, img1, template):
"""img1代表待匹配图像, template代表模板, 模板是小图"""
res = cv2.matchTemplate(img1, template, cv2.TM_CCOEFF_NORMED)
# .max()方法返回的是一个类似匹配度的参数
# mexres是匹配度 return maxres 是将匹配度返回 供调用函数者使用
maxres = res.max()
return maxres
# 在范围内选择一个随机点
def get_randxy(self, x, y):
"""产生一个在x,y二维区域内的随机位置,x,y为两个元素的列表,变量范围"""
xc = random.randint(x[0], x[1])
yc = random.randint(y[0], y[1])
return xc, yc
# 随机选择间隔时间
def get_randtime(self, a, b):
"""产生a,b间的随机时间延迟"""
time.sleep(random.uniform(a, b))
# 对屏幕位置进行点击
def click(self, x, y):
"""输入两个二维列表,表示要点击的位置的x坐标,y坐标"""
# 通过adb将要点击的点传入手机端 实现点击
cmd_click = 'adb shell input tap {} {}'.format(x, y)
os.system(cmd_click)
def perform_click(self, x_range, y_range):
# 调用get_randxy方法生成随机位置
xc, yc = self.get_randxy(x_range, y_range)
# 调用click方法对随机出来的位置进行点击
self.click(xc, yc)
def begin(self):
t_start1 = cv2.imread('./JYYZimg/img01.png', 0)
t_start15 = cv2.imread('./JYYZimg/img015.png', 0)
t_start2 = cv2.imread('./JYYZimg/img02.png', 0)
t_end = cv2.imread('./JYYZimg/img03.png', 0)
return t_start1,t_start15, t_start2, t_end
def matchT(self, t_start1,t_start15, t_start2, t_end):
while True:
time.sleep(2)
# get_screen方法实现的是截屏并保存 return img
img1 = self.get_screen()
# matct返回的结果是cv2.max()方法的结果
res1 = self.match(img1, t_start1)
res15 = self.match(img1, t_start15)
res2 = self.match(img1, t_start2)
res3 = self.match(img1, t_end)
# >大于0.97代表图片匹配上了 跳出循环 出去执行点击方法![在这里插入图片描述](https://www.icode9.com/i/ll/?i=2020011321184071.png)
# 0.97属于类似匹配度的参数 匹配度越高就是越像
if res15 > 0.97:
self.perform_click(s.start15_x, s.start15_y)
elif res1 > 0.97:
self.perform_click(s.start1_x, s.start1_y)
elif res2 > 0.97:
self.perform_click(s.start2_x, s.start2_y)
elif res3 > 0.97:
self.perform_click(s.end_x, s.end_y)
else:
time.sleep(2)
print('匹配失败等待四秒')
if __name__ == '__main__':
Y = Y_function()
t_start1, t_start15, t_start2, t_end = Y.begin()
Y.matchT(t_start1,t_start15, t_start2, t_end)
附上图片:
img01.png
img015.png
img02.png
img03.png
创建与代码平级的目录JYYZimg 把四张图放进去 名字对应保存就可以用了 如果是adb或cv2的问题可以去看我写的yys脚本那个博客 里面都有记录
带走的哥哥们记得给个赞
Python_zhou 发布了32 篇原创文章 · 获赞 25 · 访问量 338 私信 关注标签:python,self,start1,cv2,start2,自动,远征,click,png 来源: https://blog.csdn.net/Python_zhou/article/details/103964540