一、思路

通过Robot类,进行鼠标移动和鼠标点击。然后当截图为什么的情况下,就做出对应的事情。
主要有两个类,一个是写图片类,一个是主类
githun:https://github.com/E-10000/-OnmyojiPlus
注意:JIntellitype是另外的一个包,自己上GitHub导入

二、图片类

package main;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;public class writeImage {public static void main(String[] args) throws AWTException, IOException {Robot robot=new Robot();robot.delay(3000);saveImg(980,784,10,10,"御灵结束");}/*int x ,X轴int y ,Y轴int width,宽int height,高String pngName ,图片的名字(不用+PNG,默认补上PNG)String pathname,图片路径,没用则默认保存在E:\阴阳师\img下* */static void saveImg(int x,int y,int width,int height,String pngName,String pathname) throws AWTException, IOException {Robot robot=new Robot();robot.delay(3000);BufferedImage bufferedImage =robot.createScreenCapture(new Rectangle(x,y,width,height));robot.mouseMove(x,y);File file=new File(pathname+"\\"+pngName+".png");OutputStream os=new FileOutputStream(file);ImageIO.write(bufferedImage,"png",os);}static void saveImg(int x,int y,int width,int height,String pngName) throws AWTException, IOException {Robot robot=new Robot();robot.delay(3000);BufferedImage bufferedImage =robot.createScreenCapture(new Rectangle(x,y,width,height));robot.mouseMove(x,y);String pathname="D:\\idea\\OnmyojiPlus\\img";File file=new File(pathname+"\\"+pngName+".png");OutputStream os=new FileOutputStream(file);ImageIO.write(bufferedImage,"png",os);}
}

三、主类

package main;import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.JIntellitype;
import org.junit.Test;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;import static com.sun.java.accessibility.util.AWTEventMonitor.addKeyListener;public class gotoStart {public static final int FUNC_KEY_MARK = 1;public static final int EXIT_KEY_MARK = 0;public gotoStart() throws AWTException, InterruptedException {//添加全局监听器JIntellitype.getInstance().registerHotKey(FUNC_KEY_MARK,JIntellitype.MOD_ALT,(int)'Q');JIntellitype.getInstance().registerHotKey(EXIT_KEY_MARK,JIntellitype.MOD_ALT,(int)'D');JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() {@Overridepublic void onHotKey(int i) {switch (i){case FUNC_KEY_MARK:System.out.println("test");break;case EXIT_KEY_MARK:System.out.println("程序结束!!!!!");System.exit(0);break;}}});Robot robot=new Robot();robot.delay(3000);ArrayList<BufferedImage> images =new ArrayList<>();
//        images.add(getBfImageFromPath(new FileInputStream("src/img/御灵挑战")));images.add(getBfImageFromPath("E:\\阴阳师\\img\\卑弥呼结束.png"));images.add(getBfImageFromPath("E:\\阴阳师\\img\\协同取消.png"));images.add(getBfImageFromPath("E:\\阴阳师\\img\\卑弥呼挑战.png"));images.add(getBfImageFromPath("E:\\阴阳师\\img\\御灵挑战.png"));images.add(getBfImageFromPath("E:\\阴阳师\\img\\御灵结束.png"));BufferedImage tempImg=null;int i=-1;while (true){//这个是根据情况返回对应的时间i=-1;i = chooseThingReturnNum(images);System.out.println(i);switch (i){//卑弥呼打完case 1:{next();break;}//协同任务点击取消case 2:mouseRandomMoveTrueArea(1275,783,21,22);mouseSwitchClick("left");break;//点击卑弥呼挑战case 3:mouseRandomMoveTrueArea(1645,878,180,158);mouseSwitchClick("left");break;//挑战御灵case 4:mouseRandomMoveTrueArea(1620,875,180,170);mouseSwitchClick("left");break;//御灵结束case 5:{next();robot.delay(randomNum());break;}//其他情况,就什么都没有,鼠标随机移动,有长时间移动和短时间移动case -1:int choose= (int) (Math.random()*2);if (choose==1){int a=randomNum(1,0.5);System.out.println(a);robot.delay(a);}else{int b=randomNum(3,2);System.out.println(b);robot.delay(b);}randomMove();break;}//switch(i)}//while(true)}//@String 图片的绝对路径。从本地文件读取目标图片static public BufferedImage getBfImageFromPath(String keyImagePath) {BufferedImage bfImage = null;try {bfImage = ImageIO.read(new File(keyImagePath));} catch (IOException e) {e.printStackTrace();}return bfImage;}/*最核心的部分,代码块从这里修改*/public static int chooseThingReturnNum(ArrayList<BufferedImage> images) throws AWTException {Robot robot=new Robot();for (BufferedImage image:images){//匹配是否为卑弥呼结束if (matchImg(image,robot.createScreenCapture(new Rectangle(900,800,100,100)))){System.out.println("匹配到了卑弥呼结束");return 1;}//有人要来协同任务的时候else if (matchImg(image,robot.createScreenCapture(new Rectangle(1275,783,21,22)))){System.out.println("匹配到了协同取消");return 2;}//是否在卑弥呼点挑战之前else if(matchImg(image,robot.createScreenCapture(new Rectangle(1690,920,90,74)))){System.out.println("匹配到了要挑战卑弥呼");return 3;}//御灵挑战else if(matchImg(image,robot.createScreenCapture(new Rectangle(1670,907,98,86)))){System.out.println("匹配到了要挑战御灵");return 4;}//御灵结束else if(matchImg(image,robot.createScreenCapture(new Rectangle(980,784,10,10)))){System.out.println("匹配到了要御灵结束");return 5;}}System.out.println("什么都没匹配到,随机移动");return -1;}/*随机移动到我自己设定的4个区域中的某一点,并且点击*/public static void next() throws AWTException, InterruptedException {//随机移动到一个区域中int random= (int) (Math.random()*4);switch (random){//移动到左上角区域case 1:mouseRandomMoveTrueArea(0,0,1270,200);mouseRandomMoveTrueArea(0, 0, 1270, 200);mouseSwitchClick("left");break;//移动到左下角区域case 2:mouseRandomMoveTrueArea(0, 200, 200, 880);mouseSwitchClick("left");break;//右上角区域case 3:mouseRandomMoveTrueArea(1580, 70, 340, 630);mouseSwitchClick("left");break;//右下角区域case 4:mouseRandomMoveTrueArea(670, 700, 1250, 380);mouseSwitchClick("left");break;}//随机移动到某个区域结束}/*匹配图片,* 输入参数:sourceImg 本地源文件,最大不超过100*100*         tempImg 当前系统捕抓到的部分屏幕,固定为100*100* 输出参数:true或者false* 检查捕捉图片的每一个像素点是否和本地的源文件一样,全部一样就返回TRUE,有一个不一样都返回FALSE*/public static boolean matchImg(BufferedImage sourceImg,BufferedImage tempImg) {int height = sourceImg.getHeight();int width = sourceImg.getWidth();for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {int tempRGB = tempImg.getRGB(j, i);int testRGB = sourceImg.getRGB(j, i);if (tempRGB!=testRGB) {return false;}}}return true;}//matchImg/*X,Y最大为1920和1080,隔一段时间后随机移动到某个位置,再隔一段时间*/@Testpublic static void randomMove() throws AWTException {Robot robot=new Robot();int maxX=1920;int maxY=1080;double v=(0.2+Math.random()*0.3)*1000;robot.delay((int) v);int x = (int) (Math.random()*(maxX-1));int y = (int) (Math.random()*(maxY-1));robot.mouseMove(x,y);v=(0.2+Math.random()*0.3)*1000;robot.delay((int) v);}/*鼠标随机移动到正确的区域@参数分别为X轴,Y轴,宽,高返回参数:int [] array:array[0]为X轴,array[1]为Y轴*/public static void mouseRandomMoveTrueArea(int x,int y,int width,int height) throws AWTException {int moveX= (int) (x+Math.random()*(width-1));int moveY= (int) (y+Math.random()*(height-1));Robot robot=new Robot();robot.delay(randomNum());robot.mouseMove(moveX,moveY);}/*@String key: left为按下左键,right为按下右键*/public static void mouseSwitchClick(String key) throws AWTException, InterruptedException {switch (key){case "left":mouseClick(InputEvent.BUTTON1_DOWN_MASK);break;case "right":mouseClick(InputEvent.BUTTON3_DOWN_MASK);break;default:System.out.println("请填入正确的参数");}}/*@int buttons:与mouseSwitchClick函数配合使用*/public static void mouseClick(int buttons) throws AWTException, InterruptedException {Robot robot=new Robot();robot.delay(randomNum());robot.mousePress(buttons);robot.delay(randomNum());robot.mouseRelease(buttons);robot.delay(randomNum());Thread.sleep(randomNum(0.5,0.2));}/*@double preTime:最小要几秒@double maxTime:随机的数字最大值@不写参数就默认(0.3+(0~0.3))*/public static int randomNum(double preTime, double maxTime){int i = (int) ((preTime + Math.random() * maxTime) * 1000);
//        System.out.println(i);return i;}public static int randomNum(){int i = (int) ((0.3 + Math.random() * 0.3) * 1000);
//        System.out.println(i);return i;}public static void main(String[] args) throws AWTException, InterruptedException {new gotoStart();}//main
}

java 阴阳师个人脚本相关推荐

  1. java无阻塞执行脚本,JAVA调用Shell脚本-及阻塞的解决方法

    JAVA调用Shell脚本--及阻塞的解决办法 用java调用shell,使用 Process p=Runtime.getRuntime().exec(String[] cmd); Runtime.e ...

  2. Java调用python脚本

    Java调用python脚本 最近也是刚开始学python,所以这里写了一个简单的小方法用Java来调用python脚本.后期再进行更新. 1.Java启动程序的方法 在Java中提供了两种方法来启动 ...

  3. 【错误记录】Windows 系统 bat 脚本报错 ( Java 生成 bat 脚本乱码处理 | 输出 GB2312 字符串 | Windows 中的换行时 \r\n )

    文章目录 一.报错信息 二.问题分析 二.解决方案 一.报错信息 使用 Java 语言生成了 Windows 系统中的 bat 批处理脚本 , 运行后出现中文乱码 ; 使用如下 Java 代码生成 b ...

  4. java 调用python脚本过程_通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

  5. JAVA的嵌入式脚本开发(中)

    本文将分以下几个小节来学习: Java的JavaScript脚本引擎 脚本开发中涉及到的类和接口简介 开发步骤 脚本与java数据传递 脚本执行上下文 作用域 方法的调用 编译脚本 脚本与java数据 ...

  6. 脚本运行显示服务器超时,java执行shell脚本超时

    java执行shell脚本超时 [2021-02-11 04:20:34]  简介: 系统运维 在数据库运维的过程中,Shell 脚本在很大程度上为运维提供了极大的便利性.而shell 脚本参数作为变 ...

  7. java 过滤xss脚本_Java Web应用程序的反跨站点脚本(XSS)过滤器

    java 过滤xss脚本 这是为Java Web应用程序编写的一个好简单的反跨站点脚本(XSS)过滤器. 它的基本作用是从请求参数中删除所有可疑字符串,然后将其返回给应用程序. 这是我以前关于该主题的 ...

  8. java 调用linux 脚本并获取返回值

    大家好,我是烤鸭: 今天分享下java 调用 shell脚本 并获取返回值. 代码实践 String cmd = "df -h"; StringBuffer sb = new St ...

  9. java 调用groovy脚本,实现多个sql按指定逻辑运行,可做报表预聚合

    java 调用groovy脚本,实现多个sql按指定逻辑运行,可做报表预聚合 1.引入pom <dependency><groupId>org.codehaus.groovy& ...

最新文章

  1. 区块链论文:Byzcoin,通过集体签名让比特币具有强一致性且强化安全
  2. 破玩意 | 多线程 +1 的最快操作
  3. 帮Facebook把用户做到7亿的那个人,告诉你如何实现用户增长
  4. 饮冰三年-人工智能-Python-29瀑布流
  5. Git命令集之八——提交命令
  6. Python基础——PyCharm版本——第九章、MySQL操作(核心4)
  7. 网络 TCP三次握手及滑动窗口
  8. 入口文件到控制器 php,tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析...
  9. python求100被3he7整除_PYTHON练习题测验
  10. Win11、Linux 双系统安装方法
  11. 最优秀的开源库之GPUImage
  12. python 倒数两列_相机标定之张正友标定法数学原理详解(含python源码)
  13. 历史回顾——中国各省省名之由来
  14. 作为个人建站需要哪些能力
  15. xdl Java_JAVA和C++区别
  16. 大会倒计时|2020 PostgreSQL亚洲大会-中文分论坛议程安排
  17. 计算机采用二进制的好处包括什么,计算机采用二进制数的好处有哪些?
  18. 求一个任意实数c的算术平方根_LeetCode 题解 | 69. X 的平方根
  19. 袋鼠云批流一体分布式同步引擎ChunJun(原FlinkX)的前世今生
  20. Js与jQuery的相互转换

热门文章

  1. easyExcel工具
  2. EWS Java API 的基本使用
  3. A002-185-2521-李子泓
  4. Possible missing firmware /lib/firmware/rtl_nic/rtl8168fp-3.fw for module r8169
  5. c语言累加和校验_循环冗余校验(CRC)算法入门
  6. 令牌桶算法的python实现,人人都可以玩算法
  7. iOS-发布按钮动画(类似于闲鱼发布),弹出动画github开源
  8. 电脑无法连接WiFi,一直显示无法连接此网络
  9. 引用变量和对象--作为初学者的混淆
  10. 华硕飞行堡垒56789原厂Windows10系统