Sunteți pe pagina 1din 10

Instalación y primeros pasos con Robocode

Julio René Santizo Ochoa - 200511763


juliosantizo@gmail.com
Ing Huber Flores

Guatemala, Guatemala
Universidad de San Carlos
Facultad de Ingenierı́a
Escuela de Ciencias y Sistemas
25 de junio de 2009

Resumen
En este articulo se pretende introducir al software de simulación
de batallas con robots Robocode. Robocode está escrito en Java por lo
tanto es multiplataforma. El objetivo es programar un robot y ponerlo
a combatir contra otros.

Abstract
This article aims to introduce the simulation software Robocode.
Robocode is written in Java, that’s why it’s multi-plataform. The
objective is to code a robot and fight against other robots.

1
1 Introducción
Robocode es como un juego de programación a través del cual se puede
aprender a programar en Java y aprender conceptos y algoritmos de inteli-
gencia artificial como algoritmos genéticos en una forma muy divertida. El
proyecto fue iniciado por Matthew A. Nelson y es de código abierto. Los
requerimientos para instalar Robocode, se reducen unicamente a tener un
JDK 1.5 como mı́nimo. Cada robot consta de tres partes, el cuerpo, el arma
y el radar, el cuerpo es la estructura mas grande del robot y la cual le da
movilidad, el arma es un pequeño cañon giratorio que le sirve para atacar a
los contrincantes y el radar sirve para detectar donde estan los otros robots.

2 Instalación
La instalación de robocode es muy sencilla, lo unico que tenemos que hacer
es ejecutar el Jar que que bajamos de http://robocode.sourceforge.net/
mediante el siguiente comando:

java -jar robocode-setup-x.y.z.jar

Ahora para iniciar la aplicacion debemos ejecutar el siguiente script que se


encuentra en la carpeta de instalación:

robocode/robocode.sh

2
3 Creacion de un robot
La creación de un robot es muy sencilla aunque la programación de la inteli-
gencia artificial para que el robot sea buen combatiente y pueda ganar puede
llegar a ser bastante complicada. Para empezar con la creación de nuestro
primer robot, vamos al menu Robot y luego damos clic en Editor. La primera
vez que entremos, revisará que tengamos Java instalado

Ahora ya tenemos abierto el editor con la plantilla para hacer los robots. El
editor se encarga de Como podemos ver el editor es bastante sencillo y puede
resultarnos un poco dificil o incomodo trabajar en el, pero podriamos utilizar
el IDE Java de nuestra preferencia.

3
Yo lo que hice para trabajar mas comodamente fue crear un proyecto de
NetBeans, colocarle todas las librerias necesarias y crear ahi mi robot, lue-
go crear links simbolicos en la carpeta robocode/robots hacia el .class y el
.java de mi proyecto en NetBeans y entonces puedo programar mi robot en
NetBeans y utilizarlo en Robocode facilmente.

4 Sintaxis de programación
Como mencioné anteriormente, Robocode carga las clases de los robots a su
simulador, esto significa que los robots están hechos en Java (5 o posterior);
entonces la sintaxis para construir un robot, es la sintaxis de Java.
A continuacion se presentan los principales metodos y clases que puede llevar
un robot.
Se puede mover hacia adelante, hacia atrás y rotar. Para rotar, se especifi-
can la magnitud de la rotación en grados. Por ejemplo las instrucciones para
rotar son:
turnRight(grados);

4
turnLeft(grados);
Para movernos hacia adelante y hacia atrás utilizamos las siguientes instruc-
ciones:
ahead(distancia);
back(distancia);
El origen (0,0) esta a la abajo hacia la izquierda.
Para girar el cañón utilizamos las siguientes instrucciones:
turnGunRight(grados);
turnGunLeft(grados);
Para girar únicamente el radar las siguientes instrucciones:
turnRadarRight(grados);
turnRadarLeft(grados);
Además de estos que son los principaes movimientos, existen algunos eventos
que tambien son importantes como:
onBulletHitBullet();
Este evento se dispara cuando una bala impacta contra otra bala.
onBulletMissed();
Este evento se dispara cuando la bala sale del campo de batalla sin impactar
contra ningun otro robot.
onDeath();
Este evento se dispara cuando se muere el robot.
onWin();
Este evento se dispara cuando el robot gana.

4.1 Opciones en los movimientos


setAdjustGunForRobotTurn(boolean): Esta es para que el arma gire junto
con el robot.
setAdjustRadarForRobotTurn(boolean): Esta es para que el radar gire junto
con el robot.
setAdjustRadarForGunTurn(boolean): Esta es paa que el radar gire junto
con el arma.

5 Ataque y estretegias
El robot aparte de tratar de evitar ser atacado por otros, también debe evitar
chocarse con las paredes. Si hay un choque robot con robot, ambos robots

5
pierden puntos de vida. El radar con el que cuenta cada robot, es muy com-
pleto porque detecta velocidad, posición, orientación y energı́a restante del
otro robot.
Entonces una buena estrategia, consistirı́a en moverse mucho y rápido para
que no le disparen, los demás, y también tratar de disparar muchas veces a
los adversarios.
La estrategia para disparar a los otros robots, debe contemplar que si el robot
al que se le dispara, se mueve, ya no será impactado por la bala. Debemos
tener muy en cuenta también que los disparos tienen cierto tiempo de retardo
uno de otro, por lo cual cada disparo debe ser certero para no perder tiempo.
Una batalla no puede durar tanto tiempo, porque si sobrepasan el lı́mite,
todos los robots empiezan a perder vida, hasta que mueren, o sea que el que
este con mayor puntaje de vida serı́a el que gana.
En la formulación de la estrategia, es importante saber a que velocidad se
mueve una bala que disparamos. La fórmula para calcularla es velocidad =
20-3*power. La velocidad de la bala no es afectada por la velocidad del robot
y tiene alcance de todo el campo de batalla, es decir no se detiene hasta que
golpea a un robot o sale del terreno de batalla.
Es importante para la estrategia también mencionar que el robot inicia en
una posición aleatoria todas las veces en el campo de batalla.
Una estrategia muy sencilla es utilizar el radar para escanear la ubicación de
los demás robots, elegir el más cercano y dispararle sin detenerse.
Otra estrategia podrı́a ser basar la decisión en experiencias anteriores de
situaciones, es decir que el robot aprenda, pero esto es mucho más complica-
do.
Estrategia anti muerte, esta estrategia consiste en moverse aleatoriamente
tan rápido que las balas tengan una posibilidad mı́nima de impactar a nues-
tro robot.
Estrategia de radar infinito, esta estrategia consiste en hacer girar el radar
infinitamente, para saber la posición de los demás robots y dispararles, esta
estrategia es bastante mala debido a la limitante de Robocode de no poder
disparar tan seguido.
Estrategia de la velocidad random, esta estrategia es bastante sencilla para
combinar con alguna otra porque simplemente consiste en moverse a veloci-
dades aleatorias, de manera que los demás robots no puedan predecir nuestra
velocidad.
Para apuntar, hay varias estrategias muy complicadas, pero principalmente
consisten en estar seguros del blanco antes de disparar y saber elegir bien

6
la potencia del disparo basado en la distancia del enemigo, porque si esta
cerca, conviene más disparar con poca potencia, pero asi podemos disparar
más seguido, mientras se encuentra cerca
Estrategia de la posición futura, esta estrategia consiste en utilizar bien toda
la información que nos provee el radar, como la dirección y la velocidad a
la que se mueve el robot enemigo de manera de dispara a donde vaya estar
cuando la bala llegue, para esto simplemente tenemos que aplicar en poco de
fı́sica.
El metodo getHeading() y el medoto getBearing son muy importantes en la
formulacion de una estragia, porque es con estos metodos con los que po-
demos auxiliarnos para apuntar bien y disparar. El primero nos dice donde
se encuentre el frente del tanque, mientras que el segundo nos dice donde
se produjo un evento, por ejemplo cuando recibimos un impacto podriamos
hacer lo siguiente para contra atacar.
turnRight (event.getBearing ());
Algo sumamente importante en el ataque y la estrategia, es toda la informa-
cion que podamos sacar del radar, esta es la siguiente:
getDistance()
Devuelve la distancia del a la que se encuentra el robot.
getEnergy()
Devuelve la energı́a del robot.
getHeading()
Devuelve la orientación en grados del tanque escaneado.
getHeadingRadians()
Devuelve la orientación en radianes del tanque escaneado.
getName()
Devuelve el nombre del robot escaneado.
getVelocity() Devuelve la velocidad del robot escaneado.
Del campo de batalla, tambien podedmos extraer informacion muy util para
elaboracion de nuestra estrategia, esta informacion es:
getEnergy()
Devuelve la energı́a actual de nuestro robot.
getOthers()
Retorna la cantidad de oponentes que hay en el campo de batalla.
getNumRounds()
Devuelve la cantidad de roudns que se pelearan.
getRoundNum()
Devuelve el numero de round actual.

7
Ya con la descripción de los principales movimientos y eventos, empezaremos
con las secciones de código donde tenemos que programar el robot. Como po-
demos ver en el código que se genera al hacer un nuevo robot, la clase hereda
de otra que se llama Robot, pero también podrı́a heredar de AdvancedRobot.
Aparte de estos dos eventos que ya vienen en el código, también tenemos Hi-
tRobotEvent y este método es llamado cuando el robot choca con otro robot
ası́ como el HitWallEvent este método es llamado cuando el robot se choca
con una pared.
También podemos ver que contiene un método run el cual sobrescribe el
método run de un hilo es decir, la clase es un hilo y dentro del método hay
un ciclo while infinito dentro del cual debemos colocar como queremos que
se comporte el robot durante la pelea.
Dentro de la clase, también tiene los métodos onScannedRobot y onHitBy-
Bullet, el primero es donde especificamos que hacer cuando se detecta otro
robot con nuestro radar, y el segundo es donde especificamos como reaccionar
cuando otro robot nos dispara. Simplemente con estos dos métodos, podemos
pensar una estrategia creativa de manera que nuestro robot sea el ganador.
Cuando hay mas de dos robots en el campo de batalla, tenemos dos moda-
lidades, una es todos contra todos y la otra es en equipos, cuando se utiliza
la modalidad en equipos, las posibilidades de estrategias para ganar aumen-
tan aun mas porque todos los miembros del equipo serian parte de la misma
estrategia para buscar el mismo objetivo, pueden haber unos robots, solo
disparando y otros caminando a lo loco por todo el campo de batalla.
Estrategia de Hyde, esta estrategia se trata de perseguir al enemigo y dispa-
rarle de cerca, con toda la fuerza que se puede porque aunuq se pierde mas
energia, tambien es mas seguro acertarle y hacerle bastante daño.
Estrategia de Jekyll, esta es una estrategia defensiva que consiste en moverse
perpendicularmente al cañon del enemigo de manera de poder alejarse lo mas
rapido posible y no ser impactado.

5.1 Puntos de vida


Cuando disparamos, nos quitan una determinada energı́a dependiendo de
cuanta energı́a hayas empleado en el disparo.
Si chocamos con algún robot perdemos una cierta cantidad de energı́a.
Si nos impacta una bala, se quita una cantidad importante de energı́a. Esta
es la mayor penalización que se tiene.
Por utilizar mucho el radar, tambien se nos quita energia.

8
Si pasa mucho tiempo y no se produce ninguna acción se sufre una penaliza-
ción de energia.
Por el contrario, si le disparamos a un robot enemigo nos suman una cantidad
de energı́a.

6 Resultados
Total Score
Esta es la calificación total que obtiene el robot.
Survival Score
Estos son los puntos que ganó por estar vivo cuando otros robots murieron.
Last Survivor Bonus
Es un bono que gana el ultimo robot en morir.
Bullet Damage
Son los puntos ganados por cada vez que disparon a un enemigo.
Bullet Damage Bonus
Son los puntos ganados por matar a un enemigo.
Ram Damage
Puntos ganados por hacer ram a los enemigos.
Ram Damage Bonus
Puntos ganados por matar a un enemigo con ram.
1sts, 2nds, 3rds
Esto solo nos muestra el número de veces que el robot quedó en primer,
segundo y tercer lugar respectivamente.

9
7 Conclusiones
• El software Robocode es una herramienta muy útil y divertida para
apreder ya que mediante ella podemos programar robots igual que como
si los tuvieramos fisicamente y sin incurrir en gastos.

• Con el software Robocode tenemos hasta mayor flexibilidad para pro-


gramar porque por ejemplo con un robot real, seria demasiado dificil
tener tanta informacion en el radar como con Robocode que cuenta con
distancia, velocidad, direccion del movimiento, etc.

• Esta es una forma de aprender a programar algoritmos de inteligencia


artificial muy entretenida, incluso muy emocionante por lo tanto se
hace mas facil y despierta mayor interes en nosotros.

• Al estar los robots programados en Java, se abren un gran numero


de oportunidades y facilidades para programar la estrategia, porque
podriamos incluso utilizar APIs externas a Robocode para facilitar la
programacion de funciones matematicas por ejemplo, tambien conta-
mos con una amplia coleccion de estructuras de datos predefinidas.

Referencias
[1] PEZ. Robowiki. Wiki, http://robowiki.net/.

[2] Robocode api doc. JavaDoc, http://robocode.sourceforge.net/


docs/robocode/.

10

S-ar putea să vă placă și