Difference between revisions of "SuperTracker"
Jump to navigation
Jump to search
Line 13: | Line 13: | ||
<syntaxhighlight> | <syntaxhighlight> | ||
package supersample; | package supersample; | ||
+ | |||
+ | import robocode.*; | ||
+ | import java.awt.*; | ||
/** | /** | ||
Line 39: | Line 42: | ||
*/ | */ | ||
public void onScannedRobot(ScannedRobotEvent e) { | public void onScannedRobot(ScannedRobotEvent e) { | ||
− | setMaxVelocity((12*Math.random())+12);//randomly change speed | + | double absBearing=e.getBearingRadians()+getHeadingRadians();//enemies absolute bearing |
+ | double latVel=e.getVelocity() * Math.sin(e.getHeadingRadians() -absBearing);//enemies later velocity | ||
+ | double gunTurnAmt;//amount to turn our gun | ||
+ | setTurnRadarLeftRadians(getRadarTurnRemainingRadians());//lock on the radar | ||
+ | if(Math.random()>.9){ | ||
+ | setMaxVelocity((12*Math.random())+12);//randomly change speed | ||
} | } | ||
if (e.getDistance() > 150) {//if distance is greater than 150 | if (e.getDistance() > 150) {//if distance is greater than 150 | ||
− | + | gunTurnAmt = robocode.util.Utils.normalRelativeAngle(absBearing- getGunHeadingRadians()+latVel/22);//amount to turn our gun, lead just a little bit | |
+ | setTurnGunRightRadians(gunTurnAmt); //turn our gun | ||
+ | setTurnRightRadians(robocode.util.Utils.normalRelativeAngle(absBearing-getHeadingRadians()+latVel/getVelocity()));//drive towards the enemies predicted future location | ||
+ | setAhead((e.getDistance() - 140)*moveDirection);//move forward | ||
+ | setFire(3);//fire | ||
} | } | ||
− | + | else{//if we are close enough... | |
+ | gunTurnAmt = robocode.util.Utils.normalRelativeAngle(absBearing- getGunHeadingRadians()+latVel/15);//amount to turn our gun, lead just a little bit | ||
+ | setTurnGunRightRadians(gunTurnAmt);//turn our gun | ||
+ | setTurnLeft(-90-e.getBearing()); //turn perpendicular to the enemy | ||
+ | setAhead((e.getDistance() - 140)*moveDirection);//move forward | ||
+ | setFire(3);//fire | ||
+ | } | ||
} | } | ||
public void onHitWall(HitWallEvent e){ | public void onHitWall(HitWallEvent e){ |
Revision as of 17:01, 2 November 2014
SuperTracker is a part of the Super Sample Bots set by CrazyBassoonist. It is intended to provide new robocoders with a new challenge after beating all of the sample robots.
Movement
SuperTracker moves close to an enemy, then circles them perpendicularly.
Targeting
SuperTracker uses a reduced linear gun for targeting.
Code
package supersample;
import robocode.*;
import java.awt.*;
/**
* SuperTracker - a Super Sample Robot by CrazyBassoonist based on the robot Tracker by Mathew Nelson and maintained by Flemming N. Larsen
* <p/>
* Locks onto a robot, moves close, fires when close.
*/
public class SuperTracker extends AdvancedRobot {
int moveDirection=1;//which way to move
/**
* run: Tracker's main run function
*/
public void run() {
setAdjustRadarForRobotTurn(true);//keep the radar still while we turn
setBodyColor(new Color(128, 128, 50));
setGunColor(new Color(50, 50, 20));
setRadarColor(new Color(200, 200, 70));
setScanColor(Color.white);
setBulletColor(Color.blue);
setAdjustGunForRobotTurn(true); // Keep the gun still when we turn
turnRadarRightRadians(Double.POSITIVE_INFINITY);//keep turning radar right
}
/**
* onScannedRobot: Here's the good stuff
*/
public void onScannedRobot(ScannedRobotEvent e) {
double absBearing=e.getBearingRadians()+getHeadingRadians();//enemies absolute bearing
double latVel=e.getVelocity() * Math.sin(e.getHeadingRadians() -absBearing);//enemies later velocity
double gunTurnAmt;//amount to turn our gun
setTurnRadarLeftRadians(getRadarTurnRemainingRadians());//lock on the radar
if(Math.random()>.9){
setMaxVelocity((12*Math.random())+12);//randomly change speed
}
if (e.getDistance() > 150) {//if distance is greater than 150
gunTurnAmt = robocode.util.Utils.normalRelativeAngle(absBearing- getGunHeadingRadians()+latVel/22);//amount to turn our gun, lead just a little bit
setTurnGunRightRadians(gunTurnAmt); //turn our gun
setTurnRightRadians(robocode.util.Utils.normalRelativeAngle(absBearing-getHeadingRadians()+latVel/getVelocity()));//drive towards the enemies predicted future location
setAhead((e.getDistance() - 140)*moveDirection);//move forward
setFire(3);//fire
}
else{//if we are close enough...
gunTurnAmt = robocode.util.Utils.normalRelativeAngle(absBearing- getGunHeadingRadians()+latVel/15);//amount to turn our gun, lead just a little bit
setTurnGunRightRadians(gunTurnAmt);//turn our gun
setTurnLeft(-90-e.getBearing()); //turn perpendicular to the enemy
setAhead((e.getDistance() - 140)*moveDirection);//move forward
setFire(3);//fire
}
}
public void onHitWall(HitWallEvent e){
moveDirection=-moveDirection;//reverse direction upon hitting a wall
}
/**
* onWin: Do a victory dance
*/
public void onWin(WinEvent e) {
for (int i = 0; i < 50; i++) {
turnRight(30);
turnLeft(30);
}
}
}