Robocode: diviértete y aprende Java o .NET

El proyecto Robocode data del inicio de la década de los 2000, creado por Mathew Nelson, y entonces sólo soportaba Java. Aunque con el tiempo se han ido añadiendo funcionalidades el objetivo sigue siendo el mismo: desarrollar un tanque para machacar a tus adversarios.
Hace no mucho tiempo incorpora la posibilidad de desarrollar los robots en la plataforma .NET aunque su uso no es tan extendido.


Hay ligas, como la RoboRumble@Home, la más veterana y respetada, rankings generales y por categorías, un “Hall of Fame” de los tanques más temidos y revolucionarios y una comunidad siempre activa y dispuesta al desafío donde la igualdad de oportunidades es la misma para todos.

Para equilibrar los combates los tanques se organizan en categorías al estilo del boxeo, por peso. Dicho peso se calcula en una “báscula” que mide el código efectivo de las clases: codesize.jar
De esta forma se dividen en:

  • Nanobots: cuyo código efectivo es menor de 250 bytes

  • Microbots: los que están entre 251 y 750 bytes

  • Minibots: los que están entre 751 y 1500 bytes

  • Megabots - por encima de 1501 bytes


Partes de un tanque y manejo

Los tanques se componen de tres partes: el cuerpo, el cañón y el radar.

El cañón rota sobre el eje central del tanque al igual que el radar y dicha rotación es controlada completamente desde programación.
Estas tres partes sólo podemos obtener información de dos de ellas:

  • El cuerpo: con getX() y getY() localizamos al tanque en el “ring” y con getHeading() obtenemos la dirección hacia donde esté mirando. Este último dato es importante ya que, para hacerlo avanzar, sólo disponemos de la función ahead(distancia_a_avanzar) y back(distancia_a_retroceder).

  • El radar: lo podremos girar con turnRadarRight(grados) o turnRadarLeft(grados), y esto es importante porque el radar es direccional y lo que no esté en su radio de acción no lo detectará.


Hay más comandos disponibles, incluso para fijar el radar al cañón o al cuerpo, para consultar tu estado y, por supuesto, para disparar.
Pero, quizás, los más importantes son los que se refieren al escaner del radar. Cada vez que nuestro radar detecta un robot a nuestro alcance se nos hace saber mediante el evento onScannedRobot, donde podremos detectar todo sobre el tanque que acabamos de avistar (excepto sus intenciones).

La forma de combate

El combate se realizará conforme unos parametros iniciales, tales como el tamaño de la zona de combate,el ritmo de enfriamiento del cañón o el tiempo de inactividad permitido a los robots (si lo superan se les comienza a drenar energía hasta que hagan algo o mueran).

Dicho ritmo de enfriamiento del cañón es crucial ya que los tanques disparan eligiendo la potencia del proyectil y, a más potencia más calentamiento.
El robot debe dosificar los disparos y su potencia según lo seguro que esté de que vaya a alcanzar a su contrincante, y eso hay que programarlo :)

Durante la batalla recibiremos disparos y por ello se nos lanzará un evento onHitByBullet, y podremos analizar el objeto Bullet para saber de donde nos ha venido, de qué potencia,etc. y qué acción debemos tomar.

El último tanque o equipo que quede en pie es el ganador de la ronda en curso.
En todo momento se puede consultar un marcador en tiempo real que informa de las puntuaciones y de algunas estadísticas del juego.

El entorno de programación

Para programar nuestros robots no necesitaremos ningún IDE externo ni instalaciones complicadas: todo lo necesario está en el mismo Robocode.

Disponemos de editor de código, debugger y compilador, todo en 1. Y además tendremos la posibilidad de meter todos los robots que vayamos desarrollando en un paquete común, para disponer de un repositorio de nuestras armas letales.

Todos los robots se ejecutan en el espacio de una sandbox para evitar código malintencionado.

Descargar Robocode | Robocode en Sourceforge
Más información | Rock ‘em, sock ‘em Robocode!

Portada de Genbeta