Está en la página 1de 12

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
tanque. El jugador debe elegir la mejor estrategia para controlar el tanque y
vencer a los demás 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
3 ROBOCODE - Introducción

Build the best. Destroy the rest

Robocode es un entorno gratuito de simulación de guerras de tanques robots,


desarrollado por un ex programador de IBM, Mathew Nelson, fanático de Java
y los robots en Alphaworks de IBM. Los tanques robóticos son programados
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.
• Batalla en equipo: en el que un ejército de robots lucha por la victoria de
modo colaborativo.
El simulador proporciona un API con una serie de objetos y métodos para
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.
Además 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 cañón se calienta al disparar y debe enfriarse antes del próximo disparo.
• Chocar contra los obstáculos debilita.
ASPECTOS NO REALISTAS:
• Los sensores y el resto de los componentes son silenciosos.

2
• Los sensores detectan velocidad, posición, orientación 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
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á
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
en pı́xeles
• Void doNothing(): Ese turno no realiza acción, 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 orientación del arma en grados,
relativo a la posición del tanque
• double getHeading(): Devuelve la orientación del tanque en grados
• 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
• 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ı́xe-
les/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
robocode.
• double getY(): Devuelve la posición en el eje x del robot,
• 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:
• 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:
• 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
en relación al ángulo 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 adversario


descontada.

Clase HitRobotEvent:
• public double getBearing(): Devuelve el ángulo (en grados) del enemigo
contra el que se ha chocado en relación al ángulo que apunta tu tanque/robot.
• public double getEnergy(): Devuelve la energı́a del enemigo tras la col-
isión.
Clase HitWallEvent:
• public double getBearing(): Devuelve el ángulo (en grados) del obstáculo
con el que se colisionaen relación al ángulo que apunta el tanque/robot.
Clase HitByBulletEvent:
• public double getBearing(): Devuelve el ángulo (en grados) del enemigo
en relación al ángulo que apunta EL tanque/robot.

7
6 EJEMPLO: Creación de un Robot
6.1 INSTALACION DE ROBOCODE:
• Descargar robocode de:

http://robocode.sourceforge.net/

• Para iniciar la instalación, ejecutar desde consola:

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

6.2 CREACION DE UN ROBOT:


• Ejecutar robocode

• En el menú ROBOT, seleccionar EDITOR.

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
deberá de programar los movimientos, acciones, eventos, etc del robot.

• Seleccionar en el menú Compilar para comprobar el código del robot.

9
6.3 CREACION DE UNA BATALLA:
• En el menú de Robocode, seleccionar BATTLE, New para un nuevo com-
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
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
programar el tanque.
4. Los tanques robóticos 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
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().

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.
[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

También podría gustarte