[Home]WaveSurfingChallenge/BotC

Robo Home | WaveSurfingChallenge | Changes | Preferences | AllPages

No diff available--this is the first major revision. (minor diff)
Sits still and fires full power bullets using CircularTargeting. Source code is included. Written by David Alves and adapted for circular targeting by GrubbmGait.

/*
 * Created on Sep 17, 2004
 * Adapted on Jan 16, 2006
 *
 */
package wiki.challenge;

import java.awt.geom.Point2D;

import robocode.AdvancedRobot;
import robocode.ScannedRobotEvent;
import robocode.util.Utils;

/**
 * @author David Alves
 * adapted for circular targeting by GrubbmGait
 *
 * For more information about the Wave Surfing Challenge, visit
 * <a href="http://robowiki.net/perl/robowiki?WaveSurfingChallenge">http://robowiki.net/perl/robowiki?WaveSurfingChallenge</a>
 * 
 * This robot sits still and fires at its opponent using circular targeting.
 * 
 */
public class WaveSurfingChallengeBotC extends AdvancedRobot{

	double oldEnemyHeading;
			
	public void run(){
		setAdjustRadarForGunTurn(true);
		do{
			turnRadarRightRadians(Double.POSITIVE_INFINITY);
		} while(true);
	}
	
	public void onScannedRobot(ScannedRobotEvent e){
		double bulletPower = Math.min(3.0,getEnergy());
		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 = e.getHeadingRadians();
		double enemyHeadingChange = enemyHeading - oldEnemyHeading;
		double enemyVelocity = e.getVelocity();
		oldEnemyHeading = enemyHeading;
		
		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;
			enemyHeading += enemyHeadingChange;
			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);
				break;
			}
		}
		double theta = Utils.normalAbsoluteAngle(Math.atan2(predictedX - getX(), predictedY - getY()));
		
		setTurnRadarRightRadians(Utils.normalRelativeAngle(absoluteBearing - getRadarHeadingRadians()));
		setTurnGunRightRadians(Utils.normalRelativeAngle(theta - getGunHeadingRadians()));
		fire(3);
	}
}


Robo Home | WaveSurfingChallenge | Changes | Preferences | AllPages
Edit text of this page | View other revisions
Last edited January 17, 2006 11:26 EST by GrubbmGait (diff)
Search: