[Home]UbaNano

Robo Home | Changes | Preferences | AllPages

Could someone have a look at this code? I am so confused... I think this should have UbaNano (which isn't Nanosized yet, by the way) shoot at bullets that are fired with HOT and make them collide! But it doesn't work. What is wrong?

package bayen;
import robocode.*;
import java.awt.geom.Point2D;
import robocode.util.Utils;

/**
 * UbaNano - a robot by Bayen
 */
public class UbaNano extends AdvancedRobot
{
	static double thenEnergy;
	static double nowEnergy;
	static double FORWARD = 1;
	/**
	 * CrazyTracker2's run method
	 */
	public void run() {
		thenEnergy=100;
		nowEnergy=100;
		setAdjustGunForRobotTurn(true);//allow gun and radar
		setAdjustRadarForGunTurn(true);//free movement
		while (true)
		{
			turnRadarRight(360);//scan for enemies
		}
	}
	/**
	 * onScannedRobot:  We have a target.  Go get it.
	 */
	public void onScannedRobot(ScannedRobotEvent e) {
		thenEnergy = nowEnergy;
		nowEnergy = e.getEnergy();
		setTurnRight(e.getBearing() + 90);
if(thenEnergy>nowEnergy){
	FORWARD = -FORWARD;
setAhead(10*FORWARD);
}
//here I get my enemy's statistics so that I can use
//linear targeting
		double bulletPower = 0.1;
		double myX = getX();
		double myY = getY();
		double absoluteBearing =
		 getHeadingRadians() + e.getBearingRadians();
		double enemyX = getX() 
		+ e.getDistance() * Math.sin(absoluteBearing);
		double enemyY = getY() 
		+ e.getDistance() * Math.cos(absoluteBearing);
		double enemyHeading = getRadarHeadingRadians() + 3.141592653589793;
		double enemyVelocity = 20 - 3*(thenEnergy-nowEnergy);
//now I do my calculations for linear targeting so that
//I know where my enemy will be once my bullet gets there
		double deltaTime = 0;
double battleFieldHeight=
getBattleFieldHeight(),battleFieldWidth=
getBattleFieldWidth();
		double predictedX = enemyX, predictedY = enemyY;
while((++deltaTime)*(20.0
- 3.0*bulletPower)
<Point2D.Double.distance(myX, myY, predictedX, predictedY)){
		predictedX += Math.sin(enemyHeading) 
		* enemyVelocity;	
		predictedY += Math.cos(enemyHeading) 
		* enemyVelocity;
			if(	predictedX < 18.0 
				|| predictedY < 18.0
				|| predictedX > battleFieldWidth - 18.0
				|| predictedY > battleFieldHeight - 18.0){
predictedX = 
Math.min(Math.max(18.0, predictedX), battleFieldWidth 
- 18.0);	
predictedY = 
Math.min(Math.max(18.0, predictedY), battleFieldHeight
- 18.0);
bulletPower=0;
				break;}}
double theta =
Utils.normalAbsoluteAngle(Math.atan2(predictedX
- getX(), predictedY - getY()));
//now I can turn my gun...
setTurnRadarRightRadians
(Utils.normalRelativeAngle(absoluteBearing 
- getRadarHeadingRadians()));
setTurnGunRightRadians(Utils.normalRelativeAngle(theta
- getGunHeadingRadians()));
//...and fire!
if(nowEnergy < thenEnergy)
		fire(bulletPower);
	}
	public void onBulletHitBullet(BulletHitBulletEvent e){
		out.println("WORKED");
	}
}


Have you read BulletShielding? -- Tango


Robo Home | Changes | Preferences | AllPages
Edit text of this page | View other revisions
Last edited December 30, 2005 14:12 EST by Tango (diff)
Search: