رمز تنفيذ Java المحدد بمساعدة WeChat Jump هو للرجوع إليه. المحتوى المحدد كما يلي
1. راجع Zhihu لتعليمك كيفية استخدام Python للعب WeChat. بالنظر إلى أنني كنت دائمًا بيثون نصف مخبوز ، فقد خططت لاستخدام Python لتسجيل نقاط من قبل ، لكن لم يكن لدي أي خيار سوى تثبيت بيئة Python وكانت الوحدات المختلفة مفقودة والمبلغ عنها. لذلك قمت بإعادة تنفيذها باستخدام Java.
2. تكوين البيئة والتعليمات ذات الصلة:
1) نظام Windows ، أنا Win10
2) تثبيت بيئة AVA ، JDK7 أو أعلى
3) هاتف Android واحد ، كابل بيانات واحد
4) قم بتثبيت برنامج تشغيل ADB للكمبيوتر ، واتصل بهاتف Android ، وقم بتشغيل وضع تصحيح الأخطاء USB في نفس الوقت
5) افتح لعبة القفز الخاصة ببرنامج WeChat Mini ، ويبدأ برنامج Java في التشغيل ، وقراءة الكود المحدد أدناه
6) أستخدم هاتف Meilan Note2 Android ، بدقة شاشة تبلغ 1920 × 1080. قد تحتاج نماذج مختلفة من الهواتف المحمولة إلى ضبط المعلمات ذات الصلة. يرجى الرجوع إلى تعليقات الرمز للحصول على التفاصيل.
7) أضافت وظيفة إعادة تشغيل اللعبة تلقائيًا بعد الفشل في تسجيل نقاط
8) إنه مجرد ترفيه ، لا تكون جادًا. يقال إن مسؤول WeChat قد اهتم به. إذا كانت النتيجة مرتفعة للغاية ، فقد يتم مسحها. هاها
3. بدون مزيد من اللغط ، يرجى إضافة الرمز:
حزمة com.yihusitian.gameHelper ؛ استيراد java.awt.image.bufferedImage ؛ استيراد java.io.bufferedreader ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstreamreader ؛ استيراد java.util.arrays ؛ استيراد java.util.concurrent.timeunit ؛ استيراد javax.imageio.imageio ؛ /** * مرجع zhihu * * @link <a href = "https://zhuanlan.zhihu.com/p/32452473" rel = "خارجي nofollow" rel = "خارجي nofollow" target = "_blank" * Author leeho */ public class JumpJumphelper {private Static Final String Image_name = "current.png" ؛ Static Final String store_dir = "d:/jump_screencapture" ؛ // Quantity Private Static Final ImmeLengthLength = 5 ؛ // حجم تخزين الصور الخاص الطويل الثابت الطويل [] نهائي خاص rgbinfo rgbinfo = جديد rgbinfo () ؛ سلسلة نهائية خاصة [] adb_screen_capture_cmds = {"adb shell screencap -p /sdcard /" + image_name ، "adb pull /sdcard/current.png" + store_dir} ؛ // تنسيق Y في أسفل منطقة عرض نقاط اللعبة في لقطة الشاشة ، 300 هي قيمة 1920 × 1080. تعديل Final Final Int GamesCorebottomy = 300 وفقًا للوضع الفعلي ؛ // يمكن تعديل معامل وقت الصحافة بشكل مناسب وفقًا للوضع المحدد ؛ Private Double PressTimeCoeeffice = 1.35 ؛ . Final Final Swipey = 1580 ؛ // الارتفاع الأساسي لقطعة الشطرنج هو النهائي الخاص int halfbaseboardheight = 20 ؛ // يتم أخذ عرض قطعة الشطرنج من لقطة الشاشة وضبط النهائي الخاص من قبل نفسك Halmabodywidth = 74 ؛ // تُستخدم إحداثيات نقطة الوسط من اللوحة النابضة في لقطة الشاشة بشكل أساسي لحساب الزاوية. يمكن حساب نسبة XY بناءً على لقطة الشاشة الفعلية. Final Final BoardX1 = 813 ؛ نهائي خاص int boidy1 = 1122 ؛ Private Final BoardX2 = 310 ؛ نهائي خاص int boidy2 = 813 ؛ / ** * احصل على الداما والإحداثيات المركزية للبطولة التالية * * return * author leeho * throws ioException * update 31 ديسمبر 2017 في الساعة 12:18:22 PM */ private int [] gethalmaandboardboardxyvalue (file currentimage) throws ioexception {bufferediMage. عرض int = bufferedImage.getWidth () ؛ ارتفاع int = bufferedimage.getheight () ؛ System.out.println ("العرض:" + width + "، الارتفاع:" + الارتفاع) ؛ int halmaxsum = 0 ؛ int halmaxcount = 0 ؛ int halmaymax = 0 ؛ int boardx = 0 ؛ int حدود = 0 ؛ // نقل نقاط البيكسل من لقطة الشاشة من أعلى إلى أسفل ، واستخدم لون قطعة الشطرنج كأساس للتعرف على الموضع. أخيرًا ، يتم إخراج متوسط القيمة لجميع وحدات البكسل على أدنى صف من لون قطعة الشطرنج ، أي حساب إحداثيات قطعة الشطرنج لـ (int y = gamescoreBottomy ؛ y <height ؛ y ++) {for (int x = 0 ؛ x <width ؛ x ++) {processRgbinfo (pufferedimage ، x ، y) ؛ int rvalue = this.rgbinfo.getRvalue () ؛ int gvalue = this.rgbinfo.getgvalue () ؛ int bvalue = this.rgbinfo.getBvalue () ؛ // حدد موضع قطعة الشطرنج وفقًا لون RGB ، إذا (rvalue> 50 && rvalue <60 && gvalue> 53 && gvalue <63 && bvalue> 95 && bvalue <110) {halmaxsum += x ؛ Halmaxcount ++ ؛ // y قيمة الإحداثيات للصف السفلي لقطعة الشطرنج halmaymax = y> halmaymax؟ Y: Halmaymax ؛ }}} if (halmaxsum! = 0 && halmaxcount! = 0) {// x قيمة الإحداثيات للصف السفلي من قطعة الشطرنج int halmax = halmaxsum /halmaxcount ؛ // حرك نصف ارتفاع هيكل الشطرنج في int halmay = halmaymax - halfbaseboardheight ؛ // ابدأ من gamescorebottomy لـ (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 () ؛ // طالما أن قيمة اللوحة المحسوبة أكبر من 0 ، فهذا يعني أنه تم الحصول على قيمة X Center Costinate X للنقاء التالي. if (boardx> 0) {break ؛ } int boardxSum = 0 ؛ int boardxCount = 0 ؛ لـ (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 () ؛ // قم بتدريب الحالة التي يكون فيها رأس قطعة الشطرنج أعلى من النقل النفق التالي إذا (Math.abs (x - halmax) <halmabodywidth) {متابعة ؛ }. قد يكون النقل التالي دائرة أو صندوقًا. خذ نقاط متعددة وابحث عن المتوسط إذا (Math.abs (pixelr - lastpixelr) + math.abs (pixelg - lastpixelg) + math.abs (pixelb - lastpixelb))> 10) {boardxsum + = x ؛ boardxCount ++ ؛ }} if (boardxsum> 0) {boardx = boardxsum / boardxCount ؛ }} // من الزاوية الفعلية ، ابحث عن الإحداثيات القريبة من مركز اللوحة التالية. 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] ؛ // نتيجة الإحداثيات x [0] = halmax ؛ // نتيجة إحداثي y [1] = Halmay ؛ // نتيجة الإحداثيات x [2] = boardx ؛ // نتيجة إحداثي y [3] = حدود ؛ نتيجة العودة }} الإرجاع null ؛ } / ** * قم بتنفيذ الأمر * * param command * Author leeho * update 31 ديسمبر 2017 في الساعة 12:13:39 PM * / private void executeCommand (string command) {Process Process = null ؛ حاول {process = runtime.getRuntime (). exec (command) ؛ System.out.println ("exec command start:" + command) ؛ process.WAITFOR () ؛ BufferedReader BufferedReader = جديد BufferedReader (New InputStreamReader (Process.geterRorStream ())) ؛ خط السلسلة = bufferedReader.ReadLine () ؛ if (line! = null) {system.out.println (line) ؛ } system.out.println ("exec command End:" + command) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {if (process! = null) {process.destroy () ؛ }}} / ** * ADB يحصل على لقطات Android * * Author leeho * update 31 ديسمبر 2017 في 12:11:42 PM * / private void executeAdbCaptUreCommands () {for (string command: ADB_SCREN_CAPTICTE_CMDS) {executecmand (command) ؛ }} / ** * Jump * * param المسافة * Author Leeho * update 31 ديسمبر 2017 في 12:23:19 PM * / private void dojump (مسافة مزدوجة) {system.out.println ("المسافة:" + المسافة) ؛ ] System.out.println ("pressTime:" + pressTime) ؛ // قم بتنفيذ الأمر PRESS OPERSE string = string.format ("adb shell إدخال Swipe ٪ s ٪ s ٪ s ٪ s" ، swipex ، swipey ، swipex ، swipey ، presstime) ؛ system.out.println (command) ؛ التنفيذي (Command) ؛ } / ** * لعبة أخرى * * Author Leeho * update 31 ديسمبر 2017 في 12:47:06 PM * / private void replaygame () {string command = string.format ( التنفيذي (Command) ؛ } / ** * احسب مسافة القفزة ، أي المسافة بين نقطتين * * param halmax * param halmay * param boardx * param boardy * @return * uthor leeho * update 31 ، 2017 في 12:27:30 مساءً Math.Sqrt (Math.Pow (Math.ABS (Boardx - Halmax) ، 2) + Math.Pow (Math.abs (boardy - halmay) ، 2)) ؛ } public static void main (string [] args) {try {file storedir = new file (store_dir) ؛ if (! storedir.exists ()) {boolean flag = storedir.mkdir () ؛ if (! flag) {system.err.println ("فشل إنشاء دليل تخزين الصور") ؛ يعود؛ }} JumpJumphelper JumpJumphelper = new JumpJumphelper () ؛ // عدد عمليات الإعدام int executeCount = 0 ؛ لـ (؛؛) {// تنفيذ أمر ADB للحصول على شاشة Android jumpjumphelper.executeadbcaptureCommands () ؛ ملف currentImage = ملف جديد (store_dir ، image_name) ؛ if (! currentimage.exists ()) {system.out.println ("الصورة غير موجودة") ؛ يكمل؛ } طول طويل = currentimage.length () ؛ LeachEllength [executeCount ٪ ImageLengthLength] = الطول ؛ // تحقق مما إذا كنت بحاجة إلى إعادة فتح jumpjumphelper.checkdoreplay () ؛ executeCount ++ ؛ System.out.println ("CurrentThrow" + ExecuteCount + "التنفيذ!") ؛ // احصل على إحداثيات مركزية من الداما واللوحة الأساسية int [] النتيجة = jumpjumphelper.gethalmaandboardxyvalue (currentImage) ؛ if (result == null) {system.out.println ("نتيجة الطريقة gethalmaandboardxyvalue فارغة!") ؛ يكمل؛ } int halmax = result [0] ؛ int halmay = النتيجة [1] ؛ int boardx = النتيجة [2] ؛ int boardy = النتيجة [3] ؛ System.out.println ("Halmax:" + Halmax + "، Halmay:" + Halmay + "، boardx:" + boardx + "، boardy:" + boardy) ؛ // حساب مسافة القفز المزدوج JumpDistance = JumpJumphelper.computeJumpDistance (Halmax ، Halmay ، Boardx ، Boardy) ؛ Jumpjumphelper.dojump (JumpDistance) ؛ // البقاء لمدة 2.5 ثانية في كل مرة timunit.milliseconds.sleep (2500) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ }} / ** * تحقق مما إذا كنت بحاجة إلى إعادة التشغيل * * Author Leeho * update 31 ديسمبر ، 2017 1:39:18 PM * / private void checkDoreplay () {if (simeLength [0]> 0 && ickeLength [0] == ImageLength [1] ImageLength [2] LeameLength [3] && ImageLength [3] == ImageLength [4]) {// هذا يعني أن حجم الصورة كان هو نفسه لمدة 5 مرات متتالية. يمكنك أن تعرف أن الشاشة الحالية موجودة في صفائف لعبة أخرى. // محاكاة وانقر فوق الزر لبدء تشغيل اللعبة RedayGame () ؛ }} / ** * احصل على قيمة rgb للإحداثيات المحددة * * param bufferedImage * param x * param y * author leeho * update 31 ديسمبر 2017 في 12:12:43 pm * / private void processrgbinfo (bufferedimage bufferedimage ، int x) int pixel = bufferedImage.getrgb (x ، y) ؛ // تحويل إلى رقم rgb this.rgbinfo.setrvalue ((pixel & 0xFF0000) >> 16) ؛ this.rgbinfo.setgvalue ((pixel & 0xff00) >> 8) ؛ this.rgbinfo.setbvalue ((pixel & 0xff)) ؛ } class rgbinfo {private int rvalue ؛ خاص int gvalue ؛ خاص 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 ؛ }}}لمزيد من المحتوى ، يمكنك الرجوع إلى الموضوع الخاص "Jump on WeChat" للتعلم.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.