Python制作yys彻底解放双手(代码篇)

2023-11-19

我看到好多人想要具体的代码,但是我希望你抱着学习的心态来做这件事情,写该脚本的意义是为了更好的学习python语言而不是进行游戏,千万不要本末倒置
文章相关的问题!!!!
1.qt界面如下:


在这里只要点击开始按键就可以自动进行三张图片的对比

开始

在这里插入图片描述

中间

在这里插入图片描述

结束

在这里插入图片描述

在主程序中主要进行qt界面的初始化,关于程序进行放在qt界面的槽中进行

在这里需要理解pyqt的信号与槽的关系,并且需要了解多线程的相关内容,因为我主要是做硬件方面py只是业余爱好,所以这里就不多进行介绍了,想要学习的自己进行网上了解

main.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import yysqt

app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = yysqt.Ui_YYS()
ui.setupUi(MainWindow)
MainWindow.show()

sys.exit(app.exec_())

在setting中主要是相关变量的定义,起到文件与文件之间变量调用的作用
settings.py
class Settings():
    """储存所有阴阳师脚本的设置类"""
    start_x = None
    start_y = None
    # 结束点击范围
    end_x = None
    run = None
    text = None

    def set_x(x):
        Settings.start_x = x

    def set_y(y):
        Settings.start_y = y

    def end_x(x_y):
        Settings.end_x = x_y

    def get_x():
        return Settings.start_x

    def get_y():
        return Settings.start_y

    def get_end_x():
        return Settings.end_x


    def set_run(run):
        Settings.run = run

    def get_run():
        return Settings.run

    def set_text(text):
        Settings.run = str(text)

    def get_text():
        return Settings.text

yysqt中主要是设置pyqt的相关界面

在这里引用了多线程可能这个程序还是不够完美!需要密切注意,并且我在这里想要往qt界面传递一个动态参数到现在为止没有很好的解决!!!!

yysqt.py
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from settings import Settings
import yys
from PyQt5 import QtCore, QtGui, QtWidgets
import threading


class Ui_YYS(object):
    def setupUi(self, YYS):
        YYS.setObjectName("YYS")
        YYS.resize(533, 297)
        self.centralwidget = QtWidgets.QWidget(YYS)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(190, 110, 114, 51))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.pressed.connect(self.click_success)

        # self.pushButton.pressed.connect(self.print_text)
        self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(11, 11, 508, 90))
        self.textBrowser.setObjectName("textBrowser")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(101, 220, 291, 20))
        self.label.setObjectName("label")
        # self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        # self.lineEdit.setGeometry(QtCore.QRect(10, 180, 501, 31))
        # self.lineEdit.setObjectName("lineEdit")
        YYS.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(YYS)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 533, 26))
        self.menubar.setObjectName("menubar")
        YYS.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(YYS)
        self.statusbar.setObjectName("statusbar")
        # self.lineEdit.textChanged.connect(self.print_text)
        YYS.setStatusBar(self.statusbar)
        self.retranslateUi(YYS)
        QtCore.QMetaObject.connectSlotsByName(YYS)

    def retranslateUi(self, YYS):
        _translate = QtCore.QCoreApplication.translate
        YYS.setWindowTitle(_translate("YYS", "阴阳师脚本"))
        self.pushButton.setText(_translate("YYS", "点击开始"))
        self.textBrowser.setHtml(_translate("YYS", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">使用说明!!!</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">1:使用雷电模拟器打开阴阳师并且将模拟器设置分辨率为 </p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"> ***平板版 960x540</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2:将游戏窗口放屏幕的左上角,并且不要遮挡游戏窗口</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">3: 完成上述操作以后点击开开始</p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">     ******作者:BingYiii  联系qq:981725514 ****</p></body></html>"))
        self.label.setText(_translate("YYS", "作者:BingYIII 联系方式:qq981725514"))


    def click_success(self):
        text = self.pushButton.text()
        if text == "点击开始":
            self.pushButton.setText("点击停止")
            Settings.set_run(1)
            t = threading.Thread(target=yys.yys_run)
            t.start()
        if text == "点击停止":
            self.pushButton.setText("点击开始")
            Settings.set_run(0)
            print(Settings.get_run())


y_functions文件中进行截取屏幕并匹配点击的相关操作

在截取屏幕的时候需要注意,并且需要着重注意么个cv匹配的算法,在计算坐时候可能有所出入注意!!!!

y_functions.py
import pyautogui
import cv2
import random
import time
import settings as Settings
from pymouse import PyMouse


def get_screen():
    # 截屏口令 保存图片
    img = pyautogui.screenshot(region=(0,0, 1280, 720))
    img.save('./img/screen_img.png')
    img = cv2.imread('./img/screen_img.png', 0)
    return img


def match(img1, template):
    """img1代表待匹配图像, img2代表模板"""

    res = cv2.matchTemplate(img1, template, cv2.TM_SQDIFF_NORMED)
    mn_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    tl = min_loc
    Settings.Settings.set_x(tl)
    t_start = cv2.imread('./img/start.png', 0)
    th, tw = t_start.shape[:2]
    y_setting = (int(tl[0]) + tw, int(tl[1]) + th)
    Settings.Settings.set_y(y_setting)
#   maxres = res.max()
    return mn_val


def get_randxy(x, y):
    """产生一个在x,y二维区域内的随机位置,x,y为两个元素的列表,变量范围"""
    xc = int((x[0]+y[0])/2)
    yc = int((x[1]+y[1])/2)

    # xc = random.randint(x[1], x[0])
    # yc = random.randint(y[1], y[0])
    return xc, yc


def get_randtime(a, b):
    """产生a,b间的随机时间延迟"""
    time.sleep(random.uniform(a, b))


def click(x, y):
    """输入两个二维列表,表示要点击的位置的x坐标,y坐标"""
    m = PyMouse()
#    cmd_click = 'adb shell input tap {} {}'.format(x, y)
    m.click(x, y, 1)

y_functions2文件中对cv模板和截取的图片进行对比
y_functions2.py
import y_functions as yf
import cv2
import settings
import yysqt



# 准备模块
# 导入模板,设置刷御魂次数模块
def begin():
    t_start = cv2.imread('./img/start.png', 0)
    t_end = cv2.imread('./img/end.png', 0)
    t_first_end = cv2.imread('./img/end0.png', 0)
    # n = input("请输入刷御魂次数:")
    # n = int(n)
    return t_start,t_end, t_first_end


# 匹配模块
# 检测模板,点击屏幕
def matchT(t,x):

    img1 = yf.get_screen()
    res = yf.match(img1, t)
    # settings.Settings.set_text(res)
    # yyqt = yysqt.Ui_YYS()
    # yyqt.print_text(res)
    print(res)
    if x == 1:
        value = 2e-05
    if x == 2:
        value = 0.1
    if x == 3:
        value = 0.1
    if res < value:
        # 匹配成功
        flog = True
    else:
        # yf.get_randtime(0.1, 0.2)
        flog = False
    if flog == True:
        x = settings.Settings.get_x()
        y = settings.Settings.get_y()
        print(x[0], x[1])
        print(y[0], y[1])
        sx, sy = yf.get_randxy(x, y)
        yf.get_randtime(0.5, 1)

        yf.click(sx,sy)

        print("敲击成功")
        yf.get_randtime(0.5, 1)


yys文件中进行界面和程序的交互
yys.py
import y_functions2 as yf2
from settings import Settings


def yys_run():
    val = Settings.get_run()
    print(val)
    if val == 1:
         while True:
            # 导入准备模板
            t_start, t_end,t_first_end= yf2.begin()
            # n为计划刷御魂次数,通过begin函数输入
            # 检测挑战模板
            yf2.matchT(t_start,1)
            yf2.matchT(t_first_end,2)
            yf2.matchT(t_end,3)
            val = Settings.get_run()
            if val == 0:
                break


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

Python制作yys彻底解放双手(代码篇) 的相关文章

随机推荐

  • react组件状态同步-状态提升

    假设定义组件TemperatureInputSon import React from react class TemperatureInputSon extends React Component constructor props su
  • Linux安装部署Tomcat服务器

    Tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器 属于轻量级应用服务器 在中小型系统和并发访问用户不是很多的场合下被普遍使用 是开发和调试JSP 程序的首选 对于一个初学者来说 可以这样认为 当在一台机器上配置好
  • 【MATLAB第19期】基于贝叶斯Bayes算法优化CNN-LSTM长短期记忆网络的单列时间序列模型及多输入单输出回归预测模型

    基于贝叶斯Bayes算法优化CNN LSTM长短期记忆网络的单列时间序列模型及多输入单输出回归预测模型 前言 前面在 MATLAB第8期 讲解了基于贝叶斯Bayes算法优化LSTM长短期记忆网络的时间序列预测模型 即单输入数据时间序列预测
  • 从“玩枪”到“玩键盘”,退伍军人到程序员的华丽转型

    前言 我的生活平淡无奇 甚至可以说毫无希望 如果你了解我以前的生活 再看到我现在的境况 一定会惊讶 为什么一个人的变化会如此之大 叛逆 事情要从上学时候说起 我从小就是一个叛逆的孩子 贪玩 不爱学习 喜欢 舞枪弄棒 所以在学校的成绩一直都不
  • win10下安装vivado 2018.3之后ise14.7 的impact 无法使用

    软件版本号 操作系统win10 ise14 7 vivado 2018 3 ise14 7 在win10里面问题总结 1 ise14 7 闪退问题 比较好解决 论坛上比较多的解决方法 2 ise 14 7 windows 10 版本的ise
  • Extjs ToolBar动态更改图标

    使用setIconClass方法 Ext getCmp javaEye setIconClass javaEyeCss 其中 javaEye 是toolbar里的一个图标项 javaEyeCss 是css里定义的一个样式 形如 javaEy
  • PHP实现简易版区块链

  • 通过wireshark抓取telnet登陆密码

    笔者学校有一台设备 ip地址是 192 168 84 10 先打开wireshark捕获无线网卡 使用telnet登陆如图所示 按下回车 笔者这里输入的密码是 A603 现在回到wireshark停止抓包 并且在filter处输入如下的过滤
  • 将uboot,kernel,rootfs下载到开发板上

    1 为什么要下载 所谓下载 也称烧录 部署 1 1 什么是u boot Hi3518EV200 单板的 Bootloader 采用 U boot u boot是一种普遍用于嵌入式系统中的Bootloader Bootloader是在操作系统
  • input type=file 获取选择文件名称、路径方法及input上传按钮美化

    获取文件名 document getElementById upload files 0 name 获取文件路径 document getElementById upload value 页面效果 原生代码
  • Git使用教程总结

    第一篇 SVN VS GIT 转载 https blog csdn net daybreak1209 article details 78216798 svn 集中式 中央版本控制 n个版本 联网 局域网 同步 git 分布式 没有中央的概
  • Spring的多线程事务

    使用编程式事务手动管理多线程事务的生命周期 通过原子类 CountDown去控制多线程事务的全局提交或回滚 public class ThreadTransactionUtil 事务管理 private DataSourceTransact
  • CSS深入理解之line-height

    慕课学习 gt 前端开发 gt HTML CSS gt CSS深入理解之line height line height 一 line height的定义 行高line height 两行文字基线之间的距离 1 什么是基线 字符 x 下边缘
  • STM32中断标志:先清理后清理的区别

    先上总结 再闲聊爬坑过程 进入中断函数后 先清理中断标志 再执行其它动作 爬坑过程 各种教程中 都只解释中断的机制 使用 但对于中断标志的清理顺序 没多少官方准确的资料 今天在F429的代码里 又遇到问题 进中断后卡死跳不出来 各种排查没发
  • Gavin Wood Web3峰会最新演讲:波卡不是智能合约平台,而是平台的平台(全文)...

    在波卡上 每个平台都在用高性能 高效率和最优的方式做着自己擅长的事 而不必让它们的用户用底层平台的货币进行支付 从而将可定制性和灵活性提高了一个台阶 本文谨代表作者个人观点 不代表火星财经立场 该内容旨在传递更多市场信息 不构成任何投资建议
  • WingIDE-配色方案(个人喜好)

    依次选择 Edit gt Preferences gt User Interface gt Color Palette 然后选择自己喜欢的主题 我目前比较喜欢的是 Monokai 当然如果自己觉得不好看 可以依据自己喜好配色
  • VScode扩展商店不显示插件问题

    VScode扩展商店不显示插件问题 情况一 代理服务器异常 参考文章 https blog csdn net wodebokecsdn article details 89239769 文件 首选项 设置 应用程序 代理服务器 情况二 设备
  • rslidar-sdk安装编译以及遇到的问题和解决

    rslidar sdk的安装编译 可以参考官方提供的方法 rslidar sdk 1 1 通过Git下载 git clone https github com RoboSense LiDAR rslidar sdk git cd rslid
  • 计算机中api-ms-win-crt-runtime-l1-1-0.dll丢失怎么解决

    我们在电脑上安装软件或者游戏时 可能会遇到api ms win crt runtime l1 1 0 dll丢失 错误甚至找不到等情况 从而直接导致程序或者游戏无法启动 遇到这种问题别慌 可能有些朋友会绝对是软件安装或游戏安装失败 其实并不
  • Python制作yys彻底解放双手(代码篇)

    我看到好多人想要具体的代码 但是我希望你抱着学习的心态来做这件事情 写该脚本的意义是为了更好的学习python语言而不是进行游戏 千万不要本末倒置 文章相关的问题 1 qt界面如下 在这里只要点击开始按键就可以自动进行三张图片的对比 开始