Next Previous Contents

3. Estructura

En esta sección se describe la estructura del programa, como se mueven los robots, disparar y controlar el radar, cuando se otorgan puntos y como se constituye un torneo.

3.1 Movimiento del robot

El robot se comporta como un vehículo con ruedas. Rueda hacia adelante con un pequeño rozamiento de giro y se desliza lateralmente con una fricción de deslizamiento mucho mayor. El tercer efecto de desaceleración es la resistencia del aire, la cual se aplica en dirección opuesta a la velocidad del robot y aumenta con la velocidad.

Existen tres maneras de variar el movimiento del robot: acelerar, rotar y frenar.

La aceleración se utiliza para incrementar la velocidad del robot en la dirección frontal. No es posible controlar la velocidad directamente, y la aceleración es el único modo de poner el robot en movimiento.

Al rotar el robot puedes hacer que este gire. Ten en cuenta que la rotación no afecta directamente a la dirección del movimiento, solo a la dirección frontal del robot. La fricción de deslizamiento, junto con la aceleración, llevarán eventualmente a cabo el giro en sí del robot.

El frenado incrementa la fricción de giro hasta un valor máximo. Este se da cuando las ruedas están bloqueadas y el robot se desliza en vez de rodar. No olvides liberar el freno cuando quieras aumentar la velocidad otra vez.

3.2 Energía

La salud del robot se mide por su energía. Existen varias maneras de que un robot pierda energía, ya que puede:

Solo hay una posibilidad, sin embargo, de ganar energía: comiendo una galleta.

3.3 El radar

El principal método para obtener información del entorno es a través del radar. Cada vez que el robot es actualizado recibirá un mensaje de radar, con información sobre el objeto más cercano en la dirección actual del radar. A saber, la distancia y el tipo de objeto. Si se trata de un robot, el nivel de energía de ese robot será revelado también.

Dado que la información del radar es prácticamente todo lo que el robot conocerá acerca del entorno, es crucial hacer uso de ella del mejor modo posible. También es importante maniobrar el radar bien, para que este de información útil.

3.4 Posición de los robots

A partir de la versión 1.0.5 de RTB es posible obtener la posición de los robots más directamente. En lugar de tener que analizar el entorno con el radar y averiguar la posición a partir de los datos, RTB puede configurarse para enviar las coordenadas del robot. Este aspecto es controlado a través de la opción Send robot coordinates.

3.5 Disparo

Disparar es el principal método para eliminar otros robots. En RealTimeBattle un disparo se desplaza con velocidad constante, calculada como la suma de la velocidad del robot y la velocidad del disparo en la dirección hacia donde apunta el cañón. El disparo se moverá hasta que choque contra un objeto.

Cuando se realiza un disparo se le da una energía, la cual determina los daños que otros robots sufrirán cuando reciban el impacto. La cantidad de energía está, no obstante, limitada; la energía mínima prohíbe disparos de muy baja energía, por ejemplo para eliminar minas. La energía máxima está restringida por la cantidad de energía potencial de disparo del robot, la cual aumenta conforme pasa el tiempo.

Disparar no está, pese a todo, libre de riesgo, dado que un robot que dispare perderá una cantidad de energía proporcional a la energía del disparo.

Si una galleta o mina recibe un disparo, es destruida, independientemente de la energía del disparo. En consecuencia deberías utilizar una cantidad mínima de energía al disparar contra minas.

Los disparos que choquen entre sí no serán destruidos inmediatamente, sino que sus velocidades y energías quedarán superpuestas, de modo que si dos disparos que chocan viajasen en la misma dirección, sus energías se sumarían y, en caso de que chocasen de frente, sus energías se cancelarían mutuamente.

3.6 Colisiones

Los robots son objetos frágiles, que quedan dañados al chocar con muros y otros robots. Al colisionar, los robots actúan como bolas que rebotan, con tres factores que influencian su comportamiento: el coeficiente de rebote, el coeficiente de dureza y el coeficiente de protección. En la parte delantera, los robots están hechos de un material diferente, normalmente más duro y que protege más. Este hecho puede usarse para embestir a otros robots, haciendo más daño del que se recibe.

3.7 Galletas y minas

Las galletas y las minas son esencialmente objetos iguales, con la única diferencia de que los robots ganarán energía al recoger galletas y perderán energía con las minas. Estos objetos se reparten aleatoriamente por la arena durante el juego. Su energía y frecuencia puede ser controlada con las correspondientes opciones.

3.8 Tiempo

Como el nombre del programa indica, la referencia de tiempo usada es el tiempo real. Depende por completo de los robots el responder lo bastante rápido a los eventos en el juego. El juego progresa mediante llamadas a la función de actualización a intervalos regulares. Entre estos, los robots han de compartir el tiempo de CPU restante. Para evitar que los robots consuman demasiados recursos del procesador, su tiempo de proceso está limitado en el modo de competición. Las opciones correspondientes dan más detalles al respecto.

La ejecución en tiempo real puede, no obstante, ser violada bajo ciertas circunstancias. Puedes acelerar o retrasar la velocidad del juego cambiando la opción de la escala de tiempo, y existe un método que previene la ruptura del juego cuando la carga del sistema es demasiado alta. Si el tiempo entre dos actualizaciones es mayor que el máximo paso de tiempo, el juego se retardará consecuentemente.

3.9 Un juego

Al comienzo de un juego, los robots reciben una posición aleatoria en la arena, con orientación asimismo aleatoria. El radar y el cañón apuntan ambos hacia delante y la energía potencial de disparo está a cero. El objetivo de los robots es sobrevivir tanto tiempo como sea posible y, al mismo tiempo, destruir a los demás robots. Un robot obtendrá un punto por cada robot enemigo al que sobreviva. Un punto extra es, sin embargo, otorgado a todos los robots participantes. Los robots que mueran al mismo tiempo compartirán los puntos equitativamente (o en otras palabras, recibirán medio punto por cada uno de los demás que muera al mismo tiempo).

Un juego termina si el número de robots supervivientes es menor que dos, o el tiempo de juego se ha agotado.

3.10 Una secuencia

Una secuencia es una serie de juegos, donde los mismos robots luchan. Al principio de una secuencia los procesos de los robots son lanzados. El número de robots en una secuencia está limitado a 120, debido al límite de 256 descriptores de fichero en Linux. Por cada robot se abren dos tuberías como canales de comunicación entre este y RealTimeBattle.

En consecuencia un cierto número de juegos son jugados, y finalmente se matan los procesos de los robots.

3.11 Un torneo

Un torneo es una colección de secuencias.

El número de robots en un torneo es (teóricamente) ilimitado.

Cualquier número de secuencias está permitido, pero para hacer que un torneo sea justo, deberías elegir un número de secuencias tal que todos los robots jueguen el mismo número de combates (por ejemplo, #secuencias = #robots por juego / MCD(#robots por juego, #robots en el torneo)).


Next Previous Contents