SuperTracker
Revision as of 22:28, 3 March 2009 by CrazyBassoonist (talk | contribs)
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 wiki.SuperSampleBot; 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); } } }