From cf2bad116d2eede8e635feb8ca60ddc86158c4b4 Mon Sep 17 00:00:00 2001 From: wangbing Date: Tue, 3 Sep 2024 23:42:37 +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/城镇_充值#L448,36.png | Bin 2771 -> 0 bytes legend/城镇_礼包#L441,72.png | Bin 0 -> 898 bytes legend/野外_资源无士兵#L214,691.png | Bin 0 -> 4991 bytes .../java/com/example/jmacro/wjdr/JMacro.java | 134 +++++++++++++++++- .../example/jmacro/wjdr/JMainApplication.java | 12 +- .../com/example/jmacro/wjdr/base/Legend.java | 2 +- .../example/jmacro/wjdr/base/ViewPoint.java | 18 --- .../example/jmacro/wjdr/tool/Location.java | 4 +- .../jmacro/wjdr/wjdr/MacroForWJDR.java | 2 +- .../wjdr/wjdr/task/Task_自动采矿.java | 20 ++- 10 files changed, 145 insertions(+), 47 deletions(-) delete mode 100644 legend/城镇_充值#L448,36.png create mode 100644 legend/城镇_礼包#L441,72.png create mode 100644 legend/野外_资源无士兵#L214,691.png diff --git a/legend/城镇_充值#L448,36.png b/legend/城镇_充值#L448,36.png deleted file mode 100644 index 5b63ae73bb3b00fc64755832e5607d90139d81c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2771 zcmV;^3M}=BP)D6rpYM!R686_UiC@H6@?d3BS)&z~?~FFR~-WpR5$}S&`zi@Y8~@KMARU zsQigh^+TG-XDUJ94mg~4I5oQhbn{wI6wc?7wSD42s#gbNVP zXG4nDf}l4EDV{`xye3c@;nD)~nTYg2KU02F32v_m*8$ia%t0{C(2<#yfs)b^WT!>o zb~)j4IS3a6(-f2m<|L3qDHO0HNU$Km!u+{7FAcfrJ_J4e5Eh37DrhPr*w0kJl!BAc zbO0J1fKkUZUBlo3#aJ+ZKB}s!@Ryl0QJR+nubb|<9SSbsH{nb$C!q)y4Qaq*L28PQ z@<$%T@;4V@R>h0R&koVOzKHltpv;s+il6*GE2;!}a|IU#G@^j_ffW_utvB94&5gS*Fef1&Cn==yy zIU$4zm=@@(z_Oysj;bB5vwKn)D#w^#MTPybV)0_s{`3=W-n@x>_wJ#!wH14I?!<)g zW9gKOAx>7g76S_hohsJ?DxAp}J#r|vZTJXRE?&f)J9p4};|2~NJb=pCe8DU~-Rr}! z_EkVRp$;WTGD}j&;G_zj1{0r2pO>41rEe_434*l|EcPXUO-)VMyr~Lh508Xjs@0v$ z+#+1ibWOm-wXz`t@$u?+@ynSrxO?}mc|AW{7y$vCUGW0)(%ne){f;5+OQ^oc4fj*J zAI>eU!U2PoIHHK+o^x+41Xjm!y9){OVAg@45+pyt* z!W^tyu?!9MCvflf?e-UoU4Nsc1=aiapV@?*F~&uVBbpdy71J< zk@zM6DP2|at=l_$L9Qb3jSMN{o7!j;1nQ>Nf zUsDO(?E!HBudxbS8Kz#n5Iev%=Ip7@KS%Yu?_x{kT>RmIfy}uiRTK%TQl-DKw`uHc zE)MrWnHhL({5X8I=ye?5ycri6qE@yJvA;(*qKbWW{e4XGqOHx%xXfay{p?fhTD}Zx znF^E3hNC#cr5bTwB$05kS%_q8$>u>ogDOl*#hmgn`0TaUaBRZ{oIh{?Etf9g9sy&C zEb98;o)iOaWysI`@B@C_z75-Gz|6-V#qSH!QIP5+Sfa|eyws#9oLihTlnf4dO=IO! zdEqcBMn8rf3l^Ye{dzR)+lL#MFPkCm!I^l9lBozZ96E$*=JY27n>OY#6tTx;F_c*$ z0ZUY1`Dqpoeic#^%;ggII9CbibUL7MeC38xP%&y0w!Zu__P_TYPVL!)>r7zDm)_)6 zOp+4KbY5QY=(=_IJHcKYGa7~I9<`BVg_vg%3vyE}3e1G-0%nQ@B8w&WH=U4a0YAzg z7>d^?PsV2}SEBCguhD$rf_h+Ah(_gw+|b z(J^Z$5w07UAz*YXZsA;()}HIDGTU z6`bRkTK3{p6lDgvXqqc}X2_;o%SkmA0~9610~6^4)0`%l-{Z!(QIFsg=1LR6x(@N) z=q~4LGXcNe`Z1m!H-;c?CH4lv2LKaPEZ<7l_) z`qDyrniR3GuD@@Gi(cQx96ZX!V(yFz_81i-34wZZCtl{ z3UNE2EUYZDzjC=9F(6+7MtJB>3&h~WH3xTpzaKA6oQNOzkej{eV+xGUUO#sZb=+XS z;2hq$a3N|w;$i04F$LWlKq-`;X-4JbKcOJ(VThAh$yR}L5zbI>Y5o9aJ^ncMEn9|* z>`ASx&Yp5jlDnCqJRxA*0bhBd9Lpw5z_&a`HgXa)@n95tiLTeSFPpsoZ5nZoV{Ox` zuj0{Sy65HroDQ0Bx{GiURvl#p1^8g|=kriJk;D_j8UwroL5W20Flap2_lvPhiYzaM+J&%OD~M2yJGM9{_D^9Y>ohDhAA z+nw;c*l(=HctAqLjKCEyTmx_SCEl;!8a&uL=VEf^3E5pXQ_z4aE( zat_A>R2wkQv1j*wi|^K~!8^}S!HE1U_zVk`#Bs^6Y63<%HM-~2VP|-QZV$!}8G^sf znuY3(8_~$!tFwcx1Z$M-;=>P7HGMjs9>SxcG;X^M&SWbAtr)djo%AsUP=H9pLz;=-+v#C2M?l+{Zd-a z4LWvu=T02pVSDAIXBo8sG zN1h>IQOW4D+pN&(;5eS>cFdoTTE5^(u1yD5t-^bgCSgQww#re>K{(9@w~-8wVN>!_ Z{{y=rky2+G71jU%002ovPDHLkV1hftPf!2= diff --git a/legend/城镇_礼包#L441,72.png b/legend/城镇_礼包#L441,72.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffd12a0fcd6d40a267ae3cd8e01139b164b3e61 GIT binary patch literal 898 zcmV-|1AY97P)Ja~qquuv^e4`R3##=YH}%&-0w;N+(|Tu(zm= z0_%s|@XaEp(x~Y)(+go<^9=CP;ZxMS;i0MK5^if>M$NT-G>ZM9!)MrSwBsHaVP#z= z4NU$SMmkt}l45Hc!?&lAlPYNe%xcWPjIptsgJlkE$J%Iqr<-O0J0(`L`5e1TY`88B z6I_dCjA)^XMJlpg;O69i1I^s?JejY`|_gPg8X#7V}y1itDKF^fDKT zqWp6{8koq}uAs956b0rm~d-7e{Hm9p?AdB=OXL z1Kvxhj4rEKyni4$PYhCD-HW08G*6c|vDf9rIkL#FYpESM);cE?SGgL9bL6ubo_gz| zfWF(0(|U#asvZobP97_?k$?7czPP(iEV(^YtHC$HB&Lsj?5g~LJq8<+tELyHko|ZU zC8lPcKjgsP^CiCp*L92bfK#CfajUmGuJOoz3nr5jNqf(>V;3lV)xpaZE?Ne^CJ@>g z@ZX&=6$n!4?&Uc{9g;Ssib@?6SlqOGM_7tPbM{~^$CGnmYT7j@pG{rWO@meLOeugYnL0x1j~V?17bl6(Q(XRwlIY31m^&wRHKf9P}m Y8w(>K7nK*Cr2qf`07*qoM6N<$f?Z#&djJ3c literal 0 HcmV?d00001 diff --git a/legend/野外_资源无士兵#L214,691.png b/legend/野外_资源无士兵#L214,691.png new file mode 100644 index 0000000000000000000000000000000000000000..93115a534015bcb64203628cdabe55e33b3795ed GIT binary patch literal 4991 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 JPDHLkV1g{YfOY@? literal 0 HcmV?d00001 diff --git a/src/main/java/com/example/jmacro/wjdr/JMacro.java b/src/main/java/com/example/jmacro/wjdr/JMacro.java index fcf52a4..4731f1b 100644 --- a/src/main/java/com/example/jmacro/wjdr/JMacro.java +++ b/src/main/java/com/example/jmacro/wjdr/JMacro.java @@ -108,15 +108,14 @@ public abstract class JMacro { * @param smooth 平滑移动 */ public void mouseMove(ViewPoint point, boolean smooth) { - int endX = point.getX() + (point.isAbsolute() ? 0 : getFocusRect().getLeft()); - int endY = point.getY() + (point.isAbsolute() ? 0 : getFocusRect().getTop()); + int endX = point.getX(); + int endY = point.getY(); if (smooth) { // 获取当前鼠标位置 Point mousePoint = MouseInfo.getPointerInfo().getLocation(); int startX = mousePoint.x; int startY = mousePoint.y; - // 求两点距离 double absX = Math.abs(startX - endX); double absY = Math.abs(startY - endY); @@ -156,7 +155,7 @@ public abstract class JMacro { * @param rect 矩形区域 */ public void mouseLeftClick(ViewRect rect) { - mouseLeftClick(new ViewPoint(rect.getCenter()[0], rect.getCenter()[1], true)); + mouseLeftClick(new ViewPoint(rect.getCenter()[0], rect.getCenter()[1])); } /** @@ -178,11 +177,11 @@ public abstract class JMacro { */ public void mouseLeftDrag(ViewPoint start, ViewPoint end, boolean smooth) { mouseMove(start, smooth); - delayUnstable(); + delay(); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); - delayUnstable(); + delay(); mouseMove(end, smooth); - delayUnstable(); + delay(); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); } @@ -347,6 +346,18 @@ public abstract class JMacro { return findPic(getFocusRect(), pic, minSimilar); } + /** + * 查找图片 + * + * @param viewRect 查找范围(不设时,取全屏) + * @param pic 待查找图片 + * @param minSimilar 相似度 + * @return 匹配图片区域 + */ + public ViewRect findPic(ViewRect viewRect, File pic, double minSimilar) { + return findPic(viewRect, ImageUtil.load(pic), minSimilar); + } + /** * 查找图片 * @@ -371,6 +382,7 @@ public abstract class JMacro { // 获取实时屏幕 BufferedImage screen = capture(robot, viewRect); + ImageUtil.show(screen); int[][] screenData = ImageUtil.getImageRGB(screen); int[][] picData = ImageUtil.getImageRGB(pic); @@ -416,6 +428,72 @@ public abstract class JMacro { return null; } + /** + * 查找图片 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配图片区域 + */ + public ViewRect findLegend(String legend, double minSimilar) { + return findLegend(Legend.inflate(legend), minSimilar); + } + + /** + * 查找图片 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配图片区域 + */ + public ViewRect findLegend(Legend legend, double minSimilar) { + return findPic(legend.getFile(), minSimilar); + } + + /** + * 查找图例 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配图片区域 + */ + public ViewRect findLegend(ViewRect rect, String legend, double minSimilar) { + return findLegend(rect, Legend.inflate(legend), minSimilar); + } + + /** + * 查找图例 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配图片区域 + */ + public ViewRect findLegend(ViewRect rect, Legend legend, double minSimilar) { + return findPic(rect, legend.getFile(), minSimilar); + } + + /** + * 查找图片 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配图片区域 + */ + public ViewRect waitAndFindLegend(Legend legend, double minSimilar, long seconds) { + return waitAndFindPic(legend.getFile(), minSimilar, seconds); + } + + /** + * 查找图片 + * + * @param legend 图例 + * @param minSimilar 最低相似度 + * @return 匹配图片区域 + */ + public ViewRect waitAndFindLegend(ViewRect rect, Legend legend, double minSimilar, long seconds) { + return waitAndFindPic(rect, legend.getFile(), minSimilar, seconds); + } + /** * 等待并查找图片 * @@ -743,4 +821,46 @@ public abstract class JMacro { public ViewRect waitAndMatchLegend(Legend legend, double minSimilar, long seconds) { return waitAndMatchPic(legend.getFile(), legend.getLocation(), minSimilar, seconds); } + + /** + * 将相对坐标转为绝对坐标 + * + * @return 绝对区域 + */ + public ViewRect of(int left, int top, int right, int bottom) { + int ox = getFocusRect().getLeft(); + int oy = getFocusRect().getTop(); + return new ViewRect(left + ox, top + oy, right + ox, bottom + oy); + } + + /** + * 将相对区域转为绝对区域 + * + * @param relativeRect 相对区域 + * @return 绝对区域 + */ + public ViewRect of(ViewRect relativeRect) { + return new ViewRect(relativeRect.getLeft(), relativeRect.getTop(), relativeRect.getRight(), relativeRect.getBottom()); + } + + /** + * 将相对坐标转为绝对坐标 + * + * @return 绝对坐标 + */ + public ViewPoint of(int x, int y) { + int ox = getFocusRect().getLeft(); + int oy = getFocusRect().getTop(); + return new ViewPoint(x + ox, y + oy); + } + + /** + * 将相对坐标转为绝对坐标 + * + * @param relativePoint 相对坐标 + * @return 绝对区域 + */ + public ViewPoint of(ViewPoint relativePoint) { + return of(relativePoint.getX(), relativePoint.getY()); + } } \ No newline at end of file diff --git a/src/main/java/com/example/jmacro/wjdr/JMainApplication.java b/src/main/java/com/example/jmacro/wjdr/JMainApplication.java index ab7cddd..0717cc8 100644 --- a/src/main/java/com/example/jmacro/wjdr/JMainApplication.java +++ b/src/main/java/com/example/jmacro/wjdr/JMainApplication.java @@ -68,17 +68,7 @@ public class JMainApplication extends Application { }); // 服务初始化 - JMainService.init(new JMacro() { - @Override - public ViewRect focus() { - return new ViewRect(0,0,500,500); - } - - @Override - public void run() { - - } - }, new File("legend")); + JMainService.init(new MacroForWJDR(), new File("legend")); } public static void main(String[] args) { diff --git a/src/main/java/com/example/jmacro/wjdr/base/Legend.java b/src/main/java/com/example/jmacro/wjdr/base/Legend.java index d5c8b63..6fab3b5 100644 --- a/src/main/java/com/example/jmacro/wjdr/base/Legend.java +++ b/src/main/java/com/example/jmacro/wjdr/base/Legend.java @@ -94,7 +94,7 @@ public class Legend { } else { int x = Convert.toInt(ReUtil.get("[\\S\\s]+#L([0-9]+),[0-9]+\\.png", file.getName(), 1), 0); int y = Convert.toInt(ReUtil.get("[\\S\\s]+#L[0-9]+,([0-9]+)\\.png", file.getName(), 1), 0); - newLegend.location = new ViewPoint(x, y, false); + newLegend.location = new ViewPoint(x, y); } fileCache.put(name, newLegend); diff --git a/src/main/java/com/example/jmacro/wjdr/base/ViewPoint.java b/src/main/java/com/example/jmacro/wjdr/base/ViewPoint.java index f749216..22988de 100644 --- a/src/main/java/com/example/jmacro/wjdr/base/ViewPoint.java +++ b/src/main/java/com/example/jmacro/wjdr/base/ViewPoint.java @@ -9,11 +9,6 @@ package com.example.jmacro.wjdr.base; */ public class ViewPoint { - /** - * 是否为绝对坐标,相对坐标在操作时会根据聚焦区域计算转为绝对坐标 - */ - private boolean absolute; - /** * 相对原点(左上)的x轴距离 */ @@ -34,13 +29,8 @@ public class ViewPoint { * @param y 坐标y */ public ViewPoint(int x, int y) { - this(x, y, false); - } - - public ViewPoint(int x, int y, boolean absolute) { this.x = x; this.y = y; - this.absolute = absolute; } public int getX() { @@ -59,14 +49,6 @@ public class ViewPoint { this.y = y; } - public boolean isAbsolute() { - return absolute; - } - - public void setAbsolute(boolean absolute) { - this.absolute = absolute; - } - @Override public String toString() { return "ViewPoint{" + diff --git a/src/main/java/com/example/jmacro/wjdr/tool/Location.java b/src/main/java/com/example/jmacro/wjdr/tool/Location.java index cbc421a..f4a76a9 100644 --- a/src/main/java/com/example/jmacro/wjdr/tool/Location.java +++ b/src/main/java/com/example/jmacro/wjdr/tool/Location.java @@ -100,8 +100,8 @@ public class Location extends JFrame { x = e.getX(); y = e.getY(); Logger.info("坐标采集:"); - Logger.info("屏幕坐标:[{},{}],用法:new ViewPoint({},{},true)", x, y, x, y); - Logger.info("相对坐标:[{},{}],用法:new ViewPoint({},{})", x - originX, y - originY, x - originX, y - originY); + Logger.info("屏幕坐标:[{},{}]", x, y); + Logger.info("相对坐标:[{},{}],用法:macro.of({},{})", x - originX, y - originY, x - originX, y - originY); String hexColor = Integer.toHexString(capture.getRGB(x, y) & 0xFFFFFF); Logger.info("坐标色值:[#{}]", hexColor); close(); diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/MacroForWJDR.java b/src/main/java/com/example/jmacro/wjdr/wjdr/MacroForWJDR.java index 2c05a0a..59149d4 100644 --- a/src/main/java/com/example/jmacro/wjdr/wjdr/MacroForWJDR.java +++ b/src/main/java/com/example/jmacro/wjdr/wjdr/MacroForWJDR.java @@ -75,7 +75,7 @@ public class MacroForWJDR extends JMacro { Boolean inMain = TaskUtil.retryTask(() -> { { // 定位弹框,关闭弹框 delayUnstable(); - ViewRect rect = matchLegend("城镇_充值", 0.8d); + ViewRect rect = findLegend("城镇_礼包", 0.7); if (rect != null) { mouseLeftClick(rect); Logger.info("检测到充值广告弹框,关闭弹框"); diff --git a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_自动采矿.java b/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_自动采矿.java index 8dccfda..5562b9c 100644 --- a/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_自动采矿.java +++ b/src/main/java/com/example/jmacro/wjdr/wjdr/task/Task_自动采矿.java @@ -37,7 +37,7 @@ public class Task_自动采矿 extends BaseTask { Logger.info("点击资源搜索按钮"); macro.delayUnstable(1000); - macro.mouseLeftClick(new ViewPoint(33, 648)); + macro.mouseLeftClick(macro.of(33, 648)); Logger.info("等待搜索面板"); ViewRect 野外_搜索 = macro.waitAndMatchLegend("野外_搜索", 0.9); @@ -47,7 +47,7 @@ public class Task_自动采矿 extends BaseTask { } Logger.info("拖动面板"); - macro.mouseLeftDrag(new ViewPoint(433, 679), new ViewPoint(61, 682), true); + macro.mouseLeftDrag(macro.of(433, 679), macro.of(61, 682), true); Logger.info("开始采集资源"); String[] types = new String[]{ @@ -98,14 +98,14 @@ public class Task_自动采矿 extends BaseTask { TaskUtil.execTask(() -> { Logger.info("调整等级"); macro.delayUnstable(700); - macro.mouseLeftClick(new ViewPoint(51, 777)); + macro.mouseLeftClick(macro.of(51, 777)); }, clevel - level, 1000); } if (clevel < level) { TaskUtil.execTask(() -> { Logger.info("调整等级"); macro.delayUnstable(700); - macro.mouseLeftClick(new ViewPoint(360, 777)); + macro.mouseLeftClick(macro.of(360, 777)); }, level - clevel, 1000); } @@ -126,7 +126,7 @@ public class Task_自动采矿 extends BaseTask { macro.delayUnstable(1000); - ViewRect[] viewRects = macro.matchLegend("野外_资源出征", "野外_资源无对队列"); + ViewRect[] viewRects = macro.matchLegend("野外_资源出征", "野外_资源无对队列", "野外_资源无士兵"); if (viewRects[0] != null) { Logger.info("出征"); @@ -135,11 +135,17 @@ public class Task_自动采矿 extends BaseTask { if (viewRects[1] != null) { Logger.info("队列已满,取消采集"); macro.delayUnstable(1000); - macro.mouseLeftClick(new ViewPoint(471, 250)); + macro.mouseLeftClick(macro.of(471, 250)); Logger.info("队列已满,取消采集"); macro.delayUnstable(1000); - macro.mouseLeftClick(new ViewPoint(471, 250)); + macro.mouseLeftClick(macro.of(471, 250)); + return false; + } + if (viewRects[2] != null) { + Logger.info("士兵不足,取消采集"); + macro.delayUnstable(1000); + macro.mouseLeftClick(macro.of(32,30)); return false; }