## 6. Construcción de Arenas (Arena construction)

En el RealTimeBattle, es muy sencillo construir tus propias arenas. El lenguaje consiste unicamente en 11 comandos, y hay basicamente cuatro bloques de construcción: lineas, circulos, circulos_internos y arcos. Esto es asi debido a una razon de rapidez, ya que es muy facil detectar las colisiones en un entorno formado por circulos y lineas. Los circulos y los circulos internos impiden a los robots entrar en un circulo o bien les impiden salir de un circulo, respectivamente. Las lineas y los arcos impiden a los robots el paso, aunque tienes que poner circulos en cada final de linea para crear objectos sólidos. Los comandos `polygon`, `closed_polygon` y `poly_curve` pretenden simplificar este procedimiento.

Todos los angulos se dan por defecto en radianes pero pueden ser cambiados a grados mediante el comando `angle_unit degrees`.

Ten en cuenta que el RealTimeBattle no prueba si el fichero de Arena es correcto, eso se deja enteramente a tu disposición. De todas formas, se producirá algun error si se violan las reglas del lenguaje.

Los ficheros de Arena deben llevar la extension `.arena` y deben ser colocados en el directorio de Arenas para que el RTB los encuentre.

Los argumantos `coeficiente de rebote` y `dureza` determinan el material de los muros. Estos parametros toman valores entre 0 y 1. Muros mas duros supondran un mayor daño a los robots que choquen contra ellos y un mayor coeficiente de rebote producira un rebote mayor en las colisiones.

Es una buena idea estudiarse las Arenas incluidas y aprender de los ejemplos.

## 6.1 Comandos de Arena (Arena commands)

Un comando esta compuesto por el nombre y los argumentos separados por espacios.กก Asegurate que proporcionas el numero correcto de argumentos !!.

En la lista de comandos, los argumentos vinen dados entre corchetes.

scale [value]

  Este valor indica el factor escala, por el cual serán multiplicadas todas las coordenadas. Este es el primer valor que se debe proporcionar, si existe. Por defecto es 1.0.

angle_unit [unit]

  Cambia a la unidad seleccionada, que pueden ser en `grados (degrees)` o `radianes (radians)`. Por defecto viene dado en radianes.

boundary [left] [up] [right] [down]

  Este comando indica los limites de la Arena en la cual estarán los robots, las minas y las cookies. Tambien determina el area visible en la ventana de Arena (arena window). Este comando es requerido y puede ir precedido del comando `scale`.

inner_circle [bounce] [hardness] [center_x] [center_y] [radius]

  Los robots estan limitados al area interior de este circulo.

circle [bounce] [hardness] [center_x] [center_y] [radius]

  Un muro en forma de circulo.

line [bounce] [hardness] [thickness] [start_x] [start_y] [end_x] [end_y]

  Crea una linea. Esta solamente impide al robot cruzarla a lo largo, asi que recuerda poner circulos en los extremos.

arc [bnc] [hardn] [thickn] [center_x] [ctr_y] [inner_radius] [outer_rds] [angle1] [angle2]

  Un arco es un sector de un anillo entre dos angulos.Al igual que la linea, necesita un circulo en los extremos.

polygon [bounce] [hardn] [thickn] [number of vertices] ([center_x] [center_y])...

  Esto creara un numero de circulos conectados mediante lineas.

closed_polygon [bounce] [hardn] [thickn] [number of vertices] ([center_x] [center_y])...

  Igual que `polygon`, pero tanto el primer como el ultimo vértice estan tambien unidos por una linea.

poly_curve [bnc] [hardn] [thickn] [start_x] [start_y] [dir_x] [dir_y] ([command args ...]) ...

  El comando `poly_curve` es el comando mas util de todos. Es usado para construir muros mediante lineas y arcos. En cada paso tienes una posicion y una direccion determindas, que son afectadas por los subcomandos. El ultimo subcomando debera ser `C` o `Q`.

  L [length]

    Dibuja una linea con la longitud dada en la direccion actual.

  T [angle]

    Gira la direccion actual.

  A [angle] [radius]

    Dibuja un arco.

  C

    Finaliza conectando con el punto inicial.

  Q

    Salir.

exclusion_point [position_x] [position_y]

  Cuando la Arena consiste en un numero de areas separadas, tienes que excluir todas menos una insertando puntos de exclusion. Todos los puntos que dibujes en una linea recta hasta un punto de exclusión, sin cruzar ningun muro, seran considerados exteriores a la Arena