Robocode – Untouchable

Robocode is a programming game, where the goal is to develop a robot battle tank to battle against other tanks in Java or .NET. The robot battles are running in real-time and on-screen.

About six months ago, in school, my team (Wonjohn Choi, Raafay Muzaffar) created our robot named “Untouchable” based on Robocode software.

With numerous experiment, this robot is designed to avoid bullets with a repeated movement and shoot bullets with optimized power.

Untouchable

Untouchable

This robot wins against any built-in robocode robots and won school Robocode contest!

You can download the full zip file inĀ Downloads page.

Here is the main source code (without comments):


/**
 *
 * Untouchable - a robot by Wonjohn Choi and Raafay Muzaffar
 * @author Wonjohn Choi, Raafay Muzaffar
 * @date Jan. 19th, 2010
 */

import robocode.*;
import java.awt.Color;

public class Untouchable extends Robot
{
  Color getRandomColor[]=new Color[4];

  public void run()
  {
    this.turnGunRight(90);
    this.turnRadarRight(90);

    while(true)
    {
      for(int i=0;i<4;i++)
      {
        getRandomColor[i]=
        Color.getHSBColor((float)Math.random(),(float)Math.random(),(float)Math.random());
      }

      setColors(getRandomColor[0],getRandomColor[1],getRandomColor[2],Color.WHITE,getRandomColor[3]);

      for(int i=0;i<2;i++)
      {
        this.turnRadarLeft(360);
        this.turnRight(20);

        this.ahead(250);
      }

      for(int i=0;i<2;i++)
      {
        this.turnRadarLeft(360);
        this.turnLeft(10);

        this.back(250);
      }

    }
  }

  /**
   * onScannedRobot: What to do when you see another robot
   */
  public void onScannedRobot(ScannedRobotEvent e)
  {
    this.turnRight(e.getBearing()-90);

    double dist=e.getDistance();

    if(this.getEnergy()<5)
    {
      this.fire(0.1);
    }

    else if(dist<200)
    {
      this.fire(3);
    }

    else if(dist<400)
    {
      this.fire(2);
    }

    else if(dist<600)
    {
      this.fire(1);
    }

    else
    {
      this.fire(0.1);
    }
  }

  public void onHitRobot(HitRobotEvent e)
  {
    if (e.getBearing() >= 0)
    {
      turnRight(e.getBearing()-90);
    }
    else
    {
      turnRight(-1*(e.getBearing()-90));
    }

    fire(3);
  }
}