Java 微信跳一跳指哪跳哪操作指南

本文的思路是通过adb来控制手机进行操作,通过java写一个jframe覆盖在手机屏幕上,用鼠标获取跳的起点和终点,经过试验获取跳的jframe距离和按压时长的关系(线性关系),然后通过adb来根据计算出的结果操作按下时长,(此处还需要一个第三方工具来实时把画面传送给电脑,将jframe覆盖在电脑上的画面上)。
代码很短,如下:

package jump;

import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;

@SuppressWarnings("serial")
public class JumpJump extends JFrame{
    private JLabel label;
    boolean flag=false;
    int x0,y0,x1,y1;

    public JumpJump(){
        super("微信跳一跳");//新建窗口
        this.setUndecorated(true);  
        this.setOpacity(0.7f);
        this.setSize(320,580);//宽高自设
        this.setVisible(true);//可见
//        this.dispose();
        this.setLocationRelativeTo(null);
        this.toFront();
        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel label = new JLabel("右键点击");
        this.add(label); 

        this.addMouseListener(new MouseAdapter(){  
            public void mouseClicked(MouseEvent e){  
                if(e.getButton() == MouseEvent.BUTTON3){ //3代表右键
                    if(!flag) {
                     x0 = e.getX();  
                     y0 = e.getY();  
                        String banner = "鼠标当前点击位置的坐标是" + x0 + "," + y0;
                        label.setText(banner);  
                        flag=true;
                    }
                    else {
                        x1=e.getX();
                        y1=e.getY();
                        double _x = Math.abs(x0 - x1);
                        double _y = Math.abs(y0 - y1);
                        double dis=Math.sqrt(_x*_x+_y*_y);
                        label.setText(Math.ceil(dis)*4.8+"");
                        flag=false; 

                        String cmd = "adb shell input touchscreen swipe 170 187 170 187 "+Math.round(dis*4.6);

                        Runtime run = Runtime.getRuntime();
                        try {
                            Process pr = run.exec(cmd);
                            System.out.println(cmd);
                            pr.waitFor();

                        } catch (Exception e1) {
                            e1.printStackTrace();
                            System.out.println(e1);
                        }

                    }

                }
            }
        });
    }
    public static void main(String[] args) {
        new JumpJump();
    }

}

下面这段代码是设置透明度的:

this.setUndecorated(true);  
        this.setOpacity(0.7f);

x0 y0是鼠标第一次点击的点的坐标,x1 y1是第二次坐标, 通过flag判断是 第一次还是第二次点击。

这一段是代码控制cmd操作,就不用自己在cmd里每次输入了:

String cmd = "adb shell input touchscreen swipe 170 187 170 187 "+Math.round(dis*4.6);

                        Runtime run = Runtime.getRuntime();
                        try {
                            Process pr = run.exec(cmd);
                            System.out.println(cmd);
                            pr.waitFor();

                        } catch (Exception e1) {
                            e1.printStackTrace();
                            System.out.println(e1);
                        }

这里的系数需要自己通过不断测试来调整,即最后那个系数4.6 可自行调整:

String cmd = "adb shell input touchscreen swipe 170 187 170 187 "+Math.round(dis*4.6);

操作方法很简单,鼠标右键点击一次当前棋子所在位置,然后鼠标右键再点一次落点位置。
github JavaWechatHelper最简单的一种实现了
代码量很少,练习用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值