返回顶部
首页 > 资讯 > 精选 >Java如何实现微信跳一跳辅助
  • 775
分享到

Java如何实现微信跳一跳辅助

2023-05-30 16:05:27 775人浏览 八月长安
摘要

这篇文章主要介绍Java如何实现微信跳一跳辅助,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境配置及相关说明:1)、windows系统,本人win102)、AVA环境安装,jdk7以上即可3)、安卓手机一部、数据线

这篇文章主要介绍Java如何实现微信跳一跳辅助,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

环境配置及相关说明:

1)、windows系统,本人win10
2)、AVA环境安装,jdk7以上即可
3)、安卓手机一部、数据线一条
4)、电脑安装ADB驱动,连接安卓手机,同时打开USB调试模式
5)、打开微信小程序的跳一跳游戏,JAVA程序跑起来,具体代码往下看
6)、本人所用为魅蓝note2安卓手机,屏幕 分辨率1920x1080,不同型号的手机,可能需要调整相关参数,具体看代码注释
7)、增加了刷分失败后游戏自动重新开局功能
8)、娱乐而已,不要较真,据说微信官方已经关注,分数太高可能会被清零,哈哈

上代码:

package com.yihusitian.gamehelper;  import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.concurrent.TimeUnit;  import javax.imageio.ImageIO;    private int[] getHalmaAndBoardXYValue(File currentImage) throws IOException  {   BufferedImage bufferedImage = ImageIO.read(currentImage);   int width = bufferedImage.getWidth();   int height = bufferedImage.getHeight();   System.out.println("宽度:" + width + ",高度:" + height);   int halmaXSum = 0;   int halmaXCount = 0;   int halmaYMax = 0;   int boardX = 0;   int boardY = 0;   //从截屏从上往下逐行遍历像素点,以棋子颜色作为位置识别的依据,最终取出棋子颜色最低行所有像素点的平均值,即计算出棋子所在的坐标   for (int y = gameScoreBottomY; y < height; y++)   {    for (int x = 0; x < width; x++)    {     processRGBInfo(bufferedImage, x, y);     int rValue = this.rgbInfo.getRValue();     int gValue = this.rgbInfo.getGValue();     int bValue = this.rgbInfo.getBValue();     //根据RGB的颜色来识别棋子的位置,     if (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开始    for (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();     //只要计算出来的boardX的值大于0,就表示下个跳板的中心坐标X值取到了。     if (boardX > 0)     {      break;     }     int boardXSum = 0;     int boardXCount = 0;     for (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();      //处理棋子头部比下一个跳板还高的情况      if (Math.abs(x - halmaX) < halmaBodyWidth)      {       continue;      }       //从上往下逐行扫描至下一个跳板的顶点位置,下个跳板可能为圆形,也可能为方框,取多个点,求平均值      if ((Math.abs(pixelR - lastPixelR) + Math.abs(pixelG - lastPixelG) + Math.abs(pixelB - lastPixelB)) > 10)      {       boardXSum += x;       boardXCount++;      }     }      if (boardXSum > 0)     {      boardX = boardXSum / boardXCount;     }    }     //按实际的角度来算,找到接近下一个 board 中心的坐标    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坐标     result[0] = halmaX;     //棋子的Y坐标     result[1] = halmaY;     //下一块跳板的X坐标     result[2] = boardX;     //下一块跳板的Y坐标     result[3] = boardY;     return result;    }   }    return null;  }     private void executeCommand(String command)  {   Process process = null;   try   {    process = Runtime.getRuntime().exec(command);    System.out.println("exec command start: " + command);    process.waitFor();    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(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();   }   finally   {    if (process != null)    {     process.destroy();    }   }  }     private void executeADBCaptureCommands()  {   for (String command : ADB_SCREEN_CAPTURE_CMDS)   {    executeCommand(command);   }  }     private void doJump(double distance)  {   System.out.println("distance: " + distance);   //计算按压时间,最小200毫秒   int pressTime = (int) Math.max(distance * pressTimeCoefficient, 200);   System.out.println("pressTime: " + pressTime);   //执行按压操作   String command = String.fORMat("adb shell input swipe %s %s %s %s %s", swipeX, swipeY, swipeX, swipeY,     pressTime);   System.out.println(command);   executeCommand(command);  }     private void replayGame()  {   String command = String.format("adb shell input tap %s %s", swipeX, swipeY);   executeCommand(command);  }     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 storeDir = new File(STORE_DIR);    if (!storeDir.exists()) {     boolean flag = storeDir.mkdir();     if (!flag) {      System.err.println("创建图片存储目录失败");      return;     }    }        JumpJumpHelper jumpjumpHelper = new JumpJumpHelper();    //执行次数    int executeCount = 0;    for (;;)    {     //执行ADB命令,获取安卓截屏     jumpjumpHelper.executeADBCaptureCommands();     File currentImage = new File(STORE_DIR, IMAGE_NAME);     if (!currentImage.exists())     {      System.out.println("图片不存在");      continue;     }      long length = currentImage.length();     imageLength[executeCount % imageLengthLength] = length;     //查看是否需要重新开局     jumpjumpHelper.checkDoReplay();     executeCount++;     System.out.println("当前第" + executeCount + "次执行!");     //获取跳棋和底板的中心坐标     int[] result = jumpjumpHelper.getHalmaAndBoardXYValue(currentImage);     if (result == null)     {      System.out.println("The result of method getHalmaAndBoardXYValue is null!");      continue;     }     int halmaX = result[0];     int halmaY = result[1];     int boardX = result[2];     int boardY = result[3];     System.out.println("halmaX: " + halmaX + ", halmaY: " + halmaY + ", boardX: " + boardX + ", boardY: "       + boardY);     //计算跳跃的距离     double jumpDistance = jumpjumpHelper.computeJumpDistance(halmaX, halmaY, boardX, boardY);     jumpjumpHelper.doJump(jumpDistance);     //每次停留2.5秒     TimeUnit.MILLISECONDS.sleep(2500);    }   }   catch (Exception e)   {    e.printStackTrace();   }  }     private void checkDoReplay()  {   if (imageLength[0] > 0 && imageLength[0] == imageLength[1] && imageLength[1] == imageLength[2]     && imageLength[2] == imageLength[3] && imageLength[3] == imageLength[4])   {    //此时表示已经连续5次图片大小一样了,可知当前屏幕处于再来一局    Arrays.fill(imageLength, 0);    //模拟点击再来一局按钮重新开局    replayGame();   }  }     private void processRGBInfo(BufferedImage bufferedImage, int x, int y)  {   this.rgbInfo.reset();   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;    private int GValue;    private 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;   }  } }

以上是“Java如何实现微信跳一跳辅助”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Java如何实现微信跳一跳辅助

本文链接: https://lsjlt.com/news/219851.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java如何实现微信跳一跳辅助
    这篇文章主要介绍Java如何实现微信跳一跳辅助,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境配置及相关说明:1)、Windows系统,本人win102)、AVA环境安装,JDK7以上即可3)、安卓手机一部、数据线...
    99+
    2023-05-30
  • Three.js如何实现一个微信跳一跳游戏
    这篇文章给大家分享的是有关Three.js如何实现一个微信跳一跳游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下: 由于是第一次尝试写游戏, 也不知道套路对不对, 大...
    99+
    2024-04-02
  • C++ OpenCV如何模拟实现微信跳一跳
    小编给大家分享一下C++ OpenCV如何模拟实现微信跳一跳,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!实机演示Gif:思路:获取小黑人的位置,获得目标方块的位置,计算两者的距离,从而计算粗按压屏幕的时间是多少...
    99+
    2023-06-22
  • C++OpenCV模拟实现微信跳一跳
    目录前提精要:实机演示Gif:思路:获取小黑人的位置:获取终点的位置:需要自定义的:完整项目:项目结构pch.hmain.cpp 前提精要: 本程序参考了大量的大佬佬的代码,在此基础...
    99+
    2024-04-02
  • Java微信跳一跳操作指南
    Java微信跳一跳操作指南,指哪挑哪。本文的思路是通过adb来控制手机进行操作,通过java写一个jframe覆盖在手机屏幕上,用鼠标获取跳的起点和终点,经过试验获取跳的jframe距离和按压时长的关系(线性关系),然后通过adb来根据计算...
    99+
    2023-05-30
  • 微信跳一跳小程序游戏如何开发
    本篇内容主要讲解“微信跳一跳小程序游戏如何开发”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信跳一跳小程序游戏如何开发”吧!  小游戏只有以下两个必要文件:  game.js 小游戏主程序入口...
    99+
    2023-06-26
  • 如何利用Three.js实现跳一跳小游戏
    目录前言游戏规则Three.js整个程序的结构实现html文件引入three.js引擎页面结构场景相机几何体光源渲染添加第二块跳块鼠标按下状态鼠标松开弹起状态落在哪里结尾前言 跳一跳...
    99+
    2024-04-02
  • java如何实现页面跳转
    页面标签前端js(推荐视频教程:java视频教程)window.location.href = "https://www.yht7.com/news/index.html"页面转发前端实际只发送一次请求,后端两次请求共用request和re...
    99+
    2016-02-02
    java教程 java 实现 页面 跳转
  • JAVA如何实现心跳检测
    本篇内容主要讲解“JAVA如何实现心跳检测”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA如何实现心跳检测”吧!1、心跳机制简介在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态...
    99+
    2023-07-05
  • 微信小程序实现视频号跳转
    三种类型: 1、跳转到视频号主页------必须是同主体 调用函数 wx.openChannelsUserProfile({ finderUserName: '' //视频号id}) 2、使用内嵌------必须是同主体 使用...
    99+
    2023-10-26
    微信小程序 小程序 Powered by 金山文档
  • H5跳转微信小程序,通过获取URL Scheme,实现短信跳转小程序,微信跳转小程序,邮件跳转小程序,外部链接跳转小程序
    H5链接跳转小程序有2种方式: 第一种:通过微信官方提供的标签wx-open-launch-weapp,打开小程序 第二种:通过获取URL Scheme实现链接跳转小程序 一、wx-open...
    99+
    2023-10-21
    微信小程序 小程序 微信
  • 微信小程序如何实现页面跳转功能详解
    目录前言实现效果事件如何实现事件welcome.wxmlwelcome.js小程序的导航APIwx.redirectTowx.navigateTowx.switchTapObject...
    99+
    2023-05-13
    微信小程序的页面跳转 小程序怎么跳转页面 微信小程序跳转到其他页面
  • 实现微信扫一扫跳转到小程序指定页面
    使用微信扫一扫进入小程序内的指定页面 文章目录 使用微信扫一扫进入小程序内的指定页面前言一、微信小程序平台配置二、前端uniapp中的获取二维码信息三.后端处理参数总结 前言 使用场景:例...
    99+
    2023-08-31
    小程序 微信 微信小程序
  • 微信小程序实现跳转详情页面
    本文实例为大家分享了微信小程序实现跳转详情页面的具体代码,供大家参考,具体内容如下 我们要实现如下的效果,进入详情页,获取产品的具体数据。本文请求的数据是本地的,实际开发是要通过aj...
    99+
    2024-04-02
  • java后端如何实现页面跳转
    页面跳转分类有两种:重定向和转发,即redirect和forward。一:重定向redirect第一种方式:controller中返回值为String相关免费学习视频分享:java在线学习public String login(HttpSe...
    99+
    2019-10-12
    java教程 java 后端 实现 页面跳转
  • 微信小程序zm 实现页面跳转传值
    这篇文章给大家分享的是有关微信小程序zm 实现页面跳转传值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。微信小程序实现页面跳转传值的方法比如从index。wxml跳转到aaa.w...
    99+
    2024-04-02
  • 微信小程序页面如何跳回主页
    微信小程序页面跳回主页的方法:微信小程序页面跳转是通过navigator来实现的,而navigator是通过它的属性open-type的合法值,因此在wxml页面中设置open-type的合法值来选择跳转方式。<navigator&n...
    99+
    2024-04-02
  • 如何从微信卡包跳转到小程序
    这篇文章给大家分享的是有关如何从微信卡包跳转到小程序的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。微信卡包跳转小程序先梳理小程序生命周期**小程序生命周期onLaunch 生命周期函数--监听小程序初始...
    99+
    2023-06-22
  • 微信小程序如何实现点击文字页面跳转功能
    这篇文章主要介绍了微信小程序如何实现点击文字页面跳转功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:1、效果展示2、关键代码in...
    99+
    2024-04-02
  • 微信小程序中如何实现页面跳转和数据传递
    这篇文章主要介绍了微信小程序中如何实现页面跳转和数据传递,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。微信小程序 页面跳转和数据传递1.先导...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作