三国杀钓鱼自动化
三国杀钓鱼脚本
前言
本来是想做必杀的,但是后来测试了大约400钓发现纯靠连点没有漏掉的鱼,所以必杀功能就舍弃了。
我pyinstaller打包后运行.exe居然黑屏了???可能是多进程报错处理没写好,反正还是用vscode运行python吧。这样最起码可以保证不死机。
环境配置
python 3.12.7
Visual Studio Code 任何版本
雷电模拟器9
Win11 23H2
雷电模拟器安装
通过官网https://www.ldmnq.com
下载。这个没啥好说的,没有网络问题,直接下一步下一步就行了。
说一下问题我运行vivo端的游戏商店或者三国杀时,发现不能使用。最后查阅信息有一个解决方法是将模拟器的手机型号设置为除了vivo以外的任意一款手机型号。
python 安装
通过官网https://www.python.org/downloads/release/python-3127
找到下面Windows installer (64-bit)
下载。
链接为https://www.python.org/ftp/python/3.12.7/python-3.12.7-amd64.exe
,可以点击此处直接下载
之后,安装python,安装步骤这里不是重点。推荐一位bilibili的up主的视频,根据他的安装即可,后面会讲。
Visual Studio Code 安装
通过官网https://code.visualstudio.com
找到Download for Windows下载即可。
同样安装步骤,后面会讲。
如何安装?
https://www.bilibili.com/video/BV1w7411N7Ti
这个up主的BV1w7411N7Ti
视频可以很好的讲解。记得Visual Studio Code 需要加插件,别忘了看文档安装一下。
脚本
脚本代码-python
这是一段python代码,复制到文本文件更改后缀名为py,即可运行。也可以继续观看B站up的视频稍微学习一点点怎么运行代码。
from PIL import ImageGrab
import multiprocessing
import pygetwindow
import pyautogui
import keyboard
import numpy
import json
import timeclass CustomError(Exception):def __init__(self,message):self.message=message
class Fishing():standWidth=1962standHeight=1115def __init__(self,window):self.window= window self.left=window.leftself.top=window.topself.jsonDir="./position.json"self.config=Noneself.GameInit()def WindowJudge(self,window):return (window.width,window.height)==(Fishing.standWidth,Fishing.standHeight)def GameInit(self):if not self.WindowJudge(self.window):raise CustomError("window size is not match!")else:self.config=dict(json.loads(self.__read(self.jsonDir)))def Click(self,position):pyautogui.click(self.left+position[0],self.top+position[1])def DragTo(self,position,speed):pyautogui.dragTo(self.left+position[0],self.top+position[1],speed,button="left")def __read(self,file):f=open(file,'r',encoding="utf-8")res=f.read()f.close()return res
def StateFishing(CodeRun):while CodeRun.value:#不可更改!if keyboard.is_pressed('esc'):CodeRun.value=Falseexit(0)def FishingRun(codeRun,runTime,slow,stink,again,queue,queueNumber):window = pygetwindow.getWindowsWithTitle('雷电模拟器')[0]fishingGame=Fishing(window)queueNumber.value=0queue.put((window.left,window.top))queue.put(fishingGame.config['slowColor'])queue.put(fishingGame.config['WatchRange'])time.sleep(0.1)queueNumber.value=1queue.put((window.left,window.top))queue.put(fishingGame.config['stinkColor'])queue.put(fishingGame.config['stinkOffset'])queue.put(fishingGame.config['StinkyRange'])time.sleep(0.1)queueNumber.value=2queue.put((window.left,window.top))queue.put(fishingGame.config['againColor'])queue.put(fishingGame.config['AgainRange'])time.sleep(0.1)queueNumber.value=3queue.put((window.left,window.top))queue.put(fishingGame.config['energyColor'])queue.put(fishingGame.config['EnergyRange'])time.sleep(0.1)while runTime>0 and codeRun.value:runTime-=1print("剩余%d次垂钓"%runTime)time.sleep(0.5)fishingGame.Click(fishingGame.config['beginButton'])time.sleep(0.5)fishingGame.DragTo(fishingGame.config['dragToPosition'],0.3)time.sleep(5.3)startTime=time.time()while not stink.value and codeRun:if time.time()-startTime>2:breakfishingGame.Click(fishingGame.config['liftingPosition'])stink.value=Falsewhile codeRun.value:if slow.value :fishingGame.Click(fishingGame.config['fishingButton'])if again.value:fishingGame.Click(fishingGame.config['againButton'])breakcodeRun.value=Falseexit(0)
def WatchSpeed(codeRun,slow,queue,queueNumber):while queueNumber.value!=0:passwindow=queue.get()slowColor=queue.get()watchRange=queue.get()left,top=watchRange["position1"]right,down=watchRange["position2"]while codeRun.value:screenshot =numpy.array( ImageGrab.grab(bbox=(window[0]+left, window[1]+top, window[0]+right, window[1]+down)))screenshotShape=screenshot.shapecnt=0for i in range(screenshotShape[0]):for j in range(screenshotShape[1]):temp=screenshot[i][j]if ((int(temp[0])-slowColor[0])**2+(int(temp[1])-slowColor[1])**2+(int(temp[2])-slowColor[2])**2)**0.5>5:cnt+=1slow.value= cnt/(screenshotShape[0]*screenshotShape[1])<0.6exit(0)
def WatchStinky(codeRun,stink,queue,queueNumber):while queueNumber.value!=1:passwindow=queue.get()stinkColor=queue.get()stinkOffset=queue.get()watchRange=queue.get()left,top=watchRange["position1"]right,down=watchRange["position2"]top+=stinkOffsetdown+=stinkOffsetwhile codeRun.value:screenshot =numpy.array( ImageGrab.grab(bbox=(window[0]+left, window[1]+top, window[0]+right, window[1]+down)))screenshotShape=screenshot.shapecnt=0for i in range(screenshotShape[0]):for j in range(screenshotShape[1]):temp=screenshot[i][j]if ((int(temp[0])-stinkColor[0])**2+(int(temp[1])-stinkColor[1])**2+(int(temp[2])-stinkColor[2])**2)**0.5<50:cnt+=1stink.value= cnt/(screenshotShape[0]*screenshotShape[1])>0.1exit(0)def WatchAgain(codeRun,again,queue,queueNumber):while queueNumber.value!=2:passwindow=queue.get()againColor=queue.get()watchRange=queue.get()left,top=watchRange["position1"]right,down=watchRange["position2"]while codeRun.value:screenshot =numpy.array( ImageGrab.grab(bbox=(window[0]+left, window[1]+top, window[0]+right, window[1]+down)))screenshotShape=screenshot.shapecnt=0for i in range(screenshotShape[0]):for j in range(screenshotShape[1]):temp=screenshot[i][j]if ((int(temp[0])-againColor[0])**2+(int(temp[1])-againColor[1])**2+(int(temp[2])-againColor[2])**2)**0.5<50:cnt+=1again.value= cnt/(screenshotShape[0]*screenshotShape[1])>0.8exit(0)
def WatchEnergy(codeRun,energy,queue,queueNumber):while queueNumber.value!=3:passwindow=queue.get()energyColor=queue.get()watchRange=queue.get()left,top=watchRange["position1"]right,down=watchRange["position2"]while codeRun.value:screenshot =numpy.array( ImageGrab.grab(bbox=(window[0]+left, window[1]+top, window[0]+right, window[1]+down)))screenshotShape=screenshot.shapecnt=0for i in range(screenshotShape[0]):for j in range(screenshotShape[1]):temp=screenshot[i][j]if ((int(temp[0])-energyColor[0])**2+(int(temp[1])-energyColor[1])**2+(int(temp[2])-energyColor[2])**2)**0.5<50:cnt+=1energy.value= cnt/(screenshotShape[0]*screenshotShape[1])>0.8
if __name__ == '__main__':runTime=999# 运行次数codeRun = multiprocessing.Value('b', True)queueNumber = multiprocessing.Value('i', -1)slow = multiprocessing.Value('b', True)stink= multiprocessing.Value('b', True)again= multiprocessing.Value('b', False)queue=multiprocessing.Queue(20)processList=[]processList.append(multiprocessing.Process(target=StateFishing, args=(codeRun,)))processList.append(multiprocessing.Process(target=FishingRun, args=(codeRun,runTime,slow,stink,again,queue,queueNumber)))processList.append(multiprocessing.Process(target=WatchSpeed,args=(codeRun,slow,queue,queueNumber)))processList.append(multiprocessing.Process(target=WatchStinky,args=(codeRun,stink,queue,queueNumber)))processList.append(multiprocessing.Process(target=WatchAgain,args=(codeRun,again,queue,queueNumber)))for each in processList:each.start()for each in processList:each.join()
脚本代码-json
此处需要创建在你的上述python脚本文件的同一目录下,命名为position.json
,注意扩展名为json
。此处由于电脑性能不同需要手动调节一下stinkOffset,负号代表检测区间向上方偏移像素。由于本脚本设计原理是通过监控并对进程通信实现的,所以由于电脑性能问题需要平移一定距离以留充足反应。如果刺鱼点太靠上,数值应当由-32适当调大,如果太靠下应当由-32适当调小。防呆小tips:-40比-32小。
{"stinkOffset":-32,"beginButton":[1625,880],"dragToPosition":[1625,630],"liftingPosition":[1625,880],"fishingButton":[1625,880],"againButton":[1420,950],"WatchRange":{"position1":[1195,135],"position2":[1305,140]},"AgainRange":{"position1":[1250,920],"position2":[1290,960]},"StinkyRange":{"position1":[626,530],"position2":[629,600]},"EnergyRange":{"position1":[1366,189],"position2":[1367,209]},"stinkColor":[239,199,107],"slowColor":[99,77,66],"againColor":[255, 199, 99],"energyColor":[255,170,90]
}
安装库
复制下面的命令,在命令框中输入即可自动安装清华镜像下的依赖库。如果不会安装,还是去看一下上文B站up的视频,会有讲解pip指令的教程,这里也只是需要知道在哪里输入就可以了。或者去搜一下别人的文档,只要能确定在那里输入就可以。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple keyboard pillow pyautogui pygetwindow numpy
说明
- 脚本是针对雷电模拟器做的适配,因此最好不要换模拟器,而且甚至版本都不要变。
- 窗口分辨率设置为
平板版 > 1920x1080(dpi 280)
。代码中做了窗口检测,而且需要做到像素匹配。这里代码中像素匹配是1962x1115
,设置分辨率后应该就是这个尺寸,不要缩放,如果缩放了,改成其他分辨率后再改回来。 - 再runTime中输入此次运行次数,如果不写就会按照我的代码默认参数999次去运行下去了。且换鱼饵是要重开的。
- 脚本是模拟鼠标操作,所以不要让任何可能影响点击的操作置于模拟器前,运行脚本时模拟器必须处于显示的状态,而不是最小化。
- 可以按下
esc
退出,如果前10秒左右按下,其他功能会终止,由于代码中的延迟语句的缘故,代码整体会等一会才能终止。10秒左右之后,可以立即终止。 - 运行时要先进入开始垂钓的界面中运行脚本。
- 本脚本中所有用到的位置信息全部存放在position.json中,可以根据自己的需求进行更改。但是需要注意的是分辨率的更改可能会引起操作、监控位置以及阈值信息的改变,需要手动测试。
By-Round Moon
后继
这个脚本没有对其他电脑做过测试,我的电脑比较好的OMEN,所以运行流畅,但是我的脚本是基于监控信息加进程通信实现的,有可能不同电脑性能不一样导致无法运行,而且刺鱼操作需要调试,但是基本无妨。
另外最近脚本交易盛行,有可能会被他人使用,这里标识一下我的创作日期是2024年10月19日晚22点,为了完成2024年的1024任务所以等到1024当天再发布。本脚本完全开源,欢迎大家交流,且未经本人允许禁止转载。
相关文章:
三国杀钓鱼自动化
三国杀钓鱼脚本 前言 本来是想做必杀的,但是后来测试了大约400钓发现纯靠连点没有漏掉的鱼,所以必杀功能就舍弃了。 我pyinstaller打包后运行.exe居然黑屏了???可能是多进程报错处理没写好,反正还是用vsc…...
在pycharm中使用sqllite
在pycharm中使用sqllite sqllite 简介 SQLite 是一个开源的、轻量级的、关系型数据库管理系统(RDBMS),它设计用于嵌入到应用程序中,并且可以在无需外部服务器进程的情况下运行。SQLite 提供了完整的 SQL 语言支持,允…...
Linux——文件操作
前言 1)在Linux下面,一切皆文件,文件文件内容文件属性 2)在访问文件是,都得先将文件打开,修改文件的本质其实还是通过执行代码的形式修改。 3)文件是被进程打开的,一个进程可以打…...
数据结构 ——— 数组栈oj题:有效括号
目录 题目要求 代码实现 题目要求 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每…...
Character AI被起诉!14岁青少年自杀,AI陪伴何去何从
终于,AI在青少年心理问题方面,被推上了风口浪尖。 最近,美国佛罗里达州,一名14岁男孩Sewell Setzer的父母控告Character AI公司,声称孩子沉迷该公司的AI聊天机器人,最后走上了自杀的道路。 跟AI聊天还能致…...
CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)
CSS3 动画相关属性实例大全(三) (columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性) 本文目录: 一、columns属性(设置元素的列宽和列数) 二、filter属性(调整图像、背景和边…...
中国最厉害的思想家改名大师颜廷利:以诚信为基,塑企业信誉
跨文化融合,共筑包容性文化殿堂。尊重差异,促进团队合作,以诚信为基,塑企业信誉。融合《升命学说》智慧,推动员工多元化,践行社会责任,树立良好形象。创新不息,持续学习,…...
Python 代码实现用于进行水质模拟和优化加氯量
# -*- coding:utf-8 -*- import epamodule as em import epanetmsxmodule as msx import pandas as pd import numpy as np# 水质模拟,会产生一个rpt文件,但并不是返回这个文件。 def quality_simulation(inp_file,rpt_file,msx_file...
挖矿病毒来势汹汹
病毒来了, 我的个人站点使用了 wordpress, 它的不知哪个漏洞让黑客攻入了我的站点 使用 top 命令看到了有不明进程始终占据了 100% 的 CPU snapshot 1 snapshot 2 通过以下 "三板斧"可以查杀这个进程 先用 top (shiftp) 查找占据 CPU 最多的进程根据其进程号 pid 查看…...
国产数据库的蓝海在哪?
昨天有幸参加了 OceanBase2024年度发布会。在过去的几年中,OB 作为国内自主研发的分布式数据库,取得了令人瞩目的成就,特别是在金融行业,OB 通过不断的技术革新和优化,已经成为行业的领导者之一。OceanBase 展现了强大…...
MySQL~表的操作(创建表,查看表,修改表,删除表)
1.创建表 1.1.创建表 首先要选择需要操作的数据库,USE 数据库名,后续可以根据实际情况操作时添加。 USE fruitsales;建表语法: create table 表名( 字段名1 数据类型, 字段名2 数据类型, ); 实例:创建fruit_bak1表。 create t…...
多线程加锁与手搓智能指针实践
前缀知识 如何手搓智能指针 参考链接 如何多线程加锁,线程间通信 参考链接 注意: 在第一个链接中,重载赋值构造函数时,返回值类型为引用类型,仅适用于返回的这个对象, 在该函数调用前 (已经)存在了!!! 具体可参考 参考…...
3180. 执行操作可获得的最大总奖励 I
力扣刷题记录 dp 回溯 3180. 执行操作可获得的最大总奖励 I 思路 和往常一样,先使用暴力求解,想到了回溯算法,选择了当前数字,就跳到下一个数字,形成一个树形结构来遍历所有结果集合,但是没有找到优化算…...
react18中的jsx 底层渲染机制相关原理
jsx 底层渲染机制 渲染 jsx 时,会先解析 jsx,生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件,会将事件绑定到真实 dom 上。 虚拟 dom 对象,是框架内部构建的一套对象体系,对象…...
Spring Boot 实现文件上传下载功能
文章目录 一、原理分析1.1 请求类型1.2 服务器解析 二、功能实现2.1 创建项目并导入依赖2.2 文件上传功能实现2.2.1 文件上传 Service2.2.2 文件上传 Controller 2.3 文件下载功能实现2.3.1 文件下载 Service2.3.2 文件下载 Controller 2.4 文件上传前端代码(可选)2.4.1 上传文…...
ArcGIS 10.8 安装教程(含安装包)
目录 一、ArcGIS10.8二、安装链接三、安装教程四、ArcGIS实战 (一)ArcGIS10.8 1. 概述 ArcGIS 10.8是由美国Esri公司开发的GIS平台,用于处理、分析、显示和管理地理数据,并实现数据共享。它具有新特性和功能,性能更…...
【小白学机器学习16】 概率论的世界观2: 从正态分布去认识世界
目录 1 从正态分布说起 1.1 正态分布的定义 1.2 正态分布的名字 1.3 正态分布的广泛,和基础性 2 正态分布的公式和图形 2.1 正态分布 2.2 标准正态分布 3 正态分布的认识的3个层次 3.1 第1层次:个体的某个属性的样本值,服从正态分布…...
Python 爬虫项目实战:爬取某云热歌榜歌曲
一、网络爬虫的定义 网络爬虫(Web Crawler),也成为网页蜘蛛或者网页机器人,是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索以及内容抓取等。 二、爬虫基本原理 1、种子URL:爬…...
HCIP-HarmonyOS Application Developer 习题(十八)
(判断)1、在HarmonyOS有序公共事件中,高优先级订阅者可修改公共事件内容或处理结果,但不能终止公共事件处理。 答案:错误 分析:有序公共事件:主要场景是多个订阅者有依赖关系或者对处理顺序有要…...
操作系统学习笔记2.3互斥
文章目录 进程同步实现方式 进程互斥实现方式 软件实现方法硬件实现方法同步问题生产者-消费者问题问题描述解决方案代码解析 多生产者-多消费者问题问题描述 解决方案代码解析总结 抽烟者问题问题背景 同步与互斥的挑战解决方案实现步骤代码解释 关键点 进程同步 进程同步是指…...
LLM - 使用 Neo4j 可视化 GraphRAG 构建的 知识图谱(KG) 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142938982 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Neo4j …...
Linux 环境的搭建方式->远程登录->免密登录
个人主页:Jason_from_China-CSDN博客 所属栏目:Linux系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:Linux知识点的补充_Jason_from_China的博客-CSDN博客 Linux 环境的搭建方式 Linux 环境的搭建主要有三种方式: 直接安…...
react18中的计算属性及useMemo的性能优化技巧
react18里面的计算属性和使用useMemo来提升组件性能的方法 计算属性 实现效果 代码实现 函数式组件极简洁的实现,就这样 import { useState } from "react"; function FullName() {const [firstName, setFirstName] useState("");const [la…...
Python 实现高效的 SM4 大文件加密解密实战指南20241024
Python 实现高效的 SM4 大文件加密解密实战指南 引言 在数据安全领域,使用对称加密算法如SM4进行数据保护非常常见。特别是当处理大文件时,合理的内存和块大小管理以及加密解密效率变得尤为重要。本文将分享如何使用Python进行大文件的SM4加密解密操作&…...
数据结构~红黑树
文章目录 一、红黑树的概念二、红黑树的定义三、红黑树的插入四、红黑树的平衡五、红黑树的验证六、红黑树的删除七、完整代码八、总结 一、红黑树的概念 红黑树是一棵二叉搜索树,他的每个结点增加⼀个存储位来表示结点的颜色,可以是红色或者黑色。通过…...
【ROS GitHub使用】
提示:环境配置为Ubuntu20.04&ROS Noetic 文章目录 前言一、创建工作空间目录二、尝试从GitHub上下载一个源码包,对它进行编译,运行这个源码包1.打开script文件夹,右键文件夹空白区域,选择在中端中打开;…...
批量处理文件权限:解决‘/usr/bin/chmod: Argument list too long’的有效方法
批量处理文件权限:解决‘/usr/bin/chmod: Argument list too long’的有效方法 错误原因解决方案1. 分批处理2. 使用xargs3. 增加ARG_MAX限制4. 使用脚本 结论 在Linux系统中,有时你可能会遇到这样的错误消息:“/usr/bin/chmod: Argument lis…...
数据结构——树——二叉树——大小堆
目录 1>>导言 2>>树 2.1>>树的相关术语 2.2>>树的表示和应用场景 3>>二叉树 3.1>>完全二叉树 3.2>>大小根堆 4>>结语 1>>导言 上篇小编将队列的内容给大家讲完了,这篇要步入新的篇章,请宝…...
Android Junit 单元测试 | 依赖配置和编译报错解决
问题 为什么在依赖中添加了testImplement在build APK的时候还是会报错?是因为没有识别到test文件夹是test源代码路径吗? 最常见的配置有: implementation - 所有源代码集(包括test源代码集)中都有该依赖库.testImplementation - 依赖关系仅在test源代码…...
ffmpeg视频滤镜: 裁剪-crop
滤镜简述 crop官网链接 > FFmpeg Filters Documentation crop滤镜可以对视频进行裁剪,并且这个滤镜可以接受一些变量比如时间和帧数,这样我们实现动态裁剪,从而实现一些特效。 滤镜使用 参数 out_w <string> ..…...
wordpress 移动端编辑/百度智能小程序怎么优化排名
2. 锁机制 3. 并发 Excutor框架 4. 并发性与多线程介绍 1. synchronized 参考1、 synchronized 分两种方式进行线程的同步:同步块、同步方法 1. 方法同步 1.1 普通方法同步 1.2 静态方法同步 2. 块同步 2.1 this同步 2.2 Object同步 3. 总结 2. volatile 参考1、参…...
学做包子馒头的网站/可以营销的十大产品
读写分离 何为读写分离? 见名思意,根据读写分离的名字,我们就可以知道:读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话,就能够小幅提升写性能,大幅提升读性能。 我简单画了…...
asp做网站的缺点/百度搜索引擎优化相关性评价
源代码: Lib/filecmp.py filecmp 模块定义了用于比较文件及目录的函数,并且可以选取多种关于时间和准确性的折衷方案。对于文件的比较,另见 difflib 模块。 filecmp 模块定义了如下函数:filecmp.cmp(f1, f2, shallowTrue) 比较名为 f1 和 f2 …...
wordpress安装主题后不够/seo首页网站
一 创建私有仓库 # 1、拉取私有仓库镜像 docker pull registry # 2、启动私有仓库容器 docker run -id --nameregistry -p 5000:5000 registry # 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓…...
谷歌做网站推广/seo网络优化推广
这里是没有颜色的: /*** Created by 东东 on 2018/10/28.** Description 发送邮件部分接口*/ public interface MailService {/*** Description //TODO 发送简单的文本文件,to:收件人 subject:主题 content:内容* Param [to, subject, content]**/public void send…...
做app网站的软件有哪些内容吗/竞价托管推广代运营
遇到一个好问题。现在做穿戴式设备的多。我没去写过相应的程序。但原理是了解一些的。 问: 1.在大腿上绑定一个9轴姿态传感器 2.根据传感器实时采集的数据计算出前进后退侧移下蹲等动作,并且能够估算出速度,可以有误差 答: 有这…...