From db77c22f040194c923efa6da66ebef150b978dba Mon Sep 17 00:00:00 2001 From: wangbing Date: Fri, 23 Aug 2024 00:22:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=87=87=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- legend/野外_搜索.png | Bin 1095 -> 1673 bytes legend/野外_资源_采集队伍满.png | Bin 0 -> 9754 bytes legend/首页_广告关闭按钮.png | Bin 2550 -> 1312 bytes .../java/com/example/jmacro/wjdr/JMacro.java | 16 +++++-- .../java/com/example/jmacro/wjdr/Main.java | 13 +++--- .../example/jmacro/wjdr/task/TaskMining.java | 40 +++++++++++++----- .../example/jmacro/wjdr/util/ColorUtil.java | 15 +++++++ .../com/example/jmacro/wjdr/util/Imager.java | 8 +++- 8 files changed, 70 insertions(+), 22 deletions(-) create mode 100644 legend/野外_资源_采集队伍满.png diff --git a/legend/野外_搜索.png b/legend/野外_搜索.png index 47857ecf30c25db6756f0226cabd5832406427aa..4a889c8cf9c1aafde05a6cdcbd6456387062789b 100644 GIT binary patch delta 1671 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 M07*qoM6N<$f~ld#EC2ui diff --git a/src/main/java/com/example/jmacro/wjdr/JMacro.java b/src/main/java/com/example/jmacro/wjdr/JMacro.java index 9f5442f..8980298 100644 --- a/src/main/java/com/example/jmacro/wjdr/JMacro.java +++ b/src/main/java/com/example/jmacro/wjdr/JMacro.java @@ -5,6 +5,7 @@ import com.example.jmacro.wjdr.base.ScreenPoint; import com.example.jmacro.wjdr.base.ScreenRect; import com.example.jmacro.wjdr.util.ColorUtil; import com.example.jmacro.wjdr.util.Imager; +import com.example.jmacro.wjdr.util.Logger; import com.example.jmacro.wjdr.util.TaskUtil; import java.awt.*; @@ -61,15 +62,24 @@ public class JMacro { /** * 鼠标左键单击 * - * @param rect 矩形区域 + * @param rect 点 */ - public void mouseLeftClick(ScreenRect rect) { - mouseMove(new ScreenPoint(rect.getCenter()[0], rect.getCenter()[1])); + public void mouseLeftClick(ScreenPoint rect) { + mouseMove(rect); robot.mousePress(InputEvent.BUTTON1_MASK); waitTap(); robot.mouseRelease(InputEvent.BUTTON1_MASK); } + /** + * 鼠标左键单击 + * + * @param rect 矩形区域 + */ + public void mouseLeftClick(ScreenRect rect) { + mouseLeftClick(new ScreenPoint(rect.getCenter()[0], rect.getCenter()[1])); + } + /** * 鼠标滚轮单击 * diff --git a/src/main/java/com/example/jmacro/wjdr/Main.java b/src/main/java/com/example/jmacro/wjdr/Main.java index 7b0e768..839acca 100644 --- a/src/main/java/com/example/jmacro/wjdr/Main.java +++ b/src/main/java/com/example/jmacro/wjdr/Main.java @@ -3,6 +3,7 @@ package com.example.jmacro.wjdr; import cn.hutool.core.date.DateUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.RandomUtil; +import com.example.jmacro.wjdr.base.ScreenPoint; import com.example.jmacro.wjdr.base.ScreenRect; import com.example.jmacro.wjdr.task.TaskMining; import com.example.jmacro.wjdr.util.Imager; @@ -44,7 +45,7 @@ public class Main { if (DateUtil.isIn(DateUtil.date(), DateUtil.parse(workStart), DateUtil.parse(workEnd))) { int anInt = RandomUtil.randomInt(5, 20); - Logger.info("等待{}分钟后,重新启动游戏线程"); + Logger.info("等待{}分钟后,重新启动游戏线程", anInt); jMacro.setThread(new GameThread(jMacro)); TaskUtil.schedule(jMacro.getThread(), anInt, TimeUnit.MINUTES); } @@ -84,7 +85,7 @@ public class Main { Logger.info("扫描游戏主界面:"); ScreenRect 城镇 = TaskUtil.timeTask(() -> { while (true) { - ScreenRect screenRect1 = locationHome(jMacro); + ScreenRect screenRect1 = locationHome(jMacro, gameScreen); if (screenRect1 != null) { return screenRect1; } @@ -119,10 +120,10 @@ public class Main { } } - public static ScreenRect locationHome(JMacro jMacro) { + public static ScreenRect locationHome(JMacro jMacro, ScreenRect gameScreen) { { // 定位弹框,关闭弹框 BufferedImage image = Imager.load(new File("legend", "首页_广告关闭按钮.png")); - ScreenRect rect = jMacro.findPic(image, 0.80d); + ScreenRect rect = jMacro.findPic(gameScreen, image, 0.95d); if (rect != null) { jMacro.mouseLeftClick(rect); Logger.info("检测到弹框,关闭弹框"); @@ -131,7 +132,7 @@ public class Main { { // 定位主程序 BufferedImage legend = Imager.load(new File("legend", "城镇.png")); - ScreenRect rect = jMacro.findPic(legend, 0.80d); + ScreenRect rect = jMacro.findPic(gameScreen, legend, 0.2d); if (rect != null) { Logger.info("程序主界面已就绪"); return rect; @@ -142,7 +143,7 @@ public class Main { public static ScreenRect locationMuMu(JMacro jMacro) { BufferedImage image = Imager.load(new File("legend", "慕慕_工具栏.png")); - return jMacro.findPic(image, 0.99d); + return jMacro.findPic(image, 0.95d); } /** diff --git a/src/main/java/com/example/jmacro/wjdr/task/TaskMining.java b/src/main/java/com/example/jmacro/wjdr/task/TaskMining.java index a4a99a0..20e8816 100644 --- a/src/main/java/com/example/jmacro/wjdr/task/TaskMining.java +++ b/src/main/java/com/example/jmacro/wjdr/task/TaskMining.java @@ -1,6 +1,7 @@ package com.example.jmacro.wjdr.task; import com.example.jmacro.wjdr.JMacro; +import com.example.jmacro.wjdr.base.ScreenPoint; import com.example.jmacro.wjdr.base.ScreenRect; import com.example.jmacro.wjdr.util.Logger; @@ -32,28 +33,34 @@ public class TaskMining { ScreenRect 野外搜索 = jMacro.waitAndFindPic(screenRect, new File("legend", "野外_搜索.png"), 0.9); jMacro.mouseLeftClick(野外搜索); - - boolean collect = false; - - while (!collect) { - + String[] types = new String[]{ + "生肉", "木材", "煤矿", "铁矿" + }; + for (String type : types) { + boolean collect = collect(type, 0); + if (collect) { // 中断采集 + break; + } } - collect("生肉", 0); - collect("木材", 0); - collect("煤矿", 0); - collect("铁矿", 0); + ScreenRect 搜索 = jMacro.waitAndFindPic(screenRect, new File("legend", "野外_资源_搜索.png"), 0.98); + if (搜索 != null) { + Logger.info("退出资源搜索界面"); + jMacro.mouseLeftClick(screenRect); + } ScreenRect 城镇 = jMacro.waitAndFindPic(screenRect, new File("legend", "城镇.png"), 0.9); if (城镇 == null) { Logger.error("未检测到【城镇】,采矿终止"); return; } + Logger.error("采矿完成,返回城镇"); } /** - * @param level - * @return + * @param type 资源类型 + * @param level 等级(0为重置) + * @return 采集是否结束(满队则返回true,接下来的采集也不需要了) */ private boolean collect(String type, int level) { ScreenRect typeRect = jMacro.waitAndFindPic(screenRect, new File("legend", "野外_" + type + ".png"), 0.9); @@ -83,6 +90,17 @@ public class TaskMining { Logger.info("搜索到{}{}级矿", type, level); Logger.info("采集{}{}级矿", type, level); jMacro.mouseLeftClick(采集); + + ScreenRect 采集队伍满 = jMacro.waitAndFindPic(screenRect, new File("legend", "野外_资源_采集队伍满.png"), 0.98); + if (采集队伍满 != null) { + Logger.info("出征队伍满,取消采集!"); + Logger.info("关闭弹框!"); + jMacro.mouseLeftClick(new ScreenPoint(采集队伍满.getRight() - 17, 采集队伍满.getBottom() - 20)); + Logger.info("退出资源搜索!"); + jMacro.mouseLeftClick(new ScreenPoint(采集队伍满.getRight() - 17, 采集队伍满.getBottom() - 20)); + return true; + } + ScreenRect 出征 = jMacro.waitAndFindPic(screenRect, new File("legend", "野外_资源_出征.png"), 0.98); if (出征 == null) { Logger.info("出征{}{}级矿失败!", type, level); diff --git a/src/main/java/com/example/jmacro/wjdr/util/ColorUtil.java b/src/main/java/com/example/jmacro/wjdr/util/ColorUtil.java index 32c4a5b..919206f 100644 --- a/src/main/java/com/example/jmacro/wjdr/util/ColorUtil.java +++ b/src/main/java/com/example/jmacro/wjdr/util/ColorUtil.java @@ -1,5 +1,8 @@ package com.example.jmacro.wjdr.util; +import java.awt.image.BufferedImage; +import java.io.File; + public class ColorUtil { /** @@ -27,10 +30,22 @@ public class ColorUtil { } public static boolean isSimilar(int colorInt1, int colorInt2) { + // 透明色认为相似 + if ("ffffff".equals(Integer.toHexString(colorInt1))) { + return true; + } + if ("ffffff".equals(Integer.toHexString(colorInt2))) { + return true; + } return calculateSimilarity(colorInt1, colorInt2) > 0.90d; } public static void main(String[] args) { + + BufferedImage image = Imager.load(new File("legend", "首页_广告关闭按钮 - 副本.png")); + int[][] imageRGB = Imager.getImageRGB(image); + + int color1 = 0xffffff; // 白色 int color2 = 0xfefefe; // 非常接近白色的颜色 diff --git a/src/main/java/com/example/jmacro/wjdr/util/Imager.java b/src/main/java/com/example/jmacro/wjdr/util/Imager.java index 11394f9..c0dbf93 100644 --- a/src/main/java/com/example/jmacro/wjdr/util/Imager.java +++ b/src/main/java/com/example/jmacro/wjdr/util/Imager.java @@ -2,6 +2,7 @@ package com.example.jmacro.wjdr.util; import cn.hutool.core.img.ImgUtil; +import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.util.ArrayList; @@ -62,12 +63,15 @@ public class Imager { public static int[][] getImageRGB(BufferedImage bfImage) { int width = bfImage.getWidth(); int height = bfImage.getHeight(); + boolean b = bfImage.getColorModel().hasAlpha(); int[][] result = new int[width][height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { // 对某个像素点的RGB编码并存入数据库 - result[x][y] = bfImage.getRGB(x, y) & 0xFFFFFF; - + int rgb = bfImage.getRGB(x, y); + result[x][y] = rgb & 0xFFFFFF; +// System.out.println(Integer.toHexString(rgb)); +// System.out.println(alpha); // 单独获取每一个像素点的Red,Green,和Blue的值。 // int r = (bfImage.getRGB(x, y) & 0xFF0000) >> 16; // int g = (bfImage.getRGB(x, y) & 0xFF00) >> 8;