ROBOCODE - FASE#1

Carlos Andres Barrios Gonzalez caanbago@gmail.com Ing. Huber Flores

Guatemala, Guatemala Universidad de San Carlos de Guatemala Facultad de Ingenier´ ıa. Escuela de Ciencias y Sistemas. Junio, 2009

1

Resumen

RoboCode es un simulador de combates entre tanques desarrollado por IBM Alphaworks. Esta escrito en lenguaje java y es open source. El simulador proporciona un API con una serie de objetos y m´todos para programar el e tanque. El jugador debe elegir la mejor estrategia para controlar el tanque y vencer a los dem´s robots en la arena de combate. a

2

Abstract

RoboCode is a robot combat simulator developed by IBM Alphaworks. It is written in java language and it is open source. The simulator provides an API with a series of objects and methods to program the tank. The player should select the best strategy to control the tank and conquer the other robots in the combat arena.

1

3

ROBOCODE - Introducci´n o

Build the best. Destroy the rest Robocode es un entorno gratuito de simulaci´n de guerras de tanques robots, o desarrollado por un ex programador de IBM, Mathew Nelson, fan´tico de Java a y los robots en Alphaworks de IBM. Los tanques rob´ticos son programados o en java y posteriormente son cargados en un simulador donde se desarrolla el combate. Existen dos modos de juego: • Batalla individual: en el que cada robot lucha contra todos los dem´s. a • Batalla en equipo: en el que un ej´rcito de robots lucha por la victoria de e modo colaborativo. El simulador proporciona un API con una serie de objetos y m´todos para e programar el tanque. El jugador debe elegir la mejor estrategia para controlar el tanque con desplazamientos, giros, control de radar, control de ca˜´n y disparo. no Adem´s debe controlar todos los eventos que se producen como ser impactado, a detectar a un enemigo, chocar contra una pared, etc. ASPECTOS REALISTAS • Las actuaciones llevan tiempo; mientras rotas te pueden disparar. • Las balas tardan en llegar. • El sensor unidireccional debe apuntar al adversario para verlo. • El ca˜´n se calienta al disparar y debe enfriarse antes del pr´ximo disparo. no o • Chocar contra los obst´culos debilita. a ASPECTOS NO REALISTAS: • Los sensores y el resto de los componentes son silenciosos. 2

• Los sensores detectan velocidad, posici´n, orientaci´n y energ´ restante. o o ıa • Los combates tienen lugar en un entorno plano 2D y cerrado.

4
4.1

ANATOMIA DE ROBOCODE
TANQUE

Cada robot esta formado de tres partes: • Veh´ ıculo • Arma • Radar

Figure 1: Tanque

4.2

ARENA

Se presenta en un plano cartesiano con el origen en la esquina inferior izquierda. • Las coordenadas son expresadas como (x,y). • Siempre son positivas • El origen de coordenadas esta en (0,0)

3

Figure 2: Tanque

5

SINTAXIS Y COMANDOS PARA EL ROBOT

Cada robot se programa en lenguaje Java, la clase que representa al robot debe implementar la clase robot y debe de importar el paquete robocode.* • run():La clase robot de la que heredamos implementa la clase Runnable, por lo que se debe implementar el m´todo run():Este m´todo se estar´ e e a ejecutando durante toda la vida del robot. • Cada robot es un thread de java, que responde ante distintos eventos.

4

5.1

METODOS DE LA CLASE ROBOT

• Void ahead(double distance): Mueve el robot hacia delante con la distancia medida en p´ ıxeles • Void back(double distance): Se mueve hacia atr´s cierta distancia medida a en p´ ıxeles • Void doNothing(): Ese turno no realiza acci´n, salta ese turno. o • Void fire(double power): Dispara un proyectil • Bullet fireBullet(double power): Dispara un proyectil • double getBattleFieldHeight(): Devuelve la altura del campo de batalla • double getBattleFieldWidth(): Devuelve el ancho • double getEnergy(): Devuelve la energ´ actual del robot ıa • double getGunHeading(): Devuelve la orientaci´n del arma en grados, o relativo a la posici´n del tanque o • double getHeading(): Devuelve la orientaci´n del tanque en grados o • int getOthers(): Retorna la cantidad de oponentes que hay en el campo de batalla • int getNumRounds(): Devuelve la cantidad de rondas que se pelearan. • double getRadarHeading(): Devuelve la orientaci´n del radar en grados o • int getRoundNum(): Retorna el round actual • long getTime(): Devuelve el tiempo de juego actual en el round, que es igual al turno actual • double getVelocity(): Devuelve la velocidad del robot medida en p´ ıxeles/turno • double getWidth(): Devuelve el ancho del robot medida en pixeles • double getX(): Devuelve la posici´n en el eje x del robot, seg´n el eje de o u robocode. • double getY(): Devuelve la posici´n en el eje x del robot, o • void setAdjustGunForRobotTurn(boolean independent): Establece que el arma gire independientemente del giro del tanque • void setAdjustRadarForGunTurn(boolean independent): Establece que el radar gire independientemente del giro del arma • void setAdjustRadarForRobotTurn(boolean independent): Establece que el radar gire independientemente del giro del cuerpo del tanque 5

5.2

MOVIMIENTOS DEL ROBOT:

Metodos que cambian la direcci´n y desplazamiento del robot: o • turnRight(double degree) • turnLeft(double degree) • ahead(double distance) • back(double distance) • turnGunRight(double degree) • turnGunLeft(double degree) • turnRadarRight(double degree) • turnRadarLeft(double degree) • setAdjustGunForRobotTurn(boolean flag) • setAdjustRadarForRobotTurn(boolean flag) • setAdjustRadarForGunTurn(boolean flag)

5.3

OBTENCION DE INFORMACION:

Metodos para obtener informaci´n: o • getX() • getY() • getHeading() • getGunHeading() • getRadarHeading() • getBattleFieldWidth() • getBattleFieldHeight()

5.4

EVENTOS:

• ScannedRobotEvent: se dispara cuando el radar detecta un robot a su paso por una zona angular. • BulletHitEvent: se lanza cuando nuestro robot alcanza con un disparo a uno de los enemigos. • HitRobotEvent: se lanza cuando nuestro robot colisiona con un robot enemigo. 6

• HitWallEvent: se dispara cuando el robot choca contra un muro de los que limitan el campo de batalla. • HitByBulletEvent: se lanza cuando nuestro robot es alcanzado por un disparo. • Clase ScannedRobotEvent: • public double getBearing(): Devuelve el ´ngulo (en grados) del enemigo a en relaci´n al ´ngulo que apunta tu tanque/robot. Devuelve valores entre o a -180o a 180o • public double getDistance(): Devuelve la distancia al enemigo. Clase BulletHitEvent: • public double getEnergy(): Devuelve la energ´ restante del adversario ıa descontada. Clase HitRobotEvent: • public double getBearing(): Devuelve el ´ngulo (en grados) del enemigo a contra el que se ha chocado en relaci´n al ´ngulo que apunta tu tanque/robot. o a • public double getEnergy(): Devuelve la energ´ del enemigo tras la colıa isi´n. o Clase HitWallEvent: • public double getBearing(): Devuelve el ´ngulo (en grados) del obst´culo a a con el que se colisionaen relaci´n al ´ngulo que apunta el tanque/robot. o a Clase HitByBulletEvent: • public double getBearing(): Devuelve el ´ngulo (en grados) del enemigo a en relaci´n al ´ngulo que apunta EL tanque/robot. o a

7

6
6.1

EJEMPLO: Creaci´n de un Robot o
INSTALACION DE ROBOCODE:
• Descargar robocode de: http://robocode.sourceforge.net/ • Para iniciar la instalaci´n, ejecutar desde consola: o java - jar robocode-1.7.1.3-Beta-setup.jar

6.2

CREACION DE UN ROBOT:

• Ejecutar robocode

• En el men´ ROBOT, seleccionar EDITOR. u

8

• En la ventana de ROBOT EDITOR, seleccionar NEW, Robot. • Ingresar el nombre del robot y los datos para generar la clase de java. • Se generara autom´ticamente el c´digo para un robot b´sico, en este se a o a deber´ de programar los movimientos, acciones, eventos, etc del robot. a

• Seleccionar en el men´ Compilar para comprobar el c´digo del robot. u o

9

6.3

CREACION DE UNA BATALLA:

• En el men´ de Robocode, seleccionar BATTLE, New para un nuevo comu bate.

• Agregar los robots para la batalle y configurar la arena.

10

6.4

ARENA:

Vista de la Arena de Batalla:

Resultados de la Batalla:

7

Conclusiones
1. Robocode es un entorno gratuito de simulaci´n de guerras de tanques o robots, desarrollado por un ex programador de IBM, Mathew Nelson. 2. Esta escrito en lenguaje java y es open source. 3. El simulador proporciona un API con una serie de objetos y m´todos para e programar el tanque. 4. Los tanques rob´ticos son programados en java y posteriormente son caro gados en un simulador donde se desarrolla el combate. 5. Existen dos modos de juego: batalla individual y batalla en equipo.

11

6. Cada robot se programa en lenguaje Java, la clase debe implementar la clase robot y debe de importar el paquete robocode.* 7. La clase robot de la que heredamos implementa la clase Runnable, por lo que se debe implementar el m´todo run(). e

8

Bibliograf´ ıa
[1 ]: ”Rock ’em, sock ’em Robocode!”. By Sing Li (westmakaha@yahoo.com). [2 ]: ”http://www.it.uc3m.es/jvillena/” By Julio Villena Rom´n. a [3 ]: ”Robocode: un juego para aprender”. By R. Espinola. [4 ]: ”Robocode Argentina” By Robocode Argentina. [5 ]: http://dailaguna.blogspot.com/2008/01/robocode-aprende-java-jugando.html

12