Module/Radar/SpinningBestStartDirection

From RoboWiki
Jump to: navigation, search
package jab.radar;
 
import robocode.util.Utils;
import jab.Module;
import jab.Radar;
 
 
/**
 * Credits
 * SpinningBestStartDirection by jab. Code license: RWPCL
 * Calculate if the radar must turns clockwise or not.
 * The main idea is to start scanning the opposite quadrant (biggest area)
 * as quick as possible, and if it starts scanning that quadrant
 * scan in the direction of that quadrant that has more area.
 */
public class SpinningBestStartDirection extends Radar {
 
	public SpinningBestStartDirection (Module bot) {
		super(bot);
	}
 
	private double radarClockwise;
 
	public void scan() {
		// Get the start radar direction only when the battle begins
		if (radarClockwise==0) radarClockwise = getRadarDirection();
		bot.setTurnRadarRightRadians(Double.POSITIVE_INFINITY * radarClockwise);
	}
 
 
	private int getRadarDirection() {
 
		double width = bot.getBattleFieldWidth();
		double height = bot.getBattleFieldHeight();
 
		double radarHeadingRadians = bot.getRadarHeadingRadians();
		double to0 = Math.abs(Utils.normalRelativeAngle(radarHeadingRadians));
		double to90 = Math.abs(Utils.normalRelativeAngle(radarHeadingRadians
				- Math.PI / 2));
		double to180 = Math.abs(Utils.normalRelativeAngle(radarHeadingRadians
				- Math.PI));
		double to270 = Math.abs(Utils.normalRelativeAngle(radarHeadingRadians
				- 3 * Math.PI / 2));
		// 1 2
		// 3 4
		if (bot.getX() <= width / 2 && bot.getY() >= height / 2)
			return (to90 < to180) ? 1 : -1;
		if (bot.getX() >= width / 2 && bot.getY() >= height / 2)
			return (to180 < to270) ? 1 : -1;
		if (bot.getX() <= width / 2 && bot.getY() <= height / 2)
			return (to0 < to90) ? 1 : -1;
		return (to270 < to0) ? 1 : -1;
	}
 
}
Personal tools