阴阳师自动刷御魂python实现

news/2024/11/7 15:36:44/

感谢https://www.cnblogs.com/eatPython/p/5958850.html这位大佬提供的接口函数

感谢http://www.360doc.com/content/18/0121/22/1513309_723986820.shtml这位大佬提供的截图

其实只要理顺原理,自己并没有多少自己的代码,基本都是摘抄别人的,拼凑而成

1、首先导入需要用到的库文件

import time
import win32gui, win32ui, win32con, win32api
from ctypes import *
import cv2
import numpy as np
import random

2、其次是定义鼠标的一些动作,代码出自本文提到的第一个大佬

def clickLeftCur():#单击win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN|win32con.MOUSEEVENTF_LEFTUP, 0, 0)def moveCurPos(x,y):#移动鼠标windll.user32.SetCursorPos(x, y)def getCurPos():#获得鼠标位置信息,这个再实际代码没用上,调试用得上return win32gui.GetCursorPos()

3,、截图代码出自第二位大佬

def window_capture(filename):hwnd = 0  # 窗口的编号,0号表示当前活跃窗口# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)hwndDC = win32gui.GetWindowDC(hwnd)# 根据窗口的DC获取mfcDCmfcDC = win32ui.CreateDCFromHandle(hwndDC)# mfcDC创建可兼容的DCsaveDC = mfcDC.CreateCompatibleDC()# 创建bigmap准备保存图片saveBitMap = win32ui.CreateBitmap()# 获取监控器信息MoniterDev = win32api.EnumDisplayMonitors(None, None)w = MoniterDev[0][2][2]h = MoniterDev[0][2][3]# print w,h   #图片大小# 为bitmap开辟空间saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)# 高度saveDC,将截图保存到saveBitmap中saveDC.SelectObject(saveBitMap)# 截取从左上角(0,0)长宽为(w,h)的图片saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)saveBitMap.SaveBitmapFile(saveDC, filename)

4、运行代码

filename = "blackground.jpg"#储存的文件名
while True:time.sleep(2)#设置隔2秒运行一次#截图window_capture(filename)#对整个屏幕截图,并保存截图为filename#原图srcImg = cv2.imread(filename)#读取filename的截图文件,这里应该是可以对截图函数进行修改,不用产生中间的文件,截图直接与ndarray形式存在begin = cv2.imread('begin.png')#读取点击开始战斗的 标准图像end1 = cv2.imread('end1.png')#结束之后点击屏幕任意位置,开宝箱end2 = cv2.imread('end2.png')#开完宝箱后,点击任意结束本轮
    #用了一个最简答的图像相见的方式来完成以下动作,具体图示往下翻begin_meanValue = np.mean(srcImg[729:786,1275:1447,:] - begin)#检测截图是否包含开始战斗end1_meanValue = np.mean(srcImg[228:350,774:940,:] - end1)#检测战斗是否结束end2_meanValue = np.mean(srcImg[570:786,847:1083,:] - end2)#检测最后的界面#print(begin)if begin_meanValue < 50:#界面运行到由战斗开始就点击战斗开始move_x = random.randint(1290,1430)#设计随机点击坐标点,防止被检测,虽然不知道有没效果,初衷设置如此move_y = random.randint(745,770)moveCurPos(move_x,move_y)clickLeftCur()if end1_meanValue < 50 or end2_meanValue < 50:#检测开宝箱和结束move_x = random.randint(1195,11563)move_y = random.randint(651,832)moveCurPos(move_x,move_y)clickLeftCur()

5、如图两图,首先从大图截出开始战斗区域当做标准图像,并记录图像位置的坐标,运行代码后,每个2秒截图,并取出这个位置的内容,跟标准凸图像做减法,若是在有战斗开始界面,,则他们的差值会很小,对这块区域求均值,设定一个小的阈值进行判断所含的内容是否合适。另外两个也是一样的原理

6、这种方式需要预先制作标准图像,换了电脑需要重新制。其实可以截图开始战斗区域,然后用opencv的函数进行图像匹配寻找该点击的区域,另外可以增加刷副本肝狗粮,御灵,觉醒之类。最好制作个图形界面。如果一部电脑刷开,只要增加两个窗口的点击位置就好啦

7、真的感慨python的强大,这里抄一段那里抄一段就可以完成自己所要的功能。技术交流,被封号别找我(手动戴墨镜)


http://www.ppmy.cn/news/663431.html

相关文章

阴阳师脚本-七三

阴阳师脚本-七三 官网更新功能下载地址使用问题截图 官网 脚本官网 更新 2019-09-21 阴阳师3周年UI更新 https://blog.csdn.net/sakaljw159/article/details/1011068092019-07-21 脚本首次制作完成 功能 自动刷御魂&#xff08;单人、组队&#xff09;集火标记 下载地址 …

设计消息模块的业务层Web层

目录 业务层 一、定义Message业务接口 二、定义Message业务实现类 Web层 一、获取分页消息列表 二、根据ID查询消息 三、把未读消息更新成已读消息 四、删除消息 业务层 一、定义Message业务接口 创建 MessageService.java 类 public interface MessageService {pub…

两台windows电脑之间使用ssh链接

前提条件&#xff1a;windows电脑要有登录密码 一台电脑开启电脑端ssh服务&#xff1a; ①开启开发人员模式&#xff1a;开始 → 设置 → 更新和安全 →开发者选项 &#xff0c;把开发人员模式的开关调到“开” ②安装 OpenSSH服务器&#xff1a;开始 → 设置 → 应用 →可选功…

A4宣传单正常规格是210*285mm,每边各留3mm出血位。

A4宣传单正常规格是210*285mm,上下各留3mm出血位。 纸张的开数只需要各记住一个常用的尺寸就可以了,一般我们只要记住正度16开和大度16开的规格,然后其他的规格可以推算出来,如大16开为

PCU-285锡膏粘度计优点及特点

PCU-285-MALCOM锡膏粘度计优点&#xff1a; PCU-285可以基于JIS Z3284标准一键应用&#xff0c;可以高精度的测试锡膏的粘度&#xff0c;Ti值&#xff0c;R等数值。 新的恒温槽设计改善了测试完样品后清洗传感器的工序&#xff0c;另外恒温槽功率加大&#xff0c;使得温控更加…

cs285深度强化学习课程笔记-lec1

cs285深度强化学习课程笔记 lec1深度强化学习的概念核心观点智能机器必须能学会适应深度学习有助于处理非结构化的环境强化学习提供了一种行为范式深度强化学习提供了端到端的方案。 lec1深度强化学习的概念 核心观点 智能机器必须能学会适应 Intelligent machines must be …

Linux——3Linux用户和权限

目录 3.1 认识root用户 root用户&#xff08;超级管理员&#xff09; su 和 exit命令 sudo命令 3.2 用户、用户组 3.3 修改权限控制 - chmod 3.4 修改权限控制 - chown 3.1 认识root用户 root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采…

CF 285D 285E

大家好&#xff0c;时隔一年&#xff0c;我复活了&#xff01; 这两题并没有什么关系&#xff0c;只是一起A掉了就顺便一起写个题解吧…… CF 285D 打表 看了好久没有什么想法&#xff0c;猜测答案不会太大就直接打表。 发现n为偶数答案就是0。 n为13可以秒出&#xff0c…