200412861_FASE#1

12
ROBOCODE - FASE#1 Carlos Andres Barrios Gonzalez [email protected] 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´ etodos para programar el tanque. El jugador debe elegir la mejor estrategia para controlar el tanque y vencer a los dem´ as robots en la arena de combate. 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

description

Fase#1IA-Junio2009

Transcript of 200412861_FASE#1

Page 1: 200412861_FASE#1

ROBOCODE - FASE#1

Carlos Andres Barrios [email protected]

Ing. Huber Flores

Guatemala, GuatemalaUniversidad 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 IBMAlphaworks. Esta escrito en lenguaje java y es open source. El simuladorproporciona un API con una serie de objetos y metodos para programar eltanque. El jugador debe elegir la mejor estrategia para controlar el tanque yvencer a los demas robots en la arena de combate.

2 Abstract

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

1

Page 2: 200412861_FASE#1

3 ROBOCODE - Introduccion

Build the best. Destroy the rest

Robocode es un entorno gratuito de simulacion de guerras de tanques robots,desarrollado por un ex programador de IBM, Mathew Nelson, fanatico de Javay los robots en Alphaworks de IBM. Los tanques roboticos son programadosen java y posteriormente son cargados en un simulador donde se desarrolla elcombate.

Existen dos modos de juego:

• Batalla individual: en el que cada robot lucha contra todos los demas.

• Batalla en equipo: en el que un ejercito de robots lucha por la victoria demodo colaborativo.

El simulador proporciona un API con una serie de objetos y metodos paraprogramar el tanque. El jugador debe elegir la mejor estrategia para controlar eltanque con desplazamientos, giros, control de radar, control de canon y disparo.Ademas debe controlar todos los eventos que se producen como ser impactado,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 canon se calienta al disparar y debe enfriarse antes del proximo disparo.

• Chocar contra los obstaculos debilita.

ASPECTOS NO REALISTAS:

• Los sensores y el resto de los componentes son silenciosos.

2

Page 3: 200412861_FASE#1

• Los sensores detectan velocidad, posicion, orientacion y energıa restante.

• Los combates tienen lugar en un entorno plano 2D y cerrado.

4 ANATOMIA DE ROBOCODE

4.1 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

Page 4: 200412861_FASE#1

Figure 2: Tanque

5 SINTAXIS Y COMANDOS PARA EL ROBOT

Cada robot se programa en lenguaje Java, la clase que representa al robot debeimplementar 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 metodo run():Este metodo se estaraejecutando durante toda la vida del robot.

• Cada robot es un thread de java, que responde ante distintos eventos.

4

Page 5: 200412861_FASE#1

5.1 METODOS DE LA CLASE ROBOT

• Void ahead(double distance): Mueve el robot hacia delante con la distanciamedida en pıxeles

• Void back(double distance): Se mueve hacia atras cierta distancia medidaen pıxeles

• Void doNothing(): Ese turno no realiza accion, salta ese turno.

• 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ıa actual del robot

• double getGunHeading(): Devuelve la orientacion del arma en grados,relativo a la posicion del tanque

• double getHeading(): Devuelve la orientacion del tanque en grados

• int getOthers(): Retorna la cantidad de oponentes que hay en el campode batalla

• int getNumRounds(): Devuelve la cantidad de rondas que se pelearan.

• double getRadarHeading(): Devuelve la orientacion del radar en grados

• int getRoundNum(): Retorna el round actual

• long getTime(): Devuelve el tiempo de juego actual en el round, que esigual al turno actual

• double getVelocity(): Devuelve la velocidad del robot medida en pıxe-les/turno

• double getWidth(): Devuelve el ancho del robot medida en pixeles

• double getX(): Devuelve la posicion en el eje x del robot, segun el eje derobocode.

• double getY(): Devuelve la posicion en el eje x del robot,

• void setAdjustGunForRobotTurn(boolean independent): Establece que elarma gire independientemente del giro del tanque

• void setAdjustRadarForGunTurn(boolean independent): Establece que elradar gire independientemente del giro del arma

• void setAdjustRadarForRobotTurn(boolean independent): Establece queel radar gire independientemente del giro del cuerpo del tanque

5

Page 6: 200412861_FASE#1

5.2 MOVIMIENTOS DEL ROBOT:

Metodos que cambian la direccion y desplazamiento del robot:

• 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 informacion:

• getX()

• getY()

• getHeading()

• getGunHeading()

• getRadarHeading()

• getBattleFieldWidth()

• getBattleFieldHeight()

5.4 EVENTOS:

• ScannedRobotEvent: se dispara cuando el radar detecta un robot a supaso por una zona angular.

• BulletHitEvent: se lanza cuando nuestro robot alcanza con un disparo auno de los enemigos.

• HitRobotEvent: se lanza cuando nuestro robot colisiona con un robotenemigo.

6

Page 7: 200412861_FASE#1

• HitWallEvent: se dispara cuando el robot choca contra un muro de losque limitan el campo de batalla.

• HitByBulletEvent: se lanza cuando nuestro robot es alcanzado por undisparo.

• Clase ScannedRobotEvent:

• public double getBearing(): Devuelve el angulo (en grados) del enemigoen relacion al angulo que apunta tu tanque/robot. Devuelve valores entre-180o a 180o

• public double getDistance(): Devuelve la distancia al enemigo.

Clase BulletHitEvent:

• public double getEnergy(): Devuelve la energıa restante del adversariodescontada.

Clase HitRobotEvent:

• public double getBearing(): Devuelve el angulo (en grados) del enemigocontra el que se ha chocado en relacion al angulo que apunta tu tanque/robot.

• public double getEnergy(): Devuelve la energıa del enemigo tras la col-ision.

Clase HitWallEvent:

• public double getBearing(): Devuelve el angulo (en grados) del obstaculocon el que se colisionaen relacion al angulo que apunta el tanque/robot.

Clase HitByBulletEvent:

• public double getBearing(): Devuelve el angulo (en grados) del enemigoen relacion al angulo que apunta EL tanque/robot.

7

Page 8: 200412861_FASE#1

6 EJEMPLO: Creacion de un Robot

6.1 INSTALACION DE ROBOCODE:

• Descargar robocode de:

http://robocode.sourceforge.net/

• Para iniciar la instalacion, ejecutar desde consola:

java - jar robocode-1.7.1.3-Beta-setup.jar

6.2 CREACION DE UN ROBOT:

• Ejecutar robocode

• En el menu ROBOT, seleccionar EDITOR.

8

Page 9: 200412861_FASE#1

• 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 automaticamente el codigo para un robot basico, en este sedebera de programar los movimientos, acciones, eventos, etc del robot.

• Seleccionar en el menu Compilar para comprobar el codigo del robot.

9

Page 10: 200412861_FASE#1

6.3 CREACION DE UNA BATALLA:

• En el menu de Robocode, seleccionar BATTLE, New para un nuevo com-bate.

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

10

Page 11: 200412861_FASE#1

6.4 ARENA:

Vista de la Arena de Batalla:

Resultados de la Batalla:

7 Conclusiones

1. Robocode es un entorno gratuito de simulacion de guerras de tanquesrobots, 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 metodos paraprogramar el tanque.

4. Los tanques roboticos son programados en java y posteriormente son car-gados en un simulador donde se desarrolla el combate.

5. Existen dos modos de juego: batalla individual y batalla en equipo.

11

Page 12: 200412861_FASE#1

6. Cada robot se programa en lenguaje Java, la clase debe implementar laclase robot y debe de importar el paquete robocode.*

7. La clase robot de la que heredamos implementa la clase Runnable, por loque se debe implementar el metodo run().

8 Bibliografıa

[1 ]: ”Rock ’em, sock ’em Robocode!”. By Sing Li ([email protected]).

[2 ]: ”http://www.it.uc3m.es/jvillena/” By Julio Villena Roman.

[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