Kode implementasi JAVA spesifik yang dibantu oleh WeChat Jump adalah untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
1. Lihat Zhihu untuk mengajari Anda cara menggunakan Python untuk bermain WeChat. Mengingat bahwa saya selalu menjadi Python setengah matang, saya berencana menggunakan Python untuk mencetak poin sebelumnya, tetapi saya tidak punya pilihan selain memasang lingkungan Python dan berbagai modul hilang dan melaporkan kesalahan. Jadi saya mengimplementasikannya kembali menggunakan Java.
2. Konfigurasi Lingkungan dan Instruksi Terkait:
1) Sistem Windows, saya win10
2) Pasang lingkungan AVA, JDK7 atau di atas
3) Satu ponsel android, satu kabel data
4) Instal driver ADB untuk komputer, sambungkan ke ponsel Android, dan nyalakan mode debugging USB secara bersamaan
5) Buka permainan lompat program mini WeChat, program Java mulai berjalan, dan baca kode spesifik di bawah ini
6) Saya menggunakan ponsel Android Meilan2, dengan resolusi layar 1920x1080. Model ponsel yang berbeda mungkin perlu menyesuaikan parameter yang relevan. Silakan merujuk ke komentar kode untuk detailnya.
7) Menambahkan fungsi memulai kembali permainan secara otomatis setelah gagal mencetak poin
8) Ini hanya hiburan, jangan serius. Dikatakan bahwa pejabat WeChat telah memperhatikannya. Jika skor terlalu tinggi, mungkin dibersihkan. Ha ha
3. Tanpa basa -basi lagi, tambahkan kode:
paket com.yihusitian.gamehelper; impor java.awt.image.bufferedimage; impor java.io.bufferedReader; impor java.io.file; impor java.io.ioException; impor java.io.inputStreamReader; impor java.util.arrays; impor java.util.concurrent.timeunit; impor javax.imageio.imageio; /** * Referensi zhihu * * @link <a href = "https://zhuanlan.zhihu.com/p/32452473" rel = "nofollow eksternal" rel = "nofollow eksternal" target = "_blank"> https://zhuanlan.zhuanlan.zhuanlan.zhuanlan.zhuan.z324242 * @author leeho */ kelas publik Jumpjumphelper {private static final string image_name = "current.png"; Private Static Final String Store_dir = "D:/Jump_Screencapture"; // Kuantitas Private Static Int ImageLengthLengthPength = 5; // ukuran gambar penyimpanan gambar private static final long [] imagelength = new Long [imagelengthlength]; final pribadi rgbinfo rgbinfo = rgbinfo baru (); Private Final String [] adb_screen_capture_cmds = {"adb shell screencap -p /sdcard /" + image_name, "adb pull /sdcard/current.png" + store_dir}; // Koordinat Y di bagian bawah area tampilan skor game di tangkapan layar, 300 adalah nilai 1920x1080. Memodifikasi final private int gamescorebottomy = 300 sesuai dengan situasi aktual; // Koefisien waktu pers dapat disesuaikan dengan tepat sesuai dengan situasi tertentu; private final double pressTimeCoEfficient = 1.35; // Koordinat titik awal pers juga merupakan koordinat titik awal dari game berikutnya swipex final swipex = 550; private final int swipey = 1580; // Tinggi dasar dari potongan catur adalah final final final finalbaseBoardHeight = 20; // Lebar potongan catur diambil dari tangkapan layar dan menyesuaikan int final pribadi sendiri halmabodywidth = 74; // Koordinat titik tengah dari dua springboard di tangkapan layar game terutama digunakan untuk menghitung sudut. Proporsi XY dapat dihitung berdasarkan tangkapan layar yang sebenarnya. Private final int boardx1 = 813; private final int boardy1 = 1122; private final int boardx2 = 310; private final int boardy2 = 813; / ** * Dapatkan checker dan koordinat pusat dari batu loncatan berikutnya * * @return * @author leeho * @throws ioException * @update 31 Desember 2017 pukul 12:18:22 PM */ int private [] getHalmaandboardValue (file Currentimage) lemparan ioException {Buffermage {file BufferedSception {File Buffered (File CurrontImage) (File BuffedeMage (File BuffedeMage (File Buffed (File Buffed. Int width = bufferedImage.getWidth (); int tinggi = bufferedImage.getHeight (); System.out.println ("Lebar:" + Lebar + ", Tinggi:" + Tinggi); int halmaxsum = 0; int halmaxcount = 0; int halmaymax = 0; int boardx = 0; int boardy = 0; // Transfer titik piksel dari tangkapan layar dari atas ke bawah, dan gunakan warna potongan catur sebagai dasar untuk pengenalan posisi. Akhirnya, nilai rata -rata semua piksel pada baris terendah dari warna potongan catur diambil, yaitu, menghitung koordinat potongan catur untuk (int y = gamescorebottomy; y <tinggi; y ++) {untuk (int x = 0; x <lebar; x ++) {prosesrgbinfo (bufferedimage, x, y); int rvalue = this.rgbinfo.getRvalue (); int gValue = this.rgbinfo.getGvalue (); int bvalue = this.rgbinfo.getBvalue (); // Identifikasi posisi potongan catur sesuai dengan warna RGB, if (rvalue> 50 && rvalue <60 && gvalue> 53 && gvalue <63 && bvalue> 95 && bvalue <110) {halmaxsum += x; halmaxcount ++; // y Nilai koordinat dari baris bawah bagian catur halmaymax = y> halmaymax? Y: Halmaymax; }}} if (halmaxsum! = 0 && halmaxcount! = 0) {// x Nilai koordinat dari baris bawah bagian catur int halmax = halmaxsum /halmaxcount; // Pindahkan setengah dari sasis piece catur tinggi ke atas halmay = halmaymax - halfbaseboardheight; // Mulai dari gamescorebottomy untuk (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 (); // Selama nilai boardx yang dihitung lebih besar dari 0, itu berarti bahwa pusat koordinat x nilai loncatan berikutnya telah diperoleh. if (boardx> 0) {break; } int boardxsum = 0; int boardxcount = 0; untuk (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 (); // Latih kasing di mana kepala potongan catur lebih tinggi dari loncatan berikutnya IF (math.abs (x - halmax) <halmabodywidth) {lanjutkan; } // Pindai dari atas ke bawah ke posisi simpul batu loncatan berikutnya. Loncatan berikutnya mungkin lingkaran atau kotak. Ambil beberapa poin dan temukan rata -rata IF ((Math.abs (pixelr - lastpixelr) + math.abs (pixelg - lastpixelg) + math.abs (pixelb - lastpixelb))> 10) {boardxsum + = x; BoardXCount ++; }} if (boardxsum> 0) {boardx = boardxsum / boardxcount; }} // Dari sudut yang sebenarnya, temukan koordinat dekat dengan pusat papan berikutnya. 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]; // hasil koordinat x [0] = halmax; // hasil koordinat y [1] = halmay; // hasil koordinat x [2] = boardx; // hasil koordinat y [3] = boardy; hasil pengembalian; }} return null; } / ** * Jalankan perintah * * @param command * @author leeho * @update 31 Desember 2017 jam 12:13:39 pm * / private void executeCommand (perintah string) {proses proses = null; coba {proses = runtime.getRuntime (). exec (command); System.out.println ("Command Exec Start:" + Command); Process.waitfor (); BufferedReader bufferedReader = BufferedReader baru (inputStreamReader baru (process.getErrorStream ())); String line = bufferedReader.readline (); if (line! = null) {System.out.println (line); } System.out.println ("Exec Command End:" + Command); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {if (proses! = null) {process.destroy (); }}} / ** * ADB Mendapat layar android * * @author leeho * @update 31 Desember 2017 jam 12:11:42 PM * / private void executeadbcaptureCommands () {for command: adb_screen_capture_cmds) {executecommand (command): command: adb_screen_capture_cmds) {executecommand (command); }} / ** * Jump * * @param jarak * @author leeho * @update 31 Desember 2017 jam 12:23:19 PM * / Private void dojump (jarak ganda) {System.out.println ("jarak:" + jarak); // Hitung waktu tekan, minimum 200ms int pressTime = (int) math.max (jarak * pressTimecoefisien, 200); System.out.println ("PressTime:" + PressTime); // Jalankan Perintah Operasi Tekan Command = String.Format ("ADB Shell Input Swipe %S %S %S %S %S", Swipex, Swipey, Swipex, Swipey, PressTime); System.out.println (perintah); ExecuteCommand (Command); } / ** * Game lain * * @author leeho * @update 31 Desember 2017 jam 12:47:06 pm * / private void replaygame () {command string = string.format ("input shell adb tap %s %s", swipex, swipey); ExecuteCommand (Command); } /** * 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) {coba {file storedir = file baru (store_dir); if (! storedir.exists ()) {boolean flag = storedir.mkdir (); if (! flag) {system.err.println ("Buat direktori penyimpanan gambar gagal"); kembali; }} Jumpjumphelper Jumpjumphelper = new jumpjumphelper (); // Jumlah eksekusi int executeCount = 0; for (;;) {// Jalankan perintah ADB untuk mendapatkan Android Screenshot Jumpjumphelper.ExecuteAdbCaptureCommands (); File currentImage = file baru (store_dir, image_name); if (! currentImage.exists ()) {System.out.println ("Gambar tidak ada"); melanjutkan; } panjang panjang = currentImage.length (); imagelength [executeCount % imagelengthlength] = panjang; // Periksa apakah Anda perlu membuka kembali Jumpjumphelper.checkdoreplay (); ExecuteCount ++; System.out.println ("CurrentThrow" + ExecuteCount + "Execution!"); // Dapatkan koordinat tengah pemeriksa dan inter plat dasar [] hasil = jumpjumphelper.gethalmAdboardxyValue (currentImage); if (result == null) {System.out.println ("Hasil dari metode gethalmAdboardxyValue adalah null!"); melanjutkan; } int halmax = hasil [0]; int halmay = hasil [1]; int boardx = hasil [2]; int boardy = hasil [3]; System.out.println ("halmax:" + halmax + ", halmay:" + halmay + ", boardx:" + boardx + ", boardy:" + boardy); // Hitung jarak lompatan ganda jumpdistance = jumpjumphelper.computeJumpdistance (Halmax, Halmay, Boardx, Boardy); jumpjumphelper.dojump (lompatan); // tinggal selama 2,5 detik setiap kali timeunit.milliseconds.sleep (2500); }} catch (Exception e) {e.printstacktrace (); }} / ** * Periksa apakah Anda perlu restart * * @author leeho * @update 31 Desember 2017 1:39:18 pm * / private void checkDoreplay () {if (imagelength [0] = 2 imagelength [0] == ImageLength [1] && Imagelength [1] == Panjang [0] == Imagelength [1] && ImageLength [1] == Panjang [0] == Imagelength [1] && Imagelength [1] == Panjang [0] == Imagelength [1] imagelength [2] imagelength [3] && imagelength [3] == ImageLength [4]) {// Ini berarti bahwa ukuran gambar telah sama untuk 5 kali berturut -turut. Anda dapat mengetahui bahwa layar saat ini ada di array game lain. // Simulasi dan klik tombol untuk memulai permainan replaygame (); }} / ** * Dapatkan nilai RGB dari koordinat yang ditentukan * * @param buferedImage * @param x * @param y * @author leeho * @update 31 Desember 2017 pukul 12:12:43 pm * / private void processRgbinfo (bufferedimage bufferedimage, int x, int x, y) {rufferedMage. int pixel = bufferedImage.getrgb (x, y); // Konversi ke nomor RGB this.rgbinfo.setrvalue ((Pixel & 0xff0000) >> 16); this.rgbinfo.setGvalue ((pixel & 0xff00) >> 8); this.rgbinfo.setBvalue ((pixel & 0xff)); } kelas rgbinfo {private int rvalue; private int gvalue; private int bvalue; publik 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; }}}Untuk konten lebih lanjut, Anda dapat merujuk pada topik khusus "Jump on WeChat" untuk dipelajari.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.