Simon说分析仪/ Beat Simon说

时间:2016-12-05 12:32:56

标签: java image mouse screenshot robot

我想在java中编写一个程序,可以“击败”Simon说(在某些网站上我的浏览器(!)中运行)。

所以我的java应用程序必须:

  1. 在后台工作
  2. 每隔几秒钟截屏我的屏幕并识别颜色 点亮,保存该信息(例如在ArrayList中)
  3. 按正确的顺序按字段
  4. 做那个“无限”时间
  5. 我不知道如何在后台运行我的应用程序(1.),我可以做一些简单的计数。但我希望它实际上做的事情就像用鼠标移动到正确位置然后点击它(在后台运行时)。

    我会通过使用Robot java类[createScreenCapture()获取BufferedImage然后分析它来实现第二个任务] 如果您有更好的想法,请告诉我。

    第3个任务也可以通过使用mouseMove(int x,int y)和mousePress(int按钮)在Robot类中实现。

    所以我希望你能帮助我解决这个背景问题,并原谅我糟糕的英语技能。

    到目前为止我的代码:

    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.InputEvent;
    import java.awt.image.*;
    import java.awt.Rectangle;
    import java.util.ArrayList;
    
    public class BeatSimon {
    
    	private ArrayList<Integer> order;
    	private Robot robot;
    	private int round;
    
    	public BeatSimon() throws AWTException, InterruptedException {
    		order = new ArrayList<Integer>();
    		robot = new Robot();
    		round = 1;
    		start();
    	}
    
    	public void start() throws InterruptedException {
    		BufferedImage aktImage;
    		order = new ArrayList<Integer>();
    		aktImage = robot.createScreenCapture(new Rectangle(0, 0, 1920, 1080));
    		// get the order
    		for (int i = 0; i < this.round; i++) {
    			if (aktImage.getRGB(0, 0) == 0) // I don't have the specific coordinates or color yet
    				order.add(0);
    			else if (aktImage.getRGB(1, 1) == 1)
    				order.add(1);
    			else if (aktImage.getRGB(2, 2) == 2)
    				order.add(2);
    			Thread.sleep(1000);
    		}
    		
    		//press the fields in the right order
    		for (int i = 0; i < this.round; i++) {
    			if (order.get(i) == 0) {
    				robot.mouseMove(0, 0);
    				robot.mousePress(InputEvent.BUTTON1_MASK);
    				robot.mouseRelease(InputEvent.BUTTON1_MASK);
    			} else if (order.get(i) == 1) {
    				robot.mouseMove(1, 1);
    				robot.mousePress(InputEvent.BUTTON1_MASK);
    				robot.mouseRelease(InputEvent.BUTTON1_MASK);
    			} else if (order.get(i) == 2) {
    				robot.mouseMove(2, 2);
    				robot.mousePress(InputEvent.BUTTON1_MASK);
    				robot.mouseRelease(InputEvent.BUTTON1_MASK);
    			}
    			Thread.sleep(1000);
    		}
    		this.round += 1;
    		start();
    	}
    }

0 个答案:

没有答案