- 这个版本使用springcloud为框架,方便开发。
- 使用图片识别算法,借用opencv,为了减少资源负载,部分功能需要手动设置好。例如御魂,队长或者队友,需先设置成默认模式,(当初做成了全自动,发现每次就使用一次,浪费资源,后来去掉了)。刷日和坊,需要点击到日和坊组队界面,系统自动判断。
- 优点是:1)不会多点击一次,系统不会检测(本人已经刷了一个月了)。2)占用系统资源少。3)适用于PC端任何比例,建议不要太小,本人是缩小至30%以上都可以的)。4)超级超级稳定。每天上号刷寮30御魂等,超级解放双手。5)远程监控,在家挂机手机邮箱收到监控的电脑画面。
- 缺点是:1.包过大,spring系列的直接打包进来没有精简。2.为了减少系统资源,没有做成全自动化。3。没有做成界面,需要修改配置文件。
- 后续自动刷狗粮还在研究中。
- 代码的研究意义挺大的,按照这个写,任何大型游戏都可以,试过DNF。都是可行的。
上代码
这个是opencv的官网代码,具体有耐心的可以去查一下,搜索直方图对比。也就是图片对比,整个程序的核心
public class OpenCVCompare {
public static double run(String[] args) {
if (args.length != 2) {
System.err.println("You must supply 3 arguments that correspond to the paths to 3 images.");
System.exit(0);
}
Mat srcBase = Imgcodecs.imread(args[0]);
Mat srcTest1 = Imgcodecs.imread(args[1]);
if (srcBase.empty() || srcTest1.empty()) {
System.err.println("Cannot read the images");
System.exit(0);
}
Mat hsvBase = new Mat(), hsvTest1 = new Mat();
Imgproc.cvtColor(srcBase, hsvBase, Imgproc.COLOR_BGR2HSV);
Imgproc.cvtColor(srcTest1, hsvTest1, Imgproc.COLOR_BGR2HSV);
int hBins = 50, sBins = 60;
int[] histSize = {hBins, sBins};
// hue varies from 0 to 179, saturation from 0 to 255
float[] ranges = {0, 180, 0, 256};
// Use the 0-th and 1-st channels
int[] channels = {0, 1};
Mat histBase = new Mat(), histTest1 = new Mat();
List<Mat> hsvBaseList = Arrays.asList(hsvBase);
Imgproc.calcHist(hsvBaseList, new MatOfInt(channels), new Mat(), histBase, new MatOfInt(histSize), new MatOfFloat(ranges), false);
Core.normalize(histBase, histBase, 0, 1, Core.NORM_MINMAX);
List<Mat> hsvTest1List = Arrays.asList(hsvTest1);
Imgproc.calcHist(hsvTest1List, new MatOfInt(channels), new Mat(), histTest1, new MatOfInt(histSize), new MatOfFloat(ranges), false);
Core.normalize(histTest1, histTest1, 0, 1, Core.NORM_MINMAX);
return Imgproc.compareHist(histBase, histTest1, 0);
}
}
这个是鼠标点击,很简单的方法,常量值百度搜索一下
private void comm(int x, int y, int range) {
int random = new Random().nextInt(range);
int dx = new Double((x + random + info.getLeft()) / pc.getPrecent()).intValue();
int dy = new Double((y + random + info.getTop()) / pc.getPrecent()).intValue();
robot.mouseMove(dx, dy);
robot.mousePress(KeyEvent.BUTTON1_MASK);
robot.delay(new Random().nextInt(100) + 150);
robot.mouseRelease(KeyEvent.BUTTON1_MASK);
}
图片截取,保存,写的是部分方法 Rectangle 对象是java提供的对象,获取屏幕的数据流,之后生成图片
Rectangle rec = new Rectangle(left, top, right - left, button - top);
//没有检测到游戏时供测试使用
if (button - top == 0) {
rec = new Rectangle(0, 0, 800, 800);
}
BufferedImage bi = robot.createScreenCapture(rec);
img2file(bi, GMConstant.IMAGE_FORMAT, type + GMConstant.IMAGE_SUFFIX);
private boolean img2file(BufferedImage img, String extent, String name) {
try {
String currentPath = pc.getEnv_path();
File file = new File(currentPath + pc.getOcr() + name);
return ImageIO.write(img, extent, file);
} catch (Exception e) {
e.printStackTrace();
}
return false;
代码填坑
因为使用了opencv,他这个版本只有本地包,maven依赖需要注意下,后面上源码,看一下完整的打包的配置,这个地方是困扰我最久的地方,打包打不进去。
<dependency>
<groupId>opencv</groupId>
<artifactId>opencv</artifactId>
<version>347</version>
<scope>system</scope>
<systemPath>${basedir}/lib/opencv-347.jar</systemPath>
</dependency>
环境依赖
这是opencv需要的dll文件,maven打包会将打包文件变化,无法读取,目前还无法解决。
@PostConstruct
public void init() {
int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
if (bitness == 32) {
System.load(pc.getEnv_path() + "x86\\opencv_java347.dll");
} else if (bitness == 64) {
System.load(pc.getEnv_path() + "x64\\opencv_java347.dll");
}
}
参数修改
#御魂== 1/2(设置1.2都行) 队长模式 队友模式 3 刷日和坊
modle:
code: 3
#图片匹配的百分比
match:
pre: 0.50
#windows屏幕参数 缩放比 见下图的设置
wing:
precent: 1.5
#你的QQ邮箱和QQ的授权码,授权码如何设置可以自行百度下。
mail:
name: xxxx
code: xxxx
#图片路径
paths:
ocr: image\ocr\
base: .\image
#启动配置 -Djava.library.path=D:\OPenCV\opencv\build\java\x64
env:
path: D:\WORKSPACE_GM\mingc-gm-jv\onmyoji-jv\target\config\
如何启动
配置一下bat脚本,设置jdk路径,
注意,请使用管理管运行,否则不会生效。
源码下载,如果需要,可联系我发给你,留言邮箱地址即可
https://download.csdn.net/download/chengming_11/11826011
如果有问题,请留言,本人会快速回复。