zoukankan      html  css  js  c++  java
  • 冒险岛左右移动攻击,定时加血加蓝加BUFF JAVA实现

    最近练了一个品克缤,抗性很高,发现手动比较累,但是又不想买辅助。所以就写了一段代码来控制键盘完成自动攻击,加血加蓝。

    由于不能适应血条到一定程度加血,所以以下代码只适合品克缤这一角色,只适用于怪物在一个平台的,比如莎翁小镇2 比如 哈闷。

    大体思路就是,一个动作视为一个线程,往左移动和往右移动由于同时只做一件事,所以往左移动和往右移动写在一个线程里。

    以下代码只能前台控制,即冒险岛为主要窗口的时候有效。

    更加复杂的键盘鼠标操作可以使用,按键精灵,但是按键精灵只支持单线程,就是次序执行的,所以什么时候加血,什么时候加蓝,什么时候加BUFF会乱。

    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.KeyEvent;
    import java.util.Date;
    /**
     * 左右移动攻击,在指定时间内加血加蓝加buff
     * @author Administrator
     *
     */
    public class KeyRunnable{
        public static void main(String[] args){
              Robot myRobot;
              try {
              myRobot = new Robot();
              //加载左右移动线程
              KeyLeftAndRight lr = new KeyLeftAndRight(myRobot);
              Thread thread1 = new Thread(lr);
              //加载攻击线程
              KeyA a = new KeyA(myRobot);
              Thread thread2 = new Thread(a);
              //加载加血线程
              KeyRed red = new KeyRed(myRobot);
              Thread thread3 = new Thread(red);
              //加载加蓝线程
              KeyBlue blue = new KeyBlue(myRobot);
              Thread thread4 = new Thread(blue);
              //加载加buff线程
              KeyBuff buff = new KeyBuff(myRobot);
              Thread thread5 = new Thread(buff);
              
              //启动所有线程
              thread1.start();
              thread2.start();
              thread3.start();
              thread4.start();
              thread5.start();
              
              } catch (AWTException e) {
                    e.printStackTrace();
              } 
        }
    }
    /**
     * 向左移动7秒,向右移动7秒
     * @author Administrator
     *
     */
    class KeyLeftAndRight implements Runnable{
        private Robot r;
        public KeyLeftAndRight(Robot robot){
            this.r = robot;
        }
        @Override
        public void run() {
            while(true){
                try {
                    long begin = System.currentTimeMillis();
                    long end = System.currentTimeMillis();
                    while((end-begin)/1000<7){
                        pressLeft(r);
                        end = System.currentTimeMillis();
                        System.out.println("左边"+new Date());
                        Thread.sleep((int)(Math.random()*100+150));
                    }
                    while((end-begin)/1000<(7+7)){
                        pressRight(r);
                        end = System.currentTimeMillis();
                        System.out.println("右边"+new Date());
                        Thread.sleep((int)(Math.random()*100+150));
                    }    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        
        public static void pressLeft(Robot r){
            r.keyPress(KeyEvent.VK_LEFT);
            r.keyRelease(KeyEvent.VK_LEFT);    
        }
        public static void pressRight(Robot r){
            r.keyPress(KeyEvent.VK_RIGHT);
            r.keyRelease(KeyEvent.VK_RIGHT);    
        }
    }
    
    /**
     * 攻击按键 线程类 设置A为攻击键
     * @author Administrator
     *
     */
    class KeyA implements Runnable{
        private Robot r;
        public KeyA(Robot robot){
            this.r = robot;
        }
        @Override
        public void run() {
            while(true){
                r.keyPress(KeyEvent.VK_A);
                r.keyRelease(KeyEvent.VK_A);
                try {
                    Thread.sleep((int)(Math.random()*100+150));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    //加血线程类 N键  18秒加一次血 ,目前由于无法检测到血量 所以 不能做到精确加血
    class KeyRed implements Runnable{
        private Robot r;
        public KeyRed(Robot robot){
            this.r = robot;
        }
        @Override
        public void run() {
            while(true){
                try {
                    pressKey(r,KeyEvent.VK_N);
                    Thread.sleep(18*1000);
                    System.out.println("加了一下血"+new Date());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }        
        }
        public static void pressKey(Robot r,int key){
            r.keyPress(key);
            r.keyRelease(key);    
        }
    }
    //加蓝线程类 30秒加一次蓝
    class KeyBlue implements Runnable{
        private Robot r;
        public KeyBlue(Robot robot){
            this.r = robot;
        }
        @Override
        public void run() {
            while(true){
                try {
                    pressKey(r,KeyEvent.VK_J);
                    System.out.println("加了一下蓝"+new Date());
                    Thread.sleep(30*1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }        
        }
        public static void pressKey(Robot r,int key){
            r.keyPress(key);
            r.keyRelease(key);    
        }
    }
    
    //加Buff线程类 180秒加一次Buff 为了buff不中断 所以设置为10秒加一次 
    class KeyBuff implements Runnable{
        private Robot r;
        public KeyBuff(Robot robot){
            this.r = robot;
        }
        @Override
        public void run() {
            while(true){
                try {
                    System.out.println("加了一下Buff"+new Date());
                    Thread.sleep(10*1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }        
        }
        public static void pressKey(Robot r,int key){
            r.keyPress(key);
            r.keyRelease(key);    
        }
    }
  • 相关阅读:
    Flink--Table和DataStream和DataSet的集成
    flink-SQL
    Flink的容错
    Flink--基于mysql的sink和source
    Flink--sink到kafka
    Flink在流处理上常见的Source和sink操作
    【计算机网络】-传输层-传输服务的要素
    【计算机网络】-传输层-传输服务
    文件系统-文件的逻辑结构与存取方法
    文件系统-概念
  • 原文地址:https://www.cnblogs.com/CryOnMyShoulder/p/8026661.html
Copyright © 2011-2022 走看看