剑与远征_python_自动战斗

2023-05-16

继上一个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://img-blog.csdnimg.cn/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
image01
img015.png
在这里插入图片描述
img02.png
在这里插入图片描述
img03.png
在这里插入图片描述

创建与代码平级的目录JYYZimg 把四张图放进去 名字对应保存就可以用了 如果是adb或cv2的问题可以去看我写的yys脚本那个博客 里面都有记录

带走的哥哥们记得给个赞

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑与远征_python_自动战斗 的相关文章

随机推荐