From 5ffe3edef4c099ba2329937b62f324d16151d42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=B8=85?= Date: Tue, 2 Jan 2018 18:57:12 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E9=80=82=E9=85=8D=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E5=88=86=E8=BE=A8=E7=8E=87=E7=9A=84=E6=89=8B=E6=9C=BA=20?= =?UTF-8?q?=E9=80=82=E9=85=8D=E4=B8=8D=E5=90=8C=E5=88=86=E8=BE=A8=E7=8E=87?= =?UTF-8?q?=E5=AF=86=E5=BA=A6=E7=9A=84=E6=89=8B=E6=9C=BA=20=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E6=8C=89=E5=8E=8B=E4=BD=8D=E7=BD=AE,=E6=9B=B4?= =?UTF-8?q?=E5=83=8F=E4=BA=BA=E5=B7=A5=E6=93=8D=E4=BD=9C=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E5=88=B00.0.5=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- playJumpJumpWithMouse-0.0.5.jar | Bin 0 -> 62717 bytes pom.xml | 3 +- .../playJumpJumpWithMouse/AdbCaller.java | 157 ++++++++++++------ .../BackgroundImage4Panel.java | 6 +- .../ColorFilterFinder.java | 31 ++-- .../playJumpJumpWithMouse/Constants.java | 6 + .../EndCenterFinder.java | 4 +- .../playJumpJumpWithMouse/ScreenAdapter.java | 100 +++++++++++ .../StartCenterFinder.java | 16 +- 10 files changed, 241 insertions(+), 86 deletions(-) create mode 100644 playJumpJumpWithMouse-0.0.5.jar create mode 100644 src/main/java/com/company/playJumpJumpWithMouse/ScreenAdapter.java diff --git a/README.md b/README.md index e870d57..43a25b7 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ adb pull /sdcard/screen.png # 下载截屏文件到本地 ``` ## 使用方法 -**当前最新代码版本为0.0.4** +**当前最新代码版本为0.0.5** 1. 在电脑上下载好adb,并安装JDK7及以上版本以及配置好java环境变量 2. 打开安卓手机的usb调试模式并授权连接的电脑 > 如果是小米手机,在USB调试下方有``USB调试(安全设置)``打开允许模拟点击 感谢[@wotermelon](https://github.com/wotermelon) @@ -42,7 +42,7 @@ java -jar playJumpJumpWithMouse.jar -a "C:\Users\Home\Desktop\platform-tools\adb * 全自动模式(auto-mode):也就是挂机模式,不需要人工操作,启动后既可以自动识别算法自动帮你玩跳一跳. ## 一些需要注意的点 -* 有些安卓机并不能很好的使用adb exec-out,导致截屏异常,可以尝试使用[老代码](https://github.com/easyworld/PlayJumpJumpWithMouse/blob/0ba11f1968db2a46660562f1b27d3925eec1b9ce/src/com/company/AdbCaller.java)替换现有方法 +* 默认分辨率比例为:**675x1200**,如果你的手机分辨率不是该比例则必须设置-s参数后手动和半自动才能计算准确。比如mate10 pro的分辨率是1080x2160,则设置为**-s 675x1350**. ## 运行截图 ![这是一个截图](https://github.com/easyworld/PlayJumpJumpWithMouse/raw/master/screenshot.png) diff --git a/playJumpJumpWithMouse-0.0.5.jar b/playJumpJumpWithMouse-0.0.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..e1c1e4b8f3af9a2b200a2d1250748c8b30cc3826 GIT binary patch literal 62717 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

+4eGo$|6S{kB#;!d;N)5(V5$&^c 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.company playJumpJumpWithMouse - 0.0.4 + 0.0.5 jar playJumpJumpWithMouse http://maven.apache.org + UTF-8 diff --git a/src/main/java/com/company/playJumpJumpWithMouse/AdbCaller.java b/src/main/java/com/company/playJumpJumpWithMouse/AdbCaller.java index f5c60d0..4109b01 100644 --- a/src/main/java/com/company/playJumpJumpWithMouse/AdbCaller.java +++ b/src/main/java/com/company/playJumpJumpWithMouse/AdbCaller.java @@ -1,67 +1,120 @@ package com.company.playJumpJumpWithMouse; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; public class AdbCaller { - private static String adbPath = Constants.ADB_PATH; + private static String adbPath = Constants.ADB_PATH; - private static String screenshotLocation = Constants.SCREENSHOT_LOCATION; + private static String screenshotLocation = Constants.SCREENSHOT_LOCATION; - public static void setAdbPath(String adbPath) { - AdbCaller.adbPath = adbPath; - } + private static Boolean error = null; - public static void setScreenshotLocation(String screenshotLocation) { - AdbCaller.screenshotLocation = screenshotLocation; - } + public static void setAdbPath(String adbPath) { + AdbCaller.adbPath = adbPath; + } - /** - * 调用adb长按屏幕 - * - * @param timeMilli - */ - public static void longPress(double timeMilli) { - try { - Process process = Runtime.getRuntime() - .exec(adbPath + " shell input touchscreen swipe 170 187 170 187 " + (int) timeMilli); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); - String s; - while ((s = bufferedReader.readLine()) != null) - System.out.println(s); - process.waitFor(); - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } + public static void setScreenshotLocation(String screenshotLocation) { + AdbCaller.screenshotLocation = screenshotLocation; + } - /** - * 改进的截图方法
- * 感谢 hxzqlh - */ - public static void printScreen() { + /** + * 调用adb长按屏幕 + * + * @param timeMilli + */ + public static void longPress(double timeMilli, BufferedImage image) { + try { + int width = image.getWidth() / 2 + (int) (Math.random() * 100); + int height = image.getHeight() - 200 + (int) (Math.random() * 100); + Process process = Runtime.getRuntime() + .exec(adbPath + " shell input touchscreen swipe " + width + " " + height + " " + width + " " + height + " " + (int) timeMilli); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); + String s; + while ((s = bufferedReader.readLine()) != null) + System.out.println(s); + process.waitFor(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } - try { - String[] args = new String[] { "bash", "-c", adbPath + " exec-out screencap -p > " + screenshotLocation }; - String os = System.getProperty("os.name"); - if (os.toLowerCase().startsWith("win")) { - args[0] = "cmd"; - args[1] = "/c"; - } - Process p1 = Runtime.getRuntime().exec(args); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p1.getErrorStream())); - String s; - while ((s = bufferedReader.readLine()) != null) - System.out.println(s); - p1.waitFor(); - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } + /** + * 改进的截图方法
+ * 感谢 hxzqlh + * 当改进的截图方法不能正常执行时降级为常规方法 + */ + public static void printScreen() { + if (error != null && error) { + printScreenWithOld(); + } else { + try { + String[] args = new String[]{"bash", "-c", adbPath + " exec-out screencap -p > " + screenshotLocation}; + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { + args[0] = "cmd"; + args[1] = "/c"; + } + Process p1 = Runtime.getRuntime().exec(args); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p1.getErrorStream())); + String s; + while ((s = bufferedReader.readLine()) != null) + System.out.println(s); + p1.waitFor(); + checkScreenSuccess(); + } catch (IOException e) { + e.printStackTrace(); + error = true; + printScreenWithOld(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + private static void checkScreenSuccess() throws IOException { + if (error == null) { + BufferedImage image = ImageIO.read(new File(screenshotLocation)); + if (image == null) { + throw new IOException("cann't read file \"" + screenshotLocation + "\" into image object"); + } + } + } + + public static void printScreenWithOld() { + try { + Process p1 = Runtime.getRuntime().exec(adbPath + " shell screencap -p /sdcard/screenshot.png"); + p1.waitFor(); + Process p2 = Runtime.getRuntime().exec(adbPath + " pull /sdcard/screenshot.png " + screenshotLocation); + p2.waitFor(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static int getSize() { + try { + Process p = Runtime.getRuntime().exec("adb shell wm density"); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream())); + String line = bufferedReader.readLine(); + String[] splis = line.split(" "); + return Integer.valueOf(splis[splis.length - 1]); + } catch (Exception e) { + e.printStackTrace(); + } + return 480; + } + + public static void main(String[] args) { + System.out.println(getSize()); + } } diff --git a/src/main/java/com/company/playJumpJumpWithMouse/BackgroundImage4Panel.java b/src/main/java/com/company/playJumpJumpWithMouse/BackgroundImage4Panel.java index d7818f8..05c1fa3 100644 --- a/src/main/java/com/company/playJumpJumpWithMouse/BackgroundImage4Panel.java +++ b/src/main/java/com/company/playJumpJumpWithMouse/BackgroundImage4Panel.java @@ -52,6 +52,8 @@ public BackgroundImage4Panel() { */ public static void main(String[] args) { + ScreenAdapter.SCREEN_DPI = AdbCaller.getSize(); + final int resizedScreenWidth, resizedScreenHeight; final double resizedDistancePressTimeRatio; final int screenshotInterval; @@ -196,7 +198,7 @@ public void mouseClicked(MouseEvent e) { int distance = distance(firstPoint, secondPoint); System.out.println("distance:" + distance); isFirst = true; - AdbCaller.longPress(distance * resizedDistancePressTimeRatio);// magic + AdbCaller.longPress(distance * resizedDistancePressTimeRatio, null);// magic // number try { Thread.sleep(screenshotInterval);// wait for screencap @@ -264,7 +266,7 @@ public void run() { + "] , secondPoint = [x=" + secondPoint.x + ",y=" + secondPoint.y + "]"); ColorFilterFinder.updateLastShapeMinMax(bufferedImage, firstPoint, secondPoint); distance = distance(firstPoint, secondPoint); - AdbCaller.longPress(distance * resizedDistancePressTimeRatio);// magic + AdbCaller.longPress(distance * resizedDistancePressTimeRatio, bufferedImage);// magic // number try { Thread.sleep(screenshotInterval);// wait for diff --git a/src/main/java/com/company/playJumpJumpWithMouse/ColorFilterFinder.java b/src/main/java/com/company/playJumpJumpWithMouse/ColorFilterFinder.java index 6a22ef6..130a171 100644 --- a/src/main/java/com/company/playJumpJumpWithMouse/ColorFilterFinder.java +++ b/src/main/java/com/company/playJumpJumpWithMouse/ColorFilterFinder.java @@ -15,11 +15,11 @@ public class ColorFilterFinder { static Point startCenterPoint; - static int lastShapeMinMax = 150; + static int lastShapeMinMax = ScreenAdapter.getShapeMinWidth(); public static Point findEndCenter(BufferedImage bufferedImage, Point startCenterPoint) { ColorFilterFinder.startCenterPoint = startCenterPoint; - bgColor = new Color(bufferedImage.getRGB(540, 700)); + bgColor = new Color(bufferedImage.getRGB(bufferedImage.getWidth() / 2, 120)); Point tmpStartCenterPoint; Point tmpEndCenterPoint; @@ -29,7 +29,7 @@ public static Point findEndCenter(BufferedImage bufferedImage, Point startCenter (int) startCenterPoint.getY()); Color lastColor = bgColor; - for (int y = 600; y < startCenterPoint.y; y++) { + for (int y = bufferedImage.getWidth() / 3; y < startCenterPoint.y; y++) { for (int x = 10; x < bufferedImage.getWidth(); x++) { if (rectangle.contains(x, y)) { continue; @@ -38,9 +38,9 @@ public static Point findEndCenter(BufferedImage bufferedImage, Point startCenter if ((Math.abs(newColor.getRed() - lastColor.getRed()) + Math.abs(newColor.getBlue() - lastColor.getBlue()) + Math.abs(newColor.getGreen() - lastColor.getGreen()) >= 20) - || (Math.abs(newColor.getRed() - lastColor.getRed()) >= 15 - || Math.abs(newColor.getBlue() - lastColor.getBlue()) >= 15 - || Math.abs(newColor.getGreen() - lastColor.getGreen()) >= 15)) { + || (Math.abs(newColor.getRed() - lastColor.getRed()) >= 10 + || Math.abs(newColor.getBlue() - lastColor.getBlue()) >= 10 + || Math.abs(newColor.getGreen() - lastColor.getGreen()) >= 10)) { // System.out.println(BufferImageTest.toHexFromColor(newColor)); // System.out.println(BufferImageTest.toHexFromColor(lastColor)); // System.out.println("y = " + y + " x = " + x); @@ -49,6 +49,7 @@ public static Point findEndCenter(BufferedImage bufferedImage, Point startCenter tmpEndCenterPoint = findEndCenterPoint(bufferedImage, tmpStartCenterPoint); return new Point(tmpStartCenterPoint.x, (tmpEndCenterPoint.y + tmpStartCenterPoint.y) / 2); } + lastColor = newColor; } } return null; @@ -74,11 +75,11 @@ private static Point findEndCenterPoint(BufferedImage bufferedImage, Point tmpSt centY = i; } } - if (centY - tmpStartCenterPoint.y < 40) { - centY = centY + 40; + if (centY - tmpStartCenterPoint.y < ScreenAdapter.getMinShapeHeight()) { + centY = centY + ScreenAdapter.getMinShapeHeight(); } - if (centY - tmpStartCenterPoint.y > 230) { - centY = tmpStartCenterPoint.y + 230; + if (centY - tmpStartCenterPoint.y > ScreenAdapter.getMaxShapeHeight()) { + centY = tmpStartCenterPoint.y + ScreenAdapter.getMaxShapeHeight(); } return new Point(centX, centY); } @@ -92,8 +93,8 @@ private static Point findStartCenterPoint(BufferedImage bufferedImage, int x, in if ((Math.abs(newColor.getRed() - lastColor.getRed()) + Math.abs(newColor.getBlue() - lastColor.getBlue()) + Math.abs(newColor.getGreen() - lastColor.getGreen()) >= 20) || (Math.abs(newColor.getRed() - lastColor.getRed()) >= 15 - || Math.abs(newColor.getBlue() - lastColor.getBlue()) >= 15 - || Math.abs(newColor.getGreen() - lastColor.getGreen()) >= 15)) { + || Math.abs(newColor.getBlue() - lastColor.getBlue()) >= 15 + || Math.abs(newColor.getGreen() - lastColor.getGreen()) >= 15)) { centX = x + (i - x) / 2; } else { break; @@ -106,7 +107,7 @@ private static boolean like(Color a, Color b) { return !((Math.abs(a.getRed() - b.getRed()) + Math.abs(a.getBlue() - b.getBlue()) + Math.abs(a.getGreen() - b.getGreen()) >= 20) || (Math.abs(a.getRed() - b.getRed()) >= 15 || Math.abs(a.getBlue() - b.getBlue()) >= 15 - || Math.abs(a.getGreen() - b.getGreen()) >= 15)); + || Math.abs(a.getGreen() - b.getGreen()) >= 15)); } public static void updateLastShapeMinMax(BufferedImage bufferedImage, Point first, Point second) { @@ -114,7 +115,7 @@ public static void updateLastShapeMinMax(BufferedImage bufferedImage, Point firs for (int x = second.x; x < bufferedImage.getWidth(); x++) { Color newColor = new Color(bufferedImage.getRGB(x, second.y)); if (like(newColor, bgColor)) { - lastShapeMinMax = (int) Math.max((x - second.x) * 1.5, 150); + lastShapeMinMax = (int) Math.max((x - second.x) * 1.5, lastShapeMinMax); break; } } @@ -122,7 +123,7 @@ public static void updateLastShapeMinMax(BufferedImage bufferedImage, Point firs for (int x = second.x; x >= 10; x--) { Color newColor = new Color(bufferedImage.getRGB(x, second.y)); if (like(newColor, bgColor)) { - lastShapeMinMax = (int) Math.max((second.x - x) * 1.5, 150); + lastShapeMinMax = (int) Math.max((second.x - x) * 1.5, lastShapeMinMax); break; } } diff --git a/src/main/java/com/company/playJumpJumpWithMouse/Constants.java b/src/main/java/com/company/playJumpJumpWithMouse/Constants.java index 3b8f960..77daee8 100644 --- a/src/main/java/com/company/playJumpJumpWithMouse/Constants.java +++ b/src/main/java/com/company/playJumpJumpWithMouse/Constants.java @@ -34,6 +34,12 @@ public class Constants { */ public static final int SCREENSHOT_INTERVAL = 3000; // ms + public static final int HDPI = 320; + + public static final int XHDPI = 480; + + public static final int XXHDPI = 640; + /** * 手动模式 */ diff --git a/src/main/java/com/company/playJumpJumpWithMouse/EndCenterFinder.java b/src/main/java/com/company/playJumpJumpWithMouse/EndCenterFinder.java index c7422da..9d07c53 100644 --- a/src/main/java/com/company/playJumpJumpWithMouse/EndCenterFinder.java +++ b/src/main/java/com/company/playJumpJumpWithMouse/EndCenterFinder.java @@ -25,7 +25,7 @@ public static Point findEndCenter(BufferedImage bufferedImage, Point startCenter int centerX = 0; int centerY = 0; int height = bufferedImage.getHeight() * 2 / 3; - for (int h = 200; h < height && h < startCenterPoint.y; h++) { + for (int h = bufferedImage.getHeight() / 3; h < height && h < startCenterPoint.y; h++) { for (int w = 0; w < width; w++) { int color = bufferedImage.getRGB(w, h); Color newColor = new Color(color); @@ -74,7 +74,7 @@ static Point findWhiteCenter(BufferedImage bufferedImage, int x, int y, Point st } } int centerY = minY + (maxY - minY) / 2; - if (maxY - minY < 18) { + if (maxY - minY < ScreenAdapter.getMinWhiteHeight()) { return null; } return new Point((int) (maxX * scaleX), (int) ((centerY))); diff --git a/src/main/java/com/company/playJumpJumpWithMouse/ScreenAdapter.java b/src/main/java/com/company/playJumpJumpWithMouse/ScreenAdapter.java new file mode 100644 index 0000000..1cfb89e --- /dev/null +++ b/src/main/java/com/company/playJumpJumpWithMouse/ScreenAdapter.java @@ -0,0 +1,100 @@ +package com.company.playJumpJumpWithMouse; + +/** + * Created by tangshuai on 2018/1/2. + */ +public class ScreenAdapter { + + + static final int[] centers_xhdpi = new int[]{ + -13948087, -13948087, -13948087, -13948087, -13947830, -13882036, -13816755, -13816755, -13750960, -13750960, + -13684910, -13684653, -13618603, -13553065, -13552808, -13487014, -13420964, -13420964, -13420964, -13420706, + -13420192, -13354656, -13158303, -13158303, -13223582, -13157789, -13026973, -13026973, -13092509, -13157789, + -13092509, -13026973, -13092510, -13158302, -13092766, -13026973, -13026973, -13026973, -13026973, -13026973, + -13026973, -13092766, -13158303, -13158303, -13092510, -13092510, -13026973, -13092510, -13158303, -13026973, + -13026973, -13092766, -13092510, -13026973, -13092766, -13158303, -13158303, -13092767, -13027489, -13027489, + -13027489, -13027489, -13027489, -13027489, -13027490, -13027747, -13027749, -13027496, -13027496, -12961961, + -12962219, -12962218, -12896682, -12830381, -12830381}; + + + static final int[] centers_xxhdpi = new int[]{ + -13948087, -13948087, -13948087, -13947830, -13948087, -13948087, -13948087, -13947830, -13816755, -13816755, + -13750960, -13684910, -13618603, -13553065, -13816755, -13816755, -13750960, -13684910, -13618603, -13553065, + -13487014, -13420964, -13420964, -13420706, -13354656, -13158303, -13487014, -13420964, -13420964, -13420706, + -13354656, -13158303, -13223582, -13157789, -13026973, -13092509, -13092509, -13026973, -13223582, -13157789, + -13026973, -13092509, -13092509, -13026973, -13158302, -13092766, -13026973, -13026973, -13026973, -13026973, + -13158302, -13092766, -13026973, -13026973, -13026973, -13026973, -13158303, -13158303, -13092510, -13026973, + -13158303, -13026973, -13158303, -13158303, -13092510, -13026973, -13158303, -13026973, -13092766, -13092510, + -13092766, -13158303, -13092767, -13027489, -13092766, -13092510, -13092766, -13158303, -13092767, -13027489, + -13027489, -13027489, -13027489, -13027490, -13027749, -13027496, -13027489, -13027489, -13027489, -13027490, + -13027749, -13027496, -12961961, -12962219, -12896682, -12830381, -12961961, -12962219, -12896682, -12830381}; + + static final int[] centers_hdpi = new int[]{ + -13948087, -13948087, -13948087, -13947830, -13816755, -13816755, -13750960, -13684910, -13618603, -13553065, + -13487014, -13420964, -13420964, -13420706, -13354656, -13158303, -13223582, -13157789, -13026973, -13092509, + -13092509, -13026973, -13158302, -13092766, -13026973, -13026973, -13026973, -13026973, -13158303, -13158303, + -13092510, -13026973, -13158303, -13026973, -13092766, -13092510, -13092766, -13158303, -13092767, -13027489, + -13027489, -13027489, -13027489, -13027490, -13027749, -13027496, -12961961, -12962219, -12896682, -12830381}; + + public static int SCREEN_DPI = Constants.XHDPI; + + public static int getShapeMinWidth() { + if (SCREEN_DPI >= Constants.XXHDPI) { + return 200; + } else if (SCREEN_DPI >= Constants.XHDPI) { + return 150; + } else { + return 100; + } + } + + public static int[] getCenterArrays() { + if (SCREEN_DPI >= Constants.XXHDPI) { + return centers_xxhdpi; + } else if (SCREEN_DPI >= Constants.XHDPI) { + return centers_xhdpi; + } else { + return centers_hdpi; + } + } + + public static int getBabyWidth() { + if (SCREEN_DPI >= Constants.XXHDPI) { + return 100; + } else if (SCREEN_DPI >= Constants.XHDPI) { + return 75; + } else { + return 50; + } + } + + public static int getMaxShapeHeight() { + if (SCREEN_DPI >= Constants.XXHDPI) { + return 345; + } else if (SCREEN_DPI >= Constants.XHDPI) { + return 230; + } else { + return 173; + } + } + + public static int getMinShapeHeight() { + if (SCREEN_DPI >= Constants.XXHDPI) { + return 52; + } else if (SCREEN_DPI >= Constants.XHDPI) { + return 40; + } else { + return 26; + } + } + + public static int getMinWhiteHeight(){ + if (SCREEN_DPI >= Constants.XXHDPI) { + return 24; + } else if (SCREEN_DPI >= Constants.XHDPI) { + return 18; + } else { + return 12; + } + } +} diff --git a/src/main/java/com/company/playJumpJumpWithMouse/StartCenterFinder.java b/src/main/java/com/company/playJumpJumpWithMouse/StartCenterFinder.java index 20f523c..a96a640 100644 --- a/src/main/java/com/company/playJumpJumpWithMouse/StartCenterFinder.java +++ b/src/main/java/com/company/playJumpJumpWithMouse/StartCenterFinder.java @@ -9,15 +9,7 @@ */ public class StartCenterFinder { - static final int[] centers = new int[] { -13948087, -13948087, -13948087, -13948087, -13947830, -13882036, - -13816755, -13816755, -13750960, -13750960, -13684910, -13684653, -13618603, -13553065, -13552808, - -13487014, -13420964, -13420964, -13420964, -13420706, -13420192, -13354656, -13158303, -13158303, - -13223582, -13157789, -13026973, -13026973, -13092509, -13157789, -13092509, -13026973, -13092510, - -13158302, -13092766, -13026973, -13026973, -13026973, -13026973, -13026973, -13026973, -13092766, - -13158303, -13158303, -13092510, -13092510, -13026973, -13092510, -13158303, -13026973, -13026973, - -13092766, -13092510, -13026973, -13092766, -13158303, -13158303, -13092767, -13027489, -13027489, - -13027489, -13027489, -13027489, -13027489, -13027490, -13027747, -13027749, -13027496, -13027496, - -12961961, -12962219, -12962218, -12896682, -12830381, -12830381 }; + static int[] centers = ScreenAdapter.getCenterArrays(); public static Point findStartCenter(BufferedImage bufferedImage) { int width = bufferedImage.getWidth(); @@ -29,10 +21,10 @@ public static Point findStartCenter(BufferedImage bufferedImage) { int color = bufferedImage.getRGB(w, h); if (color == centers[0]) { if (checkIsCenter(bufferedImage, h, w)) { - centerX = w + 38; + centerX = w + ScreenAdapter.getBabyWidth() / 2; centerY = h; - return new Point(centerX, (centerY + 3)); + return new Point(centerX, (centerY + 2)); } } } @@ -40,7 +32,7 @@ public static Point findStartCenter(BufferedImage bufferedImage) { } private static boolean checkIsCenter(BufferedImage bufferedImage, int h, int w) { - for (int i = w; i < w + 75; i++) { + for (int i = w; i < w + 50; i++) { int color = bufferedImage.getRGB(i, h); Color centerColor = new Color(centers[i - w]); Color newColor = new Color(color); From cd1b1d7936e1f2e55ace94f2bc02072b43f521ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=B8=85?= Date: Tue, 2 Jan 2018 19:10:03 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=8D=8A=E8=87=AA=E5=8A=A8\=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=20=E5=A1=AB=E4=B8=8AbufferedImage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playJumpJumpWithMouse/BackgroundImage4Panel.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/company/playJumpJumpWithMouse/BackgroundImage4Panel.java b/src/main/java/com/company/playJumpJumpWithMouse/BackgroundImage4Panel.java index 05c1fa3..b1a5d86 100644 --- a/src/main/java/com/company/playJumpJumpWithMouse/BackgroundImage4Panel.java +++ b/src/main/java/com/company/playJumpJumpWithMouse/BackgroundImage4Panel.java @@ -38,6 +38,8 @@ public class BackgroundImage4Panel extends javax.swing.JFrame { private static int playMode = Constants.MODE_MANUAL; + private static BufferedImage bufferedImage; + /** * Creates new form NewJFrame */ @@ -160,7 +162,7 @@ private static void manualMode(final int resizedScreenWidth, final int resizedSc protected void paintComponent(Graphics g) { super.paintComponent(g); try { - BufferedImage bufferedImage = ImageIO.read(new File(screenshotPath)); + bufferedImage = ImageIO.read(new File(screenshotPath)); BufferedImage newImage = new BufferedImage(resizedScreenWidth, resizedScreenHeight, bufferedImage.getType()); if (playMode == Constants.MODE_SEMI_AUTO) { @@ -198,7 +200,7 @@ public void mouseClicked(MouseEvent e) { int distance = distance(firstPoint, secondPoint); System.out.println("distance:" + distance); isFirst = true; - AdbCaller.longPress(distance * resizedDistancePressTimeRatio, null);// magic + AdbCaller.longPress(distance * resizedDistancePressTimeRatio, bufferedImage);// magic // number try { Thread.sleep(screenshotInterval);// wait for screencap From 3f362186c0fd33e8149ea1ff2d26f98bc812c68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=B8=85?= Date: Tue, 2 Jan 2018 20:43:56 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A2=9E=E5=A4=A7=E9=9A=8F=E6=9C=BA?= =?UTF-8?q?=E5=8C=BA=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/company/playJumpJumpWithMouse/AdbCaller.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/company/playJumpJumpWithMouse/AdbCaller.java b/src/main/java/com/company/playJumpJumpWithMouse/AdbCaller.java index 4109b01..3a1ff3d 100644 --- a/src/main/java/com/company/playJumpJumpWithMouse/AdbCaller.java +++ b/src/main/java/com/company/playJumpJumpWithMouse/AdbCaller.java @@ -30,8 +30,8 @@ public static void setScreenshotLocation(String screenshotLocation) { */ public static void longPress(double timeMilli, BufferedImage image) { try { - int width = image.getWidth() / 2 + (int) (Math.random() * 100); - int height = image.getHeight() - 200 + (int) (Math.random() * 100); + int width = image.getWidth() / 3 + (int) (Math.random() * image.getWidth() / 3); + int height = image.getHeight() - 300 + (int) (Math.random() * 200); Process process = Runtime.getRuntime() .exec(adbPath + " shell input touchscreen swipe " + width + " " + height + " " + width + " " + height + " " + (int) timeMilli); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); From 09a4d2caea92cfe1919bceabcfcdfc7caca481c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=B8=85?= Date: Tue, 2 Jan 2018 21:29:41 +0800 Subject: [PATCH 4/4] update playJumpJumpWithMouse-0.0.5.jar file --- playJumpJumpWithMouse-0.0.5.jar | Bin 62717 -> 62832 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/playJumpJumpWithMouse-0.0.5.jar b/playJumpJumpWithMouse-0.0.5.jar index e1c1e4b8f3af9a2b200a2d1250748c8b30cc3826..d119eaca8e499becc51975c7ac477c313ec336ab 100644 GIT binary patch delta 12569 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 delta 12474 zcmZX41ymf((l+i8oS?zo-QC?KxI=JDu&}`v*Tvo4-GaNjhv4oKG~ox{d+&Mk{d3N2 zO+Wo~RZUG#&vtj6A42{xz#-T8DV~J>`1&1yO;sz6xD%-dB+b zuKXfu55RpOUZpjZE!3-AfRloKmBgq+&@U3S!6OS`V>Gojc5zA9JaEC(Kz;sx%re9r zO+f-~(g_C63A;ovh-U9RC<+lH4gqm!c1wYqG+M@18=bWYEw0j*0})CcD%pk_P(`8P zGdu0zb7Oe!uaQ7OMDQzB!AMLMzDnb9&9&py=f~MXrQx&p@76PL^$k%N>~#_r+XNM$ z1ug@?UAr3_SFmn)G1Ly7=wjZ07Yui$TC87@pVkzE2%~3Z;NpDUY=Zza@YX*TYINh{S@;zs_XyD8yCUuWDu^kBm{<%j{U9k$IYI zb%l!Ht7^9zYv_4hz;9OB-ly;YOWc}YMV{FJ!fI}=W5pS3)pSJ@&STZvA`*QLUeU40 zd|bkj_s&6bK;$6ZUK1l@m}lp)$+UQKEP`Tu#^vtya+cgQl3EeAyMA{q{Kk*7oatd> zqroK(Dhvvf{_>SG#Y;%Ci_A?Lxup$bA$s$uEUlu~QN@x<)CHviM_c+V7Y=i2V;195t;ytXq=otNEYL0~JcTZn|j^I!*hK@%+0}htSlx%0DX<5`Suf3nYoY*86c3 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