Difference between revisions of "Random Targeting"

From Robowiki
Jump to navigation Jump to search
m (adding category)
m (added 2 comments to code example)
Line 4: Line 4:
  
 
<pre>
 
<pre>
 +
// Add import robocode.util.* for Utils
 +
// This code goes in your onScannedRobot() event handler.
 +
 
public void onScannedRobot(ScannedRobotEvent e) {
 
public void onScannedRobot(ScannedRobotEvent e) {
 
     double randomGuessFactor = (Math.random() - .5) * 2;
 
     double randomGuessFactor = (Math.random() - .5) * 2;

Revision as of 02:50, 12 November 2007

A method of Targeting that simply chooses a random angle among the angles that could possibly hit the opponent. Some successful NanoBots use this firing method. Its implementation is very small and for unpredictable movements, it will give a consistent hit percentage.

Example

// Add import robocode.util.* for Utils
// This code goes in your onScannedRobot() event handler.

public void onScannedRobot(ScannedRobotEvent e) {
    double randomGuessFactor = (Math.random() - .5) * 2;
    double bulletPower = 3;
    double maxEscapeAngle = Math.asin(8.0/(20 - (3 * bulletPower)));
    double firingAngle = randomGuessFactor * maxEscapeAngle;
    double absBearingToEnemy = e.getBearingRadians() + getHeadingRadians();
	
    setTurnGunRightRadians(Utils.normalRelativeAngle(
            absBearingToEnemy + firingAngle - getGunHeadingRadians()));
    fire(bulletPower);
}

A simpler solution

A simpler method is to assume that the enemy is traveling in a circle around you, which is often true among NanoBots and 1-vs-1 bots. If the enemy is traveling in a circle around you, the maximum distance it can cover before a bullet reaches it is enemy velocity / bullet velocity (in radians). For example, a power 3.0 bullet fired at an enemy going at full speed should be fired at a bearing offset between -8/11 and +8/11.

See also