Robocode IV: Aprendiendo a escapar

En el último artículo aprendimos a disparar. En éste aprenderemos a reaccionar ante un proyectil que nos alcanza. Para ello haremos uso del método onHitByBullet. Este método se ejecuta cuando nuetro robot es alcanzado por una bala. Si queremos estar informados de este evento y reaccionar al mismo tendremos que sobreescribirlo.

En el siguiente código sobreescribimos el método onHitByBullet() y le indicamos al robot que cuando sea alcanzado por un proyectil cambie su trayectoria para evitar ser alcanzado de nuevo por otra bala.

Para cambiar la trayectoria hacemos uso del método turnLeft() que recibe como parámetro el número de grados que queramos que gire hacia la derecha. En este caso hacemos uso del método getBearing() para obtener el ángulo con el que hemos recibido el disparo. El valor que se le pasa a turnLeft colocará al robot en una recta perpendicular a la recta que ha seguido la bala.


public void onHitByBullet(HitByBulletEvent e) {
turnLeft(90 - e.getBearing());
}

Robocode III: Aprendiendo a disparar

En nuestro primer ejemplo el robot se movía hacia delante, giraba el cañón, se movía hacia atrás, giraba el cañón y otra vez vuelta a empezar. Vamos a añadirle el código necesario para que dispare. Para disparar hay que llamar al método fire() indicándole la potencia del disparo. En la documentación se nos indica que al llamar al método fire:

Inmediatamente dispara una bala. La bala se desplazará en la dirección en la que el cañón está apuntando.

La potencia del disparo indica una cantidad de energía que se tomará a partir de la energía del robot. Por lo tanto, con cuanta más potencia se dispare la bala, más energía se toma del robot. Si la bala alcanza a otro robot, le restará energía en función de la potencia a la que se haya lanzado la bala.

La llamada al método fire se pude realizar en cualquier parte del código, pero quizás resulte conveniente no desperdiciar balas y realizar el disparo cuando detectemos mediante nuestro radar que tenemos un robot delante nuestra. El método onScannedRobot() es llamado cuando nuestro robot “ve” a otro robot, es decir, cuando el radar detecta otro robot.

El siguiente código implementa la llamada al método fire() desde el método onScannedRobot():


package jra;
import robocode.*;

public class MiPrimerRobot extends Robot {
public void run() {
while (true) {
ahead(100);
turnGunRight(360);
back(100);
turnGunRight(360);
}
}

public void onScannedRobot(ScannedRobotEvent e) {
fire(1);
}
}

Robocode II: Un primer vistazo al código

Una vez visto el robot en acción, vamos a analizar el código fuente:



Como podemos observar, todo el código se reduce a la ejecución de cuatro llamadas a métodos dentro de un bucle infinito:

  • ahead(100);: Le indicamos al robot que avance 100 pasos.
  • turnGunRight(360);: Le indicamos al robot que gire el cañón 360º hacia la derecha.
  • back(100);: Le indicamos al robot que retroceda 100 pasos.
  • turnGunRight(360);: Le indicamos al robot que gire el cañón 360º hacia la derecha.

Es evidente que necesitamos conocer qué acciones puede realizar el robot; la lista completa está disponible en su API y más concretamente en la documentación de la clase Robot.

También existe un pequeño tutorial (EN INGLÉS) que es el que vamos a desarrollar en próximos artículos.

Robocode I: Instalación

Si estás interesado en aprender a programar robots en java, siguiendo este manual express podrás tener tu primer robot en menos de 5 minutos:

La instalación en Ubuntu es muy fácil, simplemente tienes que escribir lo siguiente en la consola:

sudo apt-get install robocode

Una vez instalado, se ejecuta desde consola escribiendo

robocode

o bien lo localizaremos en el menú Juegos dentro de Aplicaciones.

Para crear nuestro primer robot, simplemente tenemos que pulsar en el menú Robot->Editor



Desde el editor de robots, podemos crear uno pulsando File->New->Robot y asignándole un nombre. A continuación nos pide unas iniciales y el nombre del paquete. Podemos utilizar las mismas que las utilizadas en las iniciales pero en minúscula. El asistente generará el esqueleto de nuestro primer robot:



A continuación debemos guardar el código fuente pulsando File->Save y podemos compilarlo pulsando Compiler->Compile. Si no se ha producido ningún error de compilación podemos volver a la aplicación principal y disponernos a crear nuestro primer combate. Cerramos el editor de robots pulsando File->Exit.

Ya en la aplicación principal pulsamos Battle->New y seleccionamos los robots que van a participar en el combate.




Ya solamente nos queda pulsar “Start Battle” para que los robots entren en acción.