Ocnirp/Source Code

From Robowiki
< Ocnirp
Revision as of 09:48, 24 May 2009 by Nat (talk | contribs) (source code of 1.4)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Ocnirp Sub-pages:
OcnirpVersion History - Source Code

package nat.nano;

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

/**
 * Ocnirp - a robot by Nat Pavasant
 * "Battle for the one-on-one nano-bot crown!"
 * 
 * @version 1.4
 * @author Nat Pavasant
 */
public final class Ocnirp extends AdvancedRobot {
	private static final int PATTERN_DEPTH = 45;
	private static final double CHANGE_INTEVAL = /*0.92d*/ 0.9454623d;
	private static final double PREFERED_DISTANCE = 160d;
	private static final double FIRE_POWER = 2.4433565d;
	private static final double BULLET_VELOCITY = 12.5d;
	private static final double DISTANCE_OFFSET = 0.38435d;
	private static final double VELOCITY_MULTIPILER = 17.78456345d;
	private static final int BFT = (int) (PREFERED_DISTANCE / BULLET_VELOCITY + 2);
	
	static int dir = 100;
	static double en;
	
	public void run() {
		// setAdjustGunForRobotTurn(true);
		// setAdjustRadarForGunTurn(true);
		setTurnRadarRightRadians(Double.POSITIVE_INFINITY);
	}
	
	public void onScannedRobot(ScannedRobotEvent e) {
		int matchLen = PATTERN_DEPTH;
		double angle;
		double dist;
		int matchPos;
		
		// Radar
		setTurnRadarLeftRadians(getRadarTurnRemaining());
		
		// Movement (Perpendicular and Random)
		// setTurnRightRadians(Math.cos(angle = e.getBearingRadians()));
		setTurnRightRadians(Math.cos(angle = e.getBearingRadians())
				- Math.signum(dir
						* ((dist = e.getDistance()) - PREFERED_DISTANCE))
				* DISTANCE_OFFSET);
		setAhead(dir);
		
		// Random and Energy Drop Surfing
		if (Math.random() > CHANGE_INTEVAL/* || en < (en = e.getEnergy())*/) {
			onHitWall(null);
		
			// Velocity trick
			setMaxVelocity(Math.random() * VELOCITY_MULTIPILER + 1);
		
		}
		
		// Eric Simonton's Pattern Matching
		int i;
		enemyHistory = String.valueOf(
				(char) /* Math.round */(/* 2 * */(e.getVelocity() * Math.sin(e.getHeadingRadians()
						- (angle += getHeadingRadians()))))).concat(
				enemyHistory);
		while ((matchPos = enemyHistory
				.indexOf(
						enemyHistory.substring(0, matchLen--),
						i = BFT /*(int) ((dist/* = e.getDistance() * /) / BULLET_VELOCITY) + 2 */)) < 0)
			;
		do
			angle += (short) enemyHistory.charAt(--matchPos) / dist/* * 0.5 */;
		while (--i > 0);
		setTurnGunRightRadians(Utils.normalRelativeAngle(angle
				- getGunHeadingRadians()));
		
		// Fire
		setFire(FIRE_POWER);
	}
	
	public void onHitWall(HitWallEvent e) {
		dir = -dir;
	}
	
	static String enemyHistory = "" + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 1 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 2 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) -1 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0 + (char) 0
			+ (char) 0 + (char) 0 + (char) 0 + (char) -2 + (char) -4
			+ (char) -6 + (char) -8 + (char) -8 + (char) -8 + (char) -8
			+ (char) -8 + (char) -8 + (char) -8 + (char) -8 + (char) -8
			+ (char) -8 + (char) -8 + (char) -8 + (char) -8 + (char) -8
			+ (char) -8 + (char) -8 + (char) -8 + (char) -8 + (char) -8
			+ (char) -8 + (char) -8 + (char) -8 + (char) -8 + (char) -8
			+ (char) -8 + (char) -8 + (char) -8 + (char) -8 + (char) -8
			+ (char) -8 + (char) -8 + (char) -8 + (char) -8 + (char) -8
			+ (char) -8 + (char) -8 + (char) -8 + (char) -8 + (char) -8
			+ (char) -8 + (char) -7 + (char) -6 + (char) -5 + (char) -4
			+ (char) -3 + (char) -2 + (char) -1 + (char) 0 + (char) 2
			+ (char) 4 + (char) 6 + (char) 8 + (char) 8 + (char) 8 + (char) 8
			+ (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8
			+ (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8
			+ (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8
			+ (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8
			+ (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8
			+ (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8 + (char) 8
			+ (char) 8 + (char) 7 + (char) 6 + (char) 5 + (char) 4 + (char) 3
			+ (char) 2 + (char) 1 + (char) 0;
}