ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

剑与远征_python_自动战斗

2020-01-13 21:42:47  阅读:328  来源: 互联网

标签:python self start1 cv2 start2 自动 远征 click png


继上一个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
image01
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有