Quote:
Originally Posted by Andrew Schreiber
Actually yes, I'm curious how you tell where the coins are.
(Hey, it is a really cool application and I'm curious!)
|
It took me about ~30 minutes to write this (I wrote something similar for a different thing oh so long ago).
I apologize for using magic numbers for pixel locations. Also,
do not run this if you're not willing to give up the use of your computer for a minute.
Code:
/*
Copyright (C) 2011 Evan Foote
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Robot;
public void robotRunner()
{
try
{
Robot myRobot = new Robot();
myRobot.delay(4000);
//get the current system time for reference on how long to run
long time = System.currentTimeMillis();
int loops = 0;
int x = 560; //coordinate of the screen in pixels where the coins appear
int y = 560;
int dx = 0; //or offset, where we're sampling
int dy = 0;
int xmax = 240; //size of the rectangle we're sampling
int ymax = 150;
int xsamp = 40; //AKA the step size between samples
int ysamp = 20;
Color c; //the sampled color
int cnt = 0; //The number of coins we've found
//run main loop for about 1 minute
while (System.currentTimeMillis() - time < 1*60*1000)
{
//iterate through each coordiante in the sample space
for (dx = 0; dx < xmax; dx += xsamp)
{
for (dy = 0; dy < ymax; dy += ysamp)
{
//snag the color where we're sampling
c = myRobot.getPixelColor(x + dx, y + dy);
//check and see if the color is something other than white (like yellow)
if (notWhite(c))
{
//move the mouse to that location
myRobot.mouseMove(x + dx, y + dy);
//increment the count so we know when to stop
cnt++;
//subtract this sample so we can check again
dy -= ysamp;
//left click the mouse, wait, drag it to the piggy bank, wait,
//release it, wait.
myRobot.mousePress(16);
myRobot.delay(50);
myRobot.mouseMove(448, 537);
myRobot.delay(50);
myRobot.mouseRelease(16);
myRobot.delay(50);
//TODO: CAN BETTER THIS CODE by:
//checking that the coin traveled with the mouse. If it didn't,
//subtract 1 from the cnt and try again.
//alright, grabbed 5 coins. click on the refresh button
if(cnt == 5)
{
myRobot.mouseMove(1109, 87);
myRobot.delay(50);
myRobot.mousePress(16);
myRobot.delay(50);
myRobot.mouseRelease(16);
//wait a second for the page to refresh. Slower internet speeds
//should wait longer.
myRobot.delay(1000);
break;
}//if count is at 5
}//if sample is not white
}//for each y pixel
//Putting this in the outer for loop so we can break from it
//as well.
if (cnt == 5)
{
//reset the count and the iteration
cnt = 0;
break;
}
}//for each x row
//if dy >= ymax, it means that we've traveled all the way and didn't
//spot 5 coins. something went bad, refresh the page.
if (dy >= ymax)
{
myRobot.mouseMove(1109, 87);
myRobot.delay(50);
myRobot.mousePress(16);
myRobot.delay(50);
myRobot.mouseRelease(16);
myRobot.delay(1000);
cnt = 0;
}
loops++;
}//while loop
System.out.println("Number of loops run: " + loops);
}//try
catch(Exception e)
{
//not sure what would cause above code to be more than exceptional, but
//if it is, I don't care and we can stop running here.
}
}
private boolean notWhite (Color c)
{
return (c.getRed() + c.getBlue() + c.getGreen() < 255*3);
}
__________________
Be Healthy. Never Stop Learning. Say It Like It Is. Own It.

Like our values? Flexware Innovation is looking for Automation Engineers. Check us out!