Der spezifische Java -Implementierungscode, der vom WeChat -Sprung unterstützt wird, ist Ihre Referenz. Der spezifische Inhalt ist wie folgt
1. Beziehen Sie sich auf Zhihu, um Ihnen beizubringen, wie Sie Python verwenden, um WeChat zu spielen. Angesichts der Tatsache, dass ich immer ein halbgebackener Python war, hatte ich vor, Python zu verwenden, um Punkte zu erzielen, aber ich hatte keine andere Wahl, als die Python-Umgebung zu installieren, und verschiedene Module fehlten und gemeldete Fehler. Also habe ich es mit Java erneut implementiert.
2. Umgebungskonfiguration und verwandte Anweisungen:
1) Windows -System, ich bin win10
2) Installieren Sie die AVA -Umgebung, JDK7 oder höher
3) Ein Android -Telefon, ein Datenkabel
4) Installieren Sie den ADB -Treiber für den Computer, stellen Sie eine Verbindung zum Android -Telefon her und aktivieren Sie den USB -Debugging -Modus gleichzeitig
5) Öffnen Sie das Sprungspiel des WeChat Mini -Programms, das Java -Programm beginnt mit dem Laufen und lesen Sie den jeweiligen Code unten
6) Ich benutze Meilan Note2 Android Phone mit einer Bildschirmauflösung von 1920 x 1080. Verschiedene Modelle von Mobiltelefonen müssen möglicherweise relevante Parameter einstellen. Weitere Informationen finden Sie in den Code -Kommentaren.
7) Die Funktion des automatischen Neustarts des Spiels hinzugefügt, nachdem sie keine Punkte erzielten
8) Es ist nur Unterhaltung, sei es nicht ernst. Es wird gesagt, dass der WeChat -Beamte darauf geachtet hat. Wenn die Punktzahl zu hoch ist, kann sie gelöscht werden. Haha
3. Ohne weiteres fügen Sie den Code hinzu:
Paket com.yihusitian.gamehelper; Import Java.awt.image.BuffenedImage; Import Java.io.BufferedReader; Import Java.io.file; importieren java.io.ioException; importieren java.io.inputStreamReader; Import Java.util.Arrays; Import Java.util.Concurrent.TimeUnit; import Javax.imageo.imageo; /** * Reference Zhihu* * @link <a href="https://zhuanlan.zhihu.com/p/32452473" rel="external nofollow" rel="external nofollow" target="_blank">https://zhuanlan.zhihu.com/p/32452473</a> * * Sprung assist * * @Author Leeeho */ Public Class JumpJumpHelper {private statische endgültige String image_name = "current.png"; private statische endgültige String Store_dir = "D:/jump_screencapture"; // Quantity Private statische endgültige Int ImagelengthLength = 5; // Größe des Bildspeichers private statische endgültige lange Long [] Imagelength = new Long [ImagelengthLength]; private final rgbinfo rgbinfo = new rgbinfo (); private final String [] adb_screen_capture_cmds = {"adb Shell screencap -p /sdcard /" + image_name, "adb pull /sdcard/current.png" + store_dir}; // Die y -Koordinate am unteren Rand des Spiels der Spiele im Screenshot ist der Wert von 1920x1080. Ändern Sie die private endgültige Int Gamescorebottomy = 300 gemäß der tatsächlichen Situation; // Der Druckzeitkoeffizient kann entsprechend der spezifischen Situation angemessen eingestellt werden. private endgültige doppelte pressTimeCoeffiction = 1,35; // Die Startpunktkoordinate der Presse ist auch die Ausgangspunktkoordinate des nächsten Spiels Private Final int Swipex = 550; Private Final INT SWIPEY = 1580; // Die Basishöhe des Schachstücks ist private endgültige Int HalfbaseboardHeight = 20; // Die Breite des Schachstücks wird aus dem Screenshot entnommen und die private endgültige INT alleine Halmabodywidth = 74 anpassen; // Die Mittelpunktkoordinaten der beiden Springboards im Spiel -Screenshot werden hauptsächlich zur Berechnung des Winkels verwendet. Der Anteil von XY kann basierend auf dem tatsächlichen Screenshot berechnet werden. Private endgültige int boardx1 = 813; privates Final INT Boardy1 = 1122; private endgültige int boardx2 = 310; Private Final INT Boardy2 = 813; / ** * Holen Sie sich die Checkers und die Mitte -Koordinaten des nächsten Sprungbretts * * @return * @Author Leeho * @Throws ioException * @Update 31. Dezember 2017 um 12:18:22 Uhr */ privat int [] gethalmaandboardxyvalue (Dateistromabkommen) throws ioException {bufperedimage = pageio.read (aktuelle IoException); int width = bufferedImage.getWidth (); int Höhe = bufferedImage.getheight (); System.out.println ("Breite:" + width + ", Höhe:" + Höhe); int halmaxsum = 0; int halmaxCount = 0; int halmaymax = 0; int boardx = 0; int boardy = 0; // Übertragen Sie die Pixelpunkte vom Screenshot von oben nach unten und verwenden Sie die Farbe des Schachstücks als Grundlage für die Positionserkennung. Schließlich wird der Durchschnittswert aller Pixel auf der niedrigsten Zeile der Schach -Stückfarbe herausgenommen, dh die Koordinaten des Schachstücks für (int y = Gamescorebottomy; y <height; y ++) {für (int x = 0; x <breit; x ++) {processRgbinfo (gepuffert (int x = 0; x <); int rvalue = this.rgbinfo.getRValue (); int gValue = this.rgbinfo.getGValue (); int bValue = this.rgbinfo.getBValue (); // Identifizieren Sie die Position des Schachstücks gemäß der Farbe von RGB, if (rvalue> 50 && rvalue <60 && gvalue> 53 && gvalue <63 && bvalue> 95 && bvalue <110) {Halmaxsum += x; HalmaxCount ++; // y Koordinatenwert der unteren Reihe des Schachstücks Halmaymax = y> Halmaymax? Y: Halmaymax; }}} if (halmaxsum! = 0 && halmaxCount! // Hälfte des Schachstückshöhehöhe nach oben Halmay = Halmaymax - HalfbaseboardHeight; // Beginnen Sie von Gamescorebottomy für (int y = Gamescorebottomy; y <height; y ++) {processrgbinfo (bufferedImage, 0, y); int lastpixelr = this.rgbinfo.getRValue (); int lastpixelg = this.rgbinfo.getGValue (); int lastpixelb = this.rgbinfo.getBValue (); // Solange der berechnete Boardx -Wert größer als 0 ist, bedeutet dies, dass der Zentrumkoordinaten -X -Wert des nächsten Sprungbretts erhalten wurde. if (boardx> 0) {break; } int boardxsum = 0; int boardxCount = 0; für (int x = 0; x <width; x ++) {processRgBInfo (bufferedImage, x, y); int pixelr = this.rgbinfo.getRValue (); int pixelg = this.rgbinfo.getGValue (); int pixelb = this.rgbinfo.getBValue (); // trainiere den Fall, in dem der Kopf des Schachstücks höher ist als das nächste Sprungbrett, wenn (math.abs (x - halmax) <halmabodywidth) {Fortsetzung; } // Scannen Sie von oben nach unten bis zur Scheitelpunktposition des nächsten Sprungbretts. Das nächste Sprungbrett kann ein Kreis oder eine Schachtel sein. Nehmen Sie mehrere Punkte und finden Sie den Durchschnitt if ((math.abs (pixelr - lastpixelr) + math.abs (pixelg - lastpixelg) + math.abs (pixelb - lastpixelb))> 10) {boardxsum + = x; boardxCount ++; }} if (boardxsum> 0) {boardx = boardxsum / boardxCount; }} // Finden Sie aus dem tatsächlichen Winkel die Koordinaten in der Nähe der Mitte des nächsten Boards. boardy = (int) (halmay - math.abs (boardx - halmax) * math.abs (boardy1 - boardy2) / math.abs (boardx1 - boardx2)); if (boardx> 0 && boardy> 0) {int [] result = new int [4]; // das X -Koordinatenergebnis [0] = Halmax; // das Y -Koordinatenergebnis [1] = Halmay; // das X -Koordinatenergebnis [2] = boardx; // das Y -Koordinatenergebnis [3] = Boardy; Rückgabeergebnis; }} return null; } / ** * Führen Sie den Befehl * * * @param aus * @author leeeho * @update 31. Dezember 2017 um 12:13:39 Uhr * / private void executeCommand (String -Befehl) {Process Process = null; try {process = runTime.getRuntime (). exec (command); System.out.println ("Exec -Befehl starten:" + Befehl); process.waitfor (); BufferedReader bufferedReader = new bufferedReader (neuer InputStreamReader (process.getErrorStream ())); String line = bufferedReader.readline (); if (line! = null) {System.out.println (Linie); } System.out.println ("Exec -Befehlsende:" + Befehl); } catch (Ausnahme e) {e.printstacktrace (); } endlich {if (prozess! = null) {process.destroy (); }}} / ** * ADB erhält Android -Screenshots * * @author Leeeho * @Update 31. Dezember 2017 um 12:11:42 PM * / private void executeadbcaptureCommands () {für (String -Befehl: adb_screen_capture_capture_capture) {executecommand (Befehl); }} / ** * springen * * @param distanz * @author Leeho * @Update 31. Dezember 2017 um 12:23:19 Uhr * / private void DoJump (Doppelentfernung) {system.out.println ("Distanz:" + Distanz); // Berechnen Sie die Drückenzeit, minimal 200 ms int pressTime = (int) math.max (Entfernung * pressTimeCoefficienz, 200); System.out.println ("PressTime:" + pressTime); // Führen Sie den Befehl für den Betrieb von Betriebsstring = string.Format aus ("ADB -Shell -Eingangs -Swipe %s %s %s %s", Swipex, Swipey, Swipex, Swipey, PressTime); System.out.println (Befehl); ExecuteCommand (Befehl); } / ** * Ein weiteres Spiel * * @Author Leeeho * @Update 31. Dezember 2017 um 12:47:06 Uhr * / private void replaygame () {String command = string.format ("Adb Shell Input TAP TIP %S %S", SWIPEX, SWIPEY); ExecuteCommand (Befehl); } /** * Calculate the distance of the jump, that is, the distance between two points* * @param halmaX * @param halmaY * @param boardX * @param boardY * @return * @author LeeHo * @update December 31, 2017 at 12:27:30 pm */ private double computeJumpDistance(int halmaX, int halmaY, int boardX, int boardY) { return Math.sqrt (math.pow (math.abs (boardx - halmax), 2) + math.pow (Math.abs (Boardy - Halmay), 2)); } public static void main (string [] args) {try {file sporedir = new File (store_dir); if (! storedir.exists ()) {boolean flag = storedir.mkdir (); if (! Flag) {System.err.println ("Bildspeicherverzeichnis erstellen"); zurückkehren; }} JumpJumpHelper JumpJumpHelper = new JumpJumpHelper (); // Anzahl der Ausführungen int executeCount = 0; für (;;) {// ADB -Befehl ausführen, um Android -Screenshot JumpJumpHelper.ExecuteadbcaptureCommands () zu erhalten; Datei CurrentImage = New Datei (Store_dir, Image_Name); if (! currentImage.exists ()) {System.out.println ("Das Bild existiert nicht"); weitermachen; } Langlänge = CurrentImage.length (); Imagelength [ExecuteCount % ImagelengthLength] = Länge; // Überprüfen Sie, ob Sie JumpJumpHelper.CheckDoreplay () wiedereröffnen müssen; ExecuteCount ++; System.out.println ("CurrentThrow" + ExecuteCount + "Ausführung!"); // Die Mittelkoordinaten von Checkern und Basisplatte int [] result = JumpJumpHelper.gethalmaandboardxyValue (CurrentImage) erhalten; if (result == null) {System.out.println ("Das Ergebnis der Methode GethalmaandboardxyValue ist null!"); weitermachen; } int halmax = result [0]; int halmay = result [1]; int boardx = Ergebnis [2]; int boardy = Ergebnis [3]; System.out.println ("Halmax:" + Halmax + ", Halmay:" + Halmay + ", boardx:" + boardx + ", boardy:" + boardy); // Berechnen Sie die Entfernung des Sprung -Double Jumpdistance = JumpJumphelper.comPutejumpdistance (Halmax, Halmay, Boardx, Boardy); JumpJumpHelper.Dojump (Jumpdistance); // Jedes Mal 2,5 Sekunden bleiben. }} catch (Ausnahme e) {e.printstacktrace (); }} / ** * Überprüfen Sie, ob Sie neu gestartet werden müssen Imagelength [2] Imagelength [3] && Imagelength [3] == Imagelength [4]) {// Dies bedeutet, dass die Bildgröße für 5 aufeinanderfolgende Zeiten gleich war. Sie können wissen, dass sich der aktuelle Bildschirm in einer anderen Spiele befindet. // simulieren und klicken Sie auf die Schaltfläche, um das Spiel ReplayGame () zu starten. }} / ** * Erhalten Sie den RGB -Wert der angegebenen Koordinaten * * @param bufferedImage * @param x * @param y * @author leeeho * @update 31. Dezember 2017 um 12:12:43 pm * / private void processrgbinfo (buffenedimage buffenedimage, int x, int x, int x, int x, {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{) {{{{{{{{{{{{{{nator)); int pixel = bufferedImage.getRGB (x, y); // in RGB -Nummer this.rgbinfo.setRValue ((Pixel & 0xff0000) konvertieren (Pixel & 0xff0000) >> 16); this.rgbinfo.setGValue ((Pixel & 0xff00) >> 8); this.rgbinfo.setbValue ((Pixel & 0xff)); } class rgbinfo {private int rvalue; Privat int gvalue; Privat int bValue; public int getRValue () {return rvalue; } public void setRValue (int rvalue) {rvalue = rvalue; } public int getgValue () {return gValue; } public void setgValue (int gValue) {gValue = gValue; } public int getbValue () {return bValue; } public void setBValue (int bValue) {bValue = bValue; } public void reset () {this.rValue = 0; this.gValue = 0; this.bvalue = 0; }}}Für weitere Inhalte können Sie sich auf das spezielle Thema "Spring on WeChat" beziehen, um zu lernen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.