qq游戏大家来找茬外挂(QQ游戏 找茬脚本)

发布时间:2025-12-10 19:23:52 浏览次数:4

QQ游戏 找茬脚本-qq游戏大家一起来找茬辅助

QQ游戏 找茬脚本前言毕设干扰了前一段记录笔记的进度,闲暇时刻用找茬消遣,但有时发现五处不同仅仅找出两三处,这种呼之欲出却无法求得的感觉非常难受。于是制作了适用于QQ游戏大厅–>大家一起来找茬的辅助器,此篇博客的笔记由函数与打包组成。思路界面–>屏幕截取–>对比找出不同–>鼠标自动点击一、界面运用最近接触到的pyqt5,界面的设计要点:小巧。classwindow(QMain…_大家来找茬脚本

前言

毕设干扰了前一段记录笔记的进度,闲暇时刻用找茬消遣,但有时发现五处不同仅仅找出两三处,这种呼之欲出却无法求得的感觉非常难受。于是制作了适用于QQ游戏大厅–>大家一起来找茬 的辅助器,此篇博客的笔记由函数与打包组成。

思路

界面–>屏幕截取–>对比找出不同–>鼠标自动点击

一、界面

运用最近接触到的pyqt5,界面的设计要点:小巧。

class window(QMainWindow):def __init__(self):    super().__init__()    self.resize(300,50)    self.move(100,100)    self.setWindowTitle('连连看作弊器')    #text    self.text = QTextEdit(self)    self.text.resize(150,25)    self.text.setText('处理信息')    #button start    self.button = QPushButton('开始',self)    self.button.clicked.connect(self.grabphoto)    self.button.resize(150,25)    self.button.move(150,0)    #button stop    self.button1 = QPushButton('停止',self)    self.button1.clicked.connect(self.stop)    self.button1.resize(150,25)    self.button1.move(150,25)    self.button.setShortcut('CTRL+C')    #QComboBox    self.comboBox_1 = QComboBox(self)    self.comboBox_1.resize(150,25)    self.comboBox_1.move(0,25)    self.comboBox_1.addItem("--请选择--")    self.comboBox_1.addItem("仅供提示")    self.comboBox_1.addItem("机器暴力模式")    self.comboBox_1.currentText()

希望我今天分享的这篇文章可以帮到您。


combox的读取 currentText和Index可以直接使用。
快捷键设置setShortcut,需要鼠标焦点于界面

二、屏幕截取

虽然有通过句柄获取窗口信息的截图方法,但是考虑到后序辨别效果不佳的时候还需有人操作,所以无法采用后台挂机的方法。
Imagegrab截图时间间隔长,不建议使用。
采用速度较快的屏幕截取的方式:PIL库中pyautogui.screenshot。

        img1 = pyautogui.screenshot(region=[541,468,380,285])        img2 = pyautogui.screenshot(region=[x,y,length,height])

注:截下来的图需要转为数组才可提供处理。

三、图片对比

这一项是关键,曾简单认为图片像素相减不就功到渠成?
但发现游戏提供的图片在亮度和色调上有细微的不同,相减后呈现很诡异的颜色。
直到我在一篇博客上找到:图片反色相合,差异会十分明显

img3 =ImageChops.invert(img2)img4 = Image.blend(img1,img3,0.5)img5 = np.array(img4)(网络源码)


这幅图就是辅助器根本功能之一,代码、逻辑简单到我不敢相信,但肯定要补上自动点击功能才能算较为圆满。
canny边缘提取 –>闭运算–>findcontours–>符合要求?–>改变闭运算参数–>…直到符合要求或者超出限制。

   img6 = cv2.Canny(img5,90,150)       kernel = np.ones((20,20),np.uint8)       closing = cv2.morphologyEx(img6,cv2.MORPH_CLOSE,kernel)       self.h = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)       a = 18       while len(self.h[0]) > 10  and   a > 1 :           kernel = np.ones((a, a), np.uint8)           closing = cv2.morphologyEx(img6, cv2.MORPH_CLOSE, kernel)           self.h = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)           self.text.setText(f'第{18-a}次处理')           a -= 1   counters = self.h[0]   #五个轮廓   xall = yall = 0   if len(counters) < 15:       for i1 in range(len(counters)):           for i2 in range(len(counters[i1])):               xall += counters[i1][i2][0][0]               yall += counters[i1][i2][0][1]           a = xall/len(counters[i1]) + 541           b = yall/len(counters[i1]) + 468           if self.comboBox_1.currentIndex() == 2:               pyautogui.click(a,b,interval=0.5,clicks=1,button='left')           xall = yall = 0   cv2.imshow('heibai',closing)   cv2.imshow('caise', img5)

findcontours 在opencv3中返回三个参数,其中首项轮廓点是我最为需要的。

counters = h[0]  第一个轮廓点集合counters[1] 第一个轮廓的第一个点的信息counters[1][0][0] 第一个轮廓的第一个点的横坐标
pyautogui.click(a,b,interval=0.5,clicks=1,button='left')

我还应该注意的是若识别轮廓过多,会丧失鼠标的控制权(预处理不合适),应该加以限制。

总结

当不同十分靠近的时候,膨胀可能会相连,识别出的点会小于五个,只能通过肉眼+辅助图像完成挑战。

打包 pyinstaller

pip install pyinstaller

命令行运行:

pyinstaller --version

确认安装成功。
我犯下错误原因是:仅仅在pycharm中删除了3.6.6编译器,但却没有在工作路径path中删除,以致于每次打包寻找依赖库的时候错误寻址。

我的电脑–属性–左侧,高级系统设置–高级–环境变量–Path–上下移动改变路径优先级–加入编译器、编译器库路径。

打包操作(细致参数调配百度 pyinstaller 第一条):
cmd – 转到main.py路径 – pyinstaller -F -w main.py – dist 中exe需要与mian.py相同的工作环境(图片,音乐相对路径相同),往上移一层即可。

源码

from PyQt5.Qt import *import cv2import pyautoguiimport sysimport numpy as npfrom PIL import ImageChops,Imageclass window(QMainWindow):    def __init__(self):        super().__init__()        self.resize(300,50)        self.move(100,100)        self.setWindowTitle('连连看作弊器')        #text        self.text = QTextEdit(self)        self.text.resize(150,25)        self.text.setText('处理信息')        #button start        self.button = QPushButton('开始',self)        self.button.clicked.connect(self.grabphoto)        self.button.resize(150,25)        self.button.move(150,0)        #button stop        self.button1 = QPushButton('停止',self)        self.button1.clicked.connect(self.stop)        self.button1.resize(150,25)        self.button1.move(150,25)        self.button.setShortcut('CTRL+C')        #QComboBox        self.comboBox_1 = QComboBox(self)        self.comboBox_1.resize(150,25)        self.comboBox_1.move(0,25)        self.comboBox_1.addItem("--请选择--")        self.comboBox_1.addItem("仅供提示")        self.comboBox_1.addItem("机器暴力模式")        self.comboBox_1.currentText()# LU(541,468)RU(921,468) LD(541,753)RD(921,753) LU(998,468) RU(1378,468) (998,753) (1378,753)#         img1 = pyautogui.screenshot(region=[541,468,380,285])#         img2 = pyautogui.screenshot(region=[998, 468, 380, 285])#         img3 =ImageChops.invert(img2)#         Image.blend(img1,img3,0.5).show()    def grabphoto(self):        self.text.setText('正在进行处理')        # img1 = pyautogui.screenshot(region=[541,468,380,285])        # img2 = pyautogui.screenshot(region=[998,468,380,285])        img1 = Image.open('1.png')        img2 = Image.open('2.png')        img3 =ImageChops.invert(img2)        img4 = Image.blend(img1,img3,0.5)        img5 = np.array(img4)        #膨胀腐蚀做法        '''        kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 定义一个核        dst = cv2.filter2D(img5, -1, kernel=kernel)        dst = cv2.filter2D(dst, -1, kernel=kernel)        cv2.imshow('1',dst)        img3 =ImageChops.invert(img2)        img4 = Image.blend(img1,img3,0.5)        img5 = np.array(img4)        kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 定义一个核        dst = cv2.filter2D(img5, -1, kernel=kernel)        dst = cv2.filter2D(dst, -1, kernel=kernel)        cv2.imshow('1',dst)        gray = cv2.cvtColor(dst, cv2.COLOR_RGB2GRAY)  # 把输入图像灰度化        cv2.imshow("binary2", gray)        gray = np.array(gray)        newgray = np.array(gray)        allgray = gray.sum()/(380*285)        for i in range(380):            for j in range(285):                if gray[j][i] < allgray+50:                    newgray[j][i] = 0                else:                    newgray[j][i] = 255        cv2.imshow("contours", newgray)        kernel = np.ones((2,2),np.uint8)        closing = cv2.morphologyEx(newgray,cv2.MORPH_CLOSE,kernel)        kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))        opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, kernel1)        kernel = np.ones((15,15),np.uint8)        closing = cv2.morphologyEx(opening,cv2.MORPH_CLOSE,kernel)        h = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)        contours = h[0]        i = 5        while len(contours) > 5 and i >0:            kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))            opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, kernel1)            print(i)            i-=1        xall = yall = 0        for i1 in range(len(contours)):            for i2 in range(len(contours[i1])):                xall += contours[i1][i2][0][0]                yall += contours[i1][i2][0][1]            a = xall/len(contours[i1]) + 541            b = yall/len(contours[i1]) + 468            if self.comboBox_1.currentIndex() == 2:                pyautogui.click(a,b,interval=0.5,clicks=1,button='left')            xall = yall = 0        '''        img6 = cv2.Canny(img5,90,150)        kernel = np.ones((20,20),np.uint8)        closing = cv2.morphologyEx(img6,cv2.MORPH_CLOSE,kernel)        self.h = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)        a = 18        while len(self.h[0]) > 10  and   a > 1 :            kernel = np.ones((a, a), np.uint8)            closing = cv2.morphologyEx(img6, cv2.MORPH_CLOSE, kernel)            self.h = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)            self.text.setText(f'第{18-a}次处理')            a -= 1        counters = self.h[0]        #五个轮廓        xall = yall = 0        if len(counters) < 15:            for i1 in range(len(counters)):                for i2 in range(len(counters[i1])):                    xall += counters[i1][i2][0][0]                    yall += counters[i1][i2][0][1]                a = xall/len(counters[i1]) + 541                b = yall/len(counters[i1]) + 468                if self.comboBox_1.currentIndex() == 2:                    pyautogui.click(a,b,interval=0.5,clicks=1,button='left')                xall = yall = 0        cv2.imshow('heibai',closing)        cv2.imshow('caise', img5)    def stop(self):        passif __name__ == '__main__':    app = QApplication(sys.argv)    a = window()    a.show()    sys.exit(app.exec_())
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477