source: java-automator/src/nl/rickvanderzwet/farmville/ScreenRecognition.java@ 108

Last change on this file since 108 was 108, checked in by Rick van der Zwet, 15 years ago
  • Allow clicking to be turned off and on
File size: 3.9 KB
RevLine 
[103]1/*
2 * Rick van der Zwet <info@rickvanderzwet.nl>
3 * License BSDLike http://rickvanderzwet.nl/LICENSE
4 */
5
6/* Based after http://ironbark.bendigo.latrobe.edu.au/~mary/DS/lectures/tutorials/ACSWorkshop98.html */
7package nl.rickvanderzwet.farmville;
8
9import java.awt.*;
10import java.awt.event.*;
11import java.awt.image.BufferedImage;
12import java.awt.image.RasterFormatException;
13
14
15public class ScreenRecognition extends Frame implements ActionListener {
[108]16 /**
17 *
18 */
19 private static final long serialVersionUID = -6742715532913330783L;
[103]20 static int mouseSurround = 120;
21 Image image;
22 static Color pixel;
23 static Point mouse;
24 static BufferedImage bi;
[104]25 static Robot bot;
26
27 static boolean freezeImage = false;
[108]28 static boolean mouseClickEnabled = true;
[104]29
30 private static void pressMouse() throws InterruptedException {
[108]31 if (mouseClickEnabled) {
32 bot.mousePress(InputEvent.BUTTON1_MASK);
33 bot.mouseRelease(InputEvent.BUTTON1_MASK);
34 }
[104]35
36 }
37
[103]38 public ScreenRecognition() {
[108]39 setTitle("Screen Recognition Example");
[103]40
41 Panel buttons = new Panel();
42 Button redButton = new Button("Red");
43 Button blueButton = new Button("Blue");
44 Button greenButton = new Button("Green");
45 redButton.setName("redButton");
[108]46 redButton.setLabel("Freeze Screen");
[103]47 redButton.addActionListener(this);
48 blueButton.setName("blueButton");
[108]49 blueButton.setLabel("Stop clicking");
[103]50 blueButton.addActionListener(this);
51 buttons.add(redButton);
52 buttons.add(blueButton);
53 buttons.add(greenButton);
54 add(buttons,"South");
55
56
57 setSize(400,300);
58 addWindowListener(new WindowAdapter() {
59 public void windowClosing(WindowEvent e){
60 System.exit(0);
61 }
62 });
63 setVisible(true);
64 }
65
66 public void actionPerformed(ActionEvent event) {
67 Component c = (Component)event.getSource();
[104]68 if (c.getName() == "redButton") {
69 c.getToolkit().beep();
70 try {
71 Thread.sleep(3000);
72 } catch (InterruptedException e) {
73 // TODO Auto-generated catch block
74 e.printStackTrace();
75 }
76 freezeImage = !freezeImage;
[108]77 } else if (c.getName() == "blueButton") {
78 mouseClickEnabled = !mouseClickEnabled;
79 if (mouseClickEnabled) {
80 ((Button) c).setLabel("Stop clicking");
81 } else {
82 ((Button) c).setLabel("Start clicking");
83 }
[104]84 }
[103]85 }
86
87 public void paint(Graphics g) {
88 g.drawString("Mouse:" + mouse.x + "," + mouse.y ,20,40);
89 g.drawString("PixelRGB:" + pixel.toString() ,150,40);
90
91 g.drawRect(18, 48, mouseSurround * 2 + 4, mouseSurround * 2 + 4);
[104]92 g.setColor(pixel);
93 g.fillRect(300,100,20,20);
[103]94 g.drawImage(bi,20, 50, this);
95 }
96
97 public static void main(String[] args) throws AWTException, InterruptedException {
98 //bot.mouseMove(100, 100);
[104]99 bot = new Robot();
[103]100 ScreenRecognition foo = new ScreenRecognition();
101
102 while (true) {
103 PointerInfo pointer = MouseInfo.getPointerInfo();
104 mouse = pointer.getLocation();
105 pixel = bot.getPixelColor(mouse.x, mouse.y);
106 try {
[104]107 if (!freezeImage) {
[103]108 bi=bot.createScreenCapture(new Rectangle(mouse.x + mouseSurround,
109 mouse.y + mouseSurround));
110 bi = bi.getSubimage(mouse.x - mouseSurround,
111 mouse.y - mouseSurround,
112 mouseSurround * 2, mouseSurround * 2);
[104]113
114 /* See is enabled */
115 Color target = new Color(255, 170, 0);
116 int pixelTreshold = 10;
117
118 search: for (int x = 0; x < bi.getWidth(); x++) {
119 for (int y = 0; y < bi.getHeight(); y++){
120 if (bi.getRGB(x, y) == target.getRGB()) {
121 pixelTreshold--;
122 if (pixelTreshold == 0) {
123 break search;
124 }
125 }
126 }
127 }
128 if (pixelTreshold == 0) {
129 pressMouse();
[108]130 System.out.println("Button Click at [" + mouse.x + "," + mouse.y + "]");
[104]131 }
132
133 }
[103]134 foo.repaint();
135 } catch (IllegalArgumentException e) {
136 continue;
137 } catch (RasterFormatException e) {
138 continue;
139 }
140 // Allow time to focus Firefox window
141 Thread.sleep(100);
142 }
143
144 }
145}
Note: See TracBrowser for help on using the repository browser.