<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://robowiki.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ackzar</id>
	<title>Robowiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://robowiki.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ackzar"/>
	<link rel="alternate" type="text/html" href="http://robowiki.net/wiki/Special:Contributions/Ackzar"/>
	<updated>2026-04-06T11:06:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://robowiki.net/w/index.php?title=User:Ackzar&amp;diff=17940</id>
		<title>User:Ackzar</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=User:Ackzar&amp;diff=17940"/>
		<updated>2010-12-17T13:30:44Z</updated>

		<summary type="html">&lt;p&gt;Ackzar: Created page with 'Created a teambot based on Voidius's BlitzBat, heres the code:  import robocode.*; import robocode.util.Utils;   import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; i…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Created a teambot based on Voidius's BlitzBat, heres the code:&lt;br /&gt;
&lt;br /&gt;
import robocode.*;&lt;br /&gt;
import robocode.util.Utils;&lt;br /&gt;
 &lt;br /&gt;
import java.awt.geom.Point2D;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
&lt;br /&gt;
public class FFFFFFFUUUUUUUUUUUU extends TeamRobot&lt;br /&gt;
{    &lt;br /&gt;
	static Rectangle2D.Double _fieldRect;&lt;br /&gt;
	static Point2D.Double _destination;&lt;br /&gt;
	static String _targetName;&lt;br /&gt;
	static double _targetDistance;&lt;br /&gt;
	double enemyHeadingOld;&lt;br /&gt;
	double enemyEnergyOld = 100.0;&lt;br /&gt;
	static HashMap _enemies = new HashMap();&lt;br /&gt;
	static Point2D.Double _myLocation;&lt;br /&gt;
	&lt;br /&gt;
	public void run() {&lt;br /&gt;
	    setAdjustGunForRobotTurn(true);&lt;br /&gt;
	    setAdjustRadarForGunTurn(true);&lt;br /&gt;
	    setColors(Color.white, Color.white, Color.white, Color.white, Color.white);&lt;br /&gt;
	&lt;br /&gt;
	    _fieldRect = new Rectangle2D.Double(50, 50, &lt;br /&gt;
	            getBattleFieldWidth() - 100, getBattleFieldHeight() - 100);&lt;br /&gt;
	    _targetDistance = Double.POSITIVE_INFINITY;&lt;br /&gt;
	    _destination = null;&lt;br /&gt;
&lt;br /&gt;
	    turnRadarRightRadians(Double.POSITIVE_INFINITY);&lt;br /&gt;
	    do {&lt;br /&gt;
	        Point2D.Double myLocation = _myLocation = new Point2D.Double(getX(), getY());&lt;br /&gt;
	        EnemyData targetData = (EnemyData)_enemies.get(_targetName);&lt;br /&gt;
			&lt;br /&gt;
	        /////////////////////////////////&lt;br /&gt;
	        // Movement&lt;br /&gt;
	        double bestRisk;&lt;br /&gt;
			&lt;br /&gt;
	        try &lt;br /&gt;
	        {&lt;br /&gt;
	            bestRisk = evalDestinationRisk(_destination) * .85;&lt;br /&gt;
	        } &lt;br /&gt;
			catch (NullPointerException ex) &lt;br /&gt;
			{&lt;br /&gt;
	            bestRisk = Double.POSITIVE_INFINITY;&lt;br /&gt;
	        }&lt;br /&gt;
			&lt;br /&gt;
	        try &lt;br /&gt;
	        {&lt;br /&gt;
	            for (double d = 0; d &amp;lt; (Math.PI * 2); d += 0.1) &lt;br /&gt;
	            {&lt;br /&gt;
	                Point2D.Double newDest = project(myLocation, d, Math.min(_targetDistance, 100 + Math.random() * 200));&lt;br /&gt;
	                double thisRisk = evalDestinationRisk(newDest);&lt;br /&gt;
	                if (_fieldRect.contains(newDest) &amp;amp;&amp;amp; thisRisk &amp;lt; bestRisk) &lt;br /&gt;
	                {&lt;br /&gt;
	                    bestRisk = thisRisk;&lt;br /&gt;
	                    _destination = newDest;&lt;br /&gt;
	                }&lt;br /&gt;
	            }&lt;br /&gt;
	&lt;br /&gt;
	            double angle = Utils.normalRelativeAngle(&lt;br /&gt;
	                absoluteBearing(myLocation, _destination) -&lt;br /&gt;
	                getHeadingRadians());&lt;br /&gt;
	            setTurnRightRadians(Math.tan(angle));&lt;br /&gt;
	            setAhead(Math.cos(angle) * Double.POSITIVE_INFINITY);&lt;br /&gt;
	        } &lt;br /&gt;
	        catch (NullPointerException ex) &lt;br /&gt;
	        {&lt;br /&gt;
	        	&lt;br /&gt;
	        }&lt;br /&gt;
	&lt;br /&gt;
	        /////////////////////////////////&lt;br /&gt;
	        // Radar and execute&lt;br /&gt;
&lt;br /&gt;
	    	scan();&lt;br /&gt;
	        /////////////////////////////////&lt;br /&gt;
	    } while (true);        &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void onScannedRobot(ScannedRobotEvent e) &lt;br /&gt;
	{&lt;br /&gt;
		double radarTurn = getHeadingRadians() + e.getBearingRadians() - getRadarHeadingRadians();&lt;br /&gt;
		setTurnRadarRightRadians(Utils.normalRelativeAngle(radarTurn));&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	    double eDistance = e.getDistance();&lt;br /&gt;
	&lt;br /&gt;
	    EnemyData eData = new EnemyData();&lt;br /&gt;
	    eData.setLocation(project(_myLocation, e.getBearingRadians() + getHeadingRadians(), eDistance));&lt;br /&gt;
	    eData.energy = e.getEnergy();&lt;br /&gt;
	    &lt;br /&gt;
&lt;br /&gt;
        /////////////////////////////////&lt;br /&gt;
        // Gun&lt;br /&gt;
        try &lt;br /&gt;
        {		&lt;br /&gt;
        	double bulletPower = Math.min(3.0,getEnergy());&lt;br /&gt;
        	double absoluteBearing = getHeadingRadians() + e.getBearingRadians();&lt;br /&gt;
        	double enemyX = getX() + e.getDistance() * Math.sin(absoluteBearing);&lt;br /&gt;
        	double enemyY = getY() + e.getDistance() * Math.cos(absoluteBearing);&lt;br /&gt;
        	double enemyHeading = e.getHeadingRadians();&lt;br /&gt;
        	double enemyHeadingChange = enemyHeading - enemyHeadingOld;&lt;br /&gt;
        	double enemyVelocity = e.getVelocity();&lt;br /&gt;
        	enemyHeadingOld = enemyHeading;&lt;br /&gt;
	 &lt;br /&gt;
        	double deltaTime = 0;&lt;br /&gt;
        	double battleFieldHeight = getBattleFieldHeight(), battleFieldWidth = getBattleFieldWidth();&lt;br /&gt;
        	double predictedX = enemyX, predictedY = enemyY;&lt;br /&gt;
        	while((++deltaTime) * (20.0 - 3.0 * bulletPower) &amp;lt; Point2D.Double.distance(getX(), getY(), predictedX, predictedY))&lt;br /&gt;
        	{		&lt;br /&gt;
        		predictedX += Math.sin(enemyHeading) * enemyVelocity;&lt;br /&gt;
        		predictedY += Math.cos(enemyHeading) * enemyVelocity;&lt;br /&gt;
        		enemyHeading += enemyHeadingChange;&lt;br /&gt;
        		if(	predictedX &amp;lt; 18.0 || predictedY &amp;lt; 18.0&lt;br /&gt;
        				|| predictedX &amp;gt; battleFieldWidth - 18.0&lt;br /&gt;
        				|| predictedY &amp;gt; battleFieldHeight - 18.0)&lt;br /&gt;
        		{&lt;br /&gt;
	 &lt;br /&gt;
        			predictedX = Math.min(Math.max(18.0, predictedX), battleFieldWidth - 18.0);	&lt;br /&gt;
        			predictedY = Math.min(Math.max(18.0, predictedY), battleFieldHeight - 18.0);&lt;br /&gt;
        			break;&lt;br /&gt;
        		}&lt;br /&gt;
	}&lt;br /&gt;
	double theta = Utils.normalAbsoluteAngle(Math.atan2(&lt;br /&gt;
	    predictedX - getX(), predictedY - getY()));&lt;br /&gt;
&lt;br /&gt;
	setTurnGunRightRadians(Utils.normalRelativeAngle(&lt;br /&gt;
	    theta - getGunHeadingRadians()));&lt;br /&gt;
        } &lt;br /&gt;
		catch (NullPointerException ex) &lt;br /&gt;
		{ }&lt;br /&gt;
		if(!isTeammate(e.getName()))&lt;br /&gt;
			setFire(3 - ((20 - getEnergy()) / 6));&lt;br /&gt;
	&lt;br /&gt;
	    _enemies.put(e.getName(), eData);&lt;br /&gt;
	&lt;br /&gt;
	    if (eDistance &amp;lt; _targetDistance || e.getName().equals(_targetName)) &lt;br /&gt;
	    {&lt;br /&gt;
	        _targetDistance = eDistance;&lt;br /&gt;
	        _targetName = e.getName();&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void onRobotDeath(RobotDeathEvent e) &lt;br /&gt;
	{&lt;br /&gt;
	    _enemies.remove(e.getName());&lt;br /&gt;
	    _targetDistance = Double.POSITIVE_INFINITY;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	protected double evalDestinationRisk(Point2D.Double d) &lt;br /&gt;
	{&lt;br /&gt;
	    double risk = 0;&lt;br /&gt;
	&lt;br /&gt;
	    Iterator enemiesIterator = _enemies.values().iterator();&lt;br /&gt;
	    while (enemiesIterator.hasNext()) &lt;br /&gt;
	    {&lt;br /&gt;
	        EnemyData ed = (EnemyData)enemiesIterator.next();&lt;br /&gt;
	        double distSq = ed.distanceSq(d);&lt;br /&gt;
	        int closer = 0;&lt;br /&gt;
	        Iterator enemiesIterator2 = _enemies.values().iterator();&lt;br /&gt;
	        while (enemiesIterator2.hasNext()) &lt;br /&gt;
	        {&lt;br /&gt;
	            if (ed.distanceSq((EnemyData)enemiesIterator2.next()) &lt;br /&gt;
	                &amp;lt; distSq) {&lt;br /&gt;
	&lt;br /&gt;
	                closer++;&lt;br /&gt;
	            }&lt;br /&gt;
	        }&lt;br /&gt;
	&lt;br /&gt;
	        risk += Math.max(0.5, Math.min(ed.energy / getEnergy(), 2)) * (1 + Math.abs(Math.cos(absoluteBearing(_myLocation, d) - absoluteBearing(_myLocation, ed))))&lt;br /&gt;
	            / closer / distSq / (200000 + d.distanceSq(getBattleFieldWidth() / 2, getBattleFieldHeight() / 2));&lt;br /&gt;
	    }&lt;br /&gt;
	&lt;br /&gt;
	    &lt;br /&gt;
	&lt;br /&gt;
	    return risk;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	protected static double absoluteBearing(Point2D.Double source, Point2D.Double target) &lt;br /&gt;
	{&lt;br /&gt;
	    return Math.atan2(target.x - source.x, target.y - source.y);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static Point2D.Double project(Point2D.Double sourceLocation, double angle, double length) &lt;br /&gt;
	{&lt;br /&gt;
	    return new Point2D.Double(sourceLocation.x + Math.sin(angle) * length,&lt;br /&gt;
	        sourceLocation.y + Math.cos(angle) * length);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
class EnemyData extends Point2D.Double&lt;br /&gt;
{&lt;br /&gt;
	double energy;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Ackzar</name></author>
		
	</entry>
</feed>