From 948a852437f2fbba95cec036f0113a59e063befc Mon Sep 17 00:00:00 2001 From: wangbing Date: Sat, 14 Sep 2024 14:31:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/xyz/wbsite/jmacro/JMacro.java | 83 ++++++++++--------- .../wjdr/task/Task_仓库奖励领取.java | 2 +- .../wjdr/task/Task_探险奖励领取.java | 2 +- .../jmacro/wjdr/task/Task_自动练兵.java | 12 +-- .../jmacro/wjdr/task/Task_自动采矿.java | 13 +-- .../jmacro/wjdr/task/Task_自动野怪.java | 15 +--- 6 files changed, 59 insertions(+), 68 deletions(-) diff --git a/src/main/java/xyz/wbsite/jmacro/JMacro.java b/src/main/java/xyz/wbsite/jmacro/JMacro.java index 6863daa..662998d 100644 --- a/src/main/java/xyz/wbsite/jmacro/JMacro.java +++ b/src/main/java/xyz/wbsite/jmacro/JMacro.java @@ -270,11 +270,11 @@ public abstract class JMacro { robot.mouseMove(rect.getCenter().getX(), rect.getCenter().getY()); delayUnstable(); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); - delay(100); + delay(60); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); delay(100); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); - delay(100); + delay(60); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); } @@ -796,16 +796,6 @@ public abstract class JMacro { return viewRects; } - /** - * 多图例匹配调用优化 - * - * @param legends 图例 - * @return 匹配图片 - */ - public ViewRect[] matchLegends(double minSimilar, String... legends) { - return matchLegends(legends, minSimilar); - } - /** * 等待并匹配图例组合 * @@ -832,29 +822,6 @@ public abstract class JMacro { }, seconds, TimeUnit.SECONDS); } - /** - * 等待并匹配图例组合 - * - * @param minSimilar 最低相似度 - * @param seconds 最长等待秒数 - * @param legends 图例组 - * @return 匹配区域 - */ - public ViewRect[] waitAndMatchLegends(double minSimilar, long seconds, String... legends) { - return waitAndMatchLegends(legends, minSimilar, seconds); - } - - /** - * 等待并匹配图例组合 - * - * @param minSimilar 最低相似度 - * @param legends 图例组 - * @return 匹配区域 - */ - public ViewRect[] waitAndMatchLegends(double minSimilar, String... legends) { - return waitAndMatchLegends(legends, minSimilar, defaultTimeOut); - } - /** * 等待并匹配图例组合 * @@ -919,7 +886,23 @@ public abstract class JMacro { } /** - * 查找颜色 + * 指定区域查找颜色值,查到后点击 + * + * @param color 颜色值例,如:#ffffff + */ + public boolean hasColorAndClick(int left, int top, int right, int bottom, String... color) { + ViewRect viewRect = of(left, top, right, bottom); + boolean hasColor = hasColor(viewRect, color); + if (hasColor) { + mouseLeftClick(viewRect); + return true; + } else { + return false; + } + } + + /** + * 指定区域查找颜色 * * @param color 颜色值例,如:#ffffff * @return 占比 @@ -929,7 +912,24 @@ public abstract class JMacro { } /** - * 查找颜色值 + * 指定区域查找颜色值,查到后点击 + * + * @param rect 查找区域 + * @param color 颜色值例,如:#ffffff + * @return + */ + public boolean hasColorAndClick(ViewRect rect, String... color) { + boolean hasColor = hasColor(rect, color); + if (hasColor) { + mouseLeftClick(rect); + return true; + } else { + return false; + } + } + + /** + * 指定区域查找颜色值 * * @param rect 查找区域 * @param color 颜色值例,如:#ffffff @@ -1034,6 +1034,15 @@ public abstract class JMacro { return new ViewColor(x + ox, y + oy, hexColor); } + /** + * 将相对坐标转为色值坐标 + * + * @return 绝对坐标 + */ + public String[] of(String... legends) { + return legends; + } + /** * 将相对坐标转为色值坐标 * diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java index ab54b24..6cffd58 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_仓库奖励领取.java @@ -13,7 +13,7 @@ public class Task_仓库奖励领取 extends BaseTask { @Override public void task(JMacro macro, ViewRect viewRect) { Logger.info("检测面板状态"); - ViewRect[] viewRects = macro.matchLegends(0.6, "城镇_打开面板", "城镇_关闭面板"); + ViewRect[] viewRects = macro.matchLegends(macro.of("城镇_打开面板", "城镇_关闭面板"), 0.6); if (viewRects == null) { Logger.info("检测面板状态检测失败"); return; diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_探险奖励领取.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_探险奖励领取.java index 779dd7b..3b80592 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_探险奖励领取.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_探险奖励领取.java @@ -20,7 +20,7 @@ public class Task_探险奖励领取 extends BaseTask { Logger.info("进入探险页面,领取奖励"); macro.mouseLeftClick(macro.of(71, 877)); - ViewRect[] viewRects = macro.waitAndMatchLegends(0.9, 5, "探险_领取", "探险_不可领取"); + ViewRect[] viewRects = macro.waitAndMatchLegends(macro.of("探险_领取", "探险_不可领取"),0.9, 5); if (viewRects[0] != null) { // 可以领取 Logger.info("定位领取按钮"); ViewRect 探险_领取 = macro.waitAndMatchLegend("探险_领取", 0.8); diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动练兵.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动练兵.java index eaf64a8..7cbe7db 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动练兵.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动练兵.java @@ -19,7 +19,7 @@ public class Task_自动练兵 extends BaseTask { private void 盾兵自动训练(JMacro macro, ViewRect viewRect) { Logger.info("检测面板状态"); - ViewRect[] viewRects = macro.matchLegends(0.6, "城镇_打开面板", "城镇_关闭面板"); + ViewRect[] viewRects = macro.matchLegends(macro.of("城镇_打开面板", "城镇_关闭面板"),0.6); if (viewRects == null) { Logger.info("检测面板状态检测失败"); return; @@ -39,7 +39,7 @@ public class Task_自动练兵 extends BaseTask { macro.delay(1000); Logger.info("检测盾兵"); - ViewRect[] viewRects2 = macro.waitAndMatchLegends(0.8D, 3, "城镇_完成盾兵", "城镇_空闲盾兵"); + ViewRect[] viewRects2 = macro.waitAndMatchLegends(macro.of("城镇_完成盾兵", "城镇_空闲盾兵"),0.8D, 3); if (viewRects2 == null) { Logger.info("检测失败"); return; @@ -114,7 +114,7 @@ public class Task_自动练兵 extends BaseTask { private void 矛兵自动训练(JMacro macro, ViewRect viewRect) { Logger.info("检测面板状态"); - ViewRect[] viewRects = macro.matchLegends(0.6, "城镇_打开面板", "城镇_关闭面板"); + ViewRect[] viewRects = macro.matchLegends(macro.of("城镇_打开面板", "城镇_关闭面板"),0.6); if (viewRects == null) { Logger.info("检测面板状态检测失败"); return; @@ -134,7 +134,7 @@ public class Task_自动练兵 extends BaseTask { macro.delay(1000); Logger.info("检测矛兵"); - ViewRect[] viewRects2 = macro.waitAndMatchLegends(0.8D, 3, "城镇_完成矛兵", "城镇_空闲矛兵"); + ViewRect[] viewRects2 = macro.waitAndMatchLegends(macro.of("城镇_完成矛兵", "城镇_空闲矛兵"),0.8D, 3); if (viewRects2 == null) { Logger.info("检测失败"); return; @@ -209,7 +209,7 @@ public class Task_自动练兵 extends BaseTask { private void 射手自动训练(JMacro macro, ViewRect viewRect) { Logger.info("检测面板状态"); - ViewRect[] viewRects = macro.matchLegends(0.6, "城镇_打开面板", "城镇_关闭面板"); + ViewRect[] viewRects = macro.matchLegends(macro.of("城镇_打开面板", "城镇_关闭面板"),0.6); if (viewRects == null) { Logger.info("检测面板状态检测失败"); return; @@ -229,7 +229,7 @@ public class Task_自动练兵 extends BaseTask { macro.delay(1000); Logger.info("检测矛兵"); - ViewRect[] viewRects2 = macro.waitAndMatchLegends(0.8D, 3, "城镇_完成射手", "城镇_空闲射手"); + ViewRect[] viewRects2 = macro.waitAndMatchLegends(macro.of("城镇_完成射手", "城镇_空闲射手"),0.8D, 3); if (viewRects2 == null) { Logger.info("检测失败"); return; diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动采矿.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动采矿.java index 8fd0329..5a3d21f 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动采矿.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动采矿.java @@ -22,7 +22,7 @@ public class Task_自动采矿 extends BaseTask { public void task(JMacro macro, ViewRect viewRect) { { Logger.info("打开面板,读取行军状态"); - ViewRect[] viewRects = macro.matchLegends(0.6, "城镇_打开面板", "城镇_关闭面板"); + ViewRect[] viewRects = macro.matchLegends(macro.of("城镇_打开面板", "城镇_关闭面板"), 0.6); if (viewRects[0] == null && viewRects[1] == null) { Logger.error("检测面板状态失败"); return; @@ -38,15 +38,6 @@ public class Task_自动采矿 extends BaseTask { macro.mouseLeftClick(macro.of(245, 200)); macro.delay(1000); - ViewRect[] viewRects1 = macro.matchLegends(0.6D, - "城镇_面板_空闲1", - "城镇_面板_空闲2", - "城镇_面板_空闲3", - "城镇_面板_空闲4", - "城镇_面板_空闲5", - "城镇_面板_空闲6" - ); - if (null != macro.matchLegend("城镇_面板_空闲1", 0.6D)) { 队列1空闲 = true; Logger.info("队列1空闲"); @@ -233,7 +224,7 @@ public class Task_自动采矿 extends BaseTask { if (采集 != null) { macro.mouseLeftClick(采集); - ViewRect[] viewRects = macro.waitAndMatchLegends(0.9, "野外_资源出征", "野外_资源无对队列", "野外_资源无士兵"); + ViewRect[] viewRects = macro.waitAndMatchLegends(macro.of("野外_资源出征", "野外_资源无对队列", "野外_资源无士兵"), 0.9); if (viewRects[0] != null) { Logger.info("出征"); macro.mouseLeftClick(viewRects[0]); diff --git a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java index 33e8d84..a528f32 100644 --- a/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java +++ b/src/main/java/xyz/wbsite/jmacro/wjdr/task/Task_自动野怪.java @@ -22,7 +22,7 @@ public class Task_自动野怪 extends BaseTask { public void task(JMacro macro, ViewRect viewRect) { { Logger.info("打开面板,读取行军状态"); - ViewRect[] viewRects = macro.matchLegends(0.6, "城镇_打开面板", "城镇_关闭面板"); + ViewRect[] viewRects = macro.matchLegends(macro.of("城镇_打开面板", "城镇_关闭面板"), 0.6); if (viewRects[0] == null && viewRects[1] == null) { Logger.error("检测面板状态失败"); return; @@ -38,15 +38,6 @@ public class Task_自动野怪 extends BaseTask { macro.mouseLeftClick(macro.of(245, 200)); macro.delay(1000); - ViewRect[] viewRects1 = macro.matchLegends(0.6D, - "城镇_面板_空闲1", - "城镇_面板_空闲2", - "城镇_面板_空闲3", - "城镇_面板_空闲4", - "城镇_面板_空闲5", - "城镇_面板_空闲6" - ); - if (null != macro.matchLegend("城镇_面板_空闲1", 0.6D)) { 队列1空闲 = true; Logger.info("队列1空闲"); @@ -296,11 +287,11 @@ public class Task_自动野怪 extends BaseTask { boolean 体力不足 = macro.hasColor(macro.of(405, 899, 427, 915), "#f43b3b", "#4fa5fc", "#c83134", "#e63739", "#963342", "#f33b3b"); if (体力不足) { - macro.matchLegendAndClick("自动野怪_返回",0.9); + macro.matchLegendAndClick("自动野怪_返回", 0.9); return false; } - ViewRect[] viewRects = macro.waitAndMatchLegends(0.9, "野外_攻击出征", "野外_资源无对队列"); + ViewRect[] viewRects = macro.waitAndMatchLegends(macro.of("野外_攻击出征", "野外_资源无对队列"), 0.9); if (viewRects[0] != null) { Logger.info("出征"); macro.mouseLeftClick(viewRects[0]);