Oh. If the ball happens to get in the way, kick it.
package Riddler.Flash;
import sockey.SoccerClient;
import java.awt.*;
public class Wanderer extends SoccerClient
{
Point goal= new Point(0,0);
Point ball= new Point(0,0);
int count= 0;
public static final int b=3;
public void step() {
int spin=0;
// If we're the center, then always go after the ball.
if (getPosition()== ID_PCTR) {
ping(ID_BALL, goal, true);
accelerate(goal.y, 100);
spin= goal.y;
} else {
// If we're not the center, then pick a random point and go there.
// If we can't get there in a decent amount of time, then go chase
// the ball for a while.
if (count++ > 2000) {
// We've been chasing the ball for a while. Go back to
// a random target.
goal.x= (int)((Math.random()-0.5)*size.width);
goal.y= (int)((Math.random()-0.5)*size.height);
debugMsg("Wandering...");
count= 0; // reset the counter
spin= wannabe(ID_CENTER, goal.x, goal.y);
} else if (count > 1000) {
// We didn't get to the point we wanted. Go chase the ball
// for a while.
spin= wannabe(ID_BALL, 0, 0);
} else {
// Go for the selected random point (goal). Wannabe returns
// the angle we're accelerating, or 90 if we've reached our
// destination.
spin= wannabe(ID_CENTER, goal.x, goal.y);
}
if (count==100) {
debugMsg("Wandering...");
} else if (count==1001) {
debugMsg("Stymied: going for the ball");
}
getVel(pt);
// If wannabe says we're there (spin==90) and we aren't moving
// very fast (pt==(0,0)), then we must have arrived at our point.
// Pick a new point and reset the counter.
if (spin==90 && pt.x==0 && pt.y==0) {
debugMsg("Got there!");
goal.x= (int)((Math.random()-0.5)*size.width);
goal.y= (int)((Math.random()-0.5)*size.height);
count= 0;
}
}
// If the ball is nearby, then face the ball.
ping(ID_BALL, ball, true);
if (ball.x<60) {spin= ball.y;}
// If the ball is kickable, then kick it with whichever side is
// CLOSEST to the ball. (subtract the angle we're facing from the
// global angle to the ball, and spin into it)
if (kickable()) {
int where= anglesub(ball.y, getAng());
setAngGoal(ball.y + ((where>0)?-90:90));
} else {
setAngGoal(spin);
}
}
}