Jrobots Info
[English] [Italiano] [Español]
Qué es Jrobots?
Los siguientes párrafos
describen el propósito y las principales características del juego.
Introducción
Jrobots es un clone de Crobots, un viejo juego para DOS
escrito por Tom Poindexter en 1985. Hay un conjunto de robots que pelean
en una arena, disparando misiles y tratando de evitar los proyectiles
enemigos. Este juego es muy atrapante e interesante, aunque no es interactivo. Primero
debes desarrollar algoritmos para tu robot en un lenguaje de programación
en particular, y luego debes cargarlo en la Arena para visualizar en forma on-line sus peleas contra otros robots. No lo puedes ayudar, los robots
combaten solos, por lo que tu debes enseñarle las técnicas de combate para
sobrevivir.
Para ver algunos robots combatiendo, puedes ir a: Match Applet
page.
Indice
Los Robots y el Campo de Batalla
Los siguientes párrafos
describen las características de los robots y el campo de batalla. Para
desarrollar tu propio robot debes conocer los siguiente:
El campo de batalla es un cuadrado de
1 Km (1000 metros) de lado. Cuando un robot choca contra las paredes del
cuadrado, recibe 2 puntos de daño sobre un total de 100, y el motor se
detiene. No es lo peor que le puede pasar, pero no es nada bueno, así que
debes evitar las paredes. Cuando un robot alcanza los 100 puntos de daño, es
destruido y pierde el juego.
Indice
Hay tres tipos de juego:
- Single Match: Dos robots enemigos combatiendo uno contra otro.
- Double Match: Dos equipos de dos robots cada uno, combatiendo
uno contra el otro. Este tipo de juego es más difícil que el anterior,
porque no es tan simple distinguir amigos de enemigos.
- Team Match: Cuatro equipos de ocho robots, cada equipo
peleando contra todos los otros.
Todos los combates duran un
máximo de 180 segundos. El robot o el equipo que destruye todos los robots
enemigos de la Arena, gana.
Indice
Los robots tienen un motor y pueden
moverse por cualquier lado del campo de batalla. La velocidad máxima de los
robots es de
30 m/s (metros por segundo), por ej: 100 Km/h, y la aceleración
es de 5 m/s2. Esto significa que un robot necesita seis
segundos para alcanzar la máxima velocidad partiendo de 0.Cuando el motor
está al 0% de potencia, el robot frena con una desaceleración de 5 m/s2,
mientras que que cuando está al 100% de potencia, acelera hasta la máxima
velocidad.
Cuando un robot choca las paredes, el motor cae al 0% de
potencia y la velocidad desciende repentinamente a 0 m/s.
Indice
Los robots tienen un cañón que dispara
misiles. El robot puede apuntar el cañón en cualquier dirección, y puede
disparar todos los misiles que desee, pero tiene un tiempo de recarga de 1
segundo.
Indice
Los misiles tienen un alcance de 700
metros y una velocidad constante de 300 m/s, por lo tanto necesitan 2
1/3 de segundos para alcanzar la distancia máxima. Cuando un misil explota,
daña a todos los robots que están a su alrededor (recordar que un daño del
100% destruye al robot).La cantidad de daño producida depende de la
distancia entre el foco de la explosión y el robot:
- 5 metros 10 puntos de daño
- 20 metros 5 puntos de daño
- 40 metros 3 puntos de daño
Si un robot dispara un
misil dentro de un radio de 5 metros, se producirá a si mismo 10 puntos de
daño, así que es mejor disparar a los enemigos desde lejos.
Indice
Los robots usan un radar para detectar
a los otros robots. El radar puede escanear toda la Arena con una resolución
variable entre 1 y 20 grados. Al escanear el campo de batalla, el robot
recibe la distancia del robot más cercano (amigo o enemigo), o cero si no
hay enemigos en el sector.
Indice
Cómo puedo desarrollar un robot?
Esta sección describe el procedimiento que puede seguir para programar
tu propio robot.
El Lenguaje de Programación (Java)
Crobots usa C como lenguaje de programación. Jrobots usa
Java en su lugar.
Para programar tus robots debes escribir clases y
métodos Java, pero no es tan difícil: solo necesitas un compilador (es gratis) y
Java usa una sintaxis muy parecida al lenguaje C. Si ya has desarrollado un
Crobot, la conversión a Jrobots es bastante directa.
Para ver algunos
ejemplo de codificación puedes ir a Downloads page.
Indice
Reglas y limitaciones
Estas son las reglas que necesitas
conocer:
Indice
Funciones disponibles
Puedes manejar el cañón, el motor y el
radar usando estos métodos:
- angulo es la dirección del disparo medida en grados (los
grados comienzan a las 3:00 y se incrementan en sentido horario).
-
rango es la distancia a la que el misil explotará.
- La función
retorna 1 si el misil se disparó, y 0 si no lo hizo (debido al tiempo de
recarga).
Indice
- La función retorna el porcentaje de daño del robot: si está entre 0
al 99 está vivo, sino está muerto (es decir que ese robot no podría leer
este valor).
Indice
- angulo es la dirección del movimiento del robot (los grados
comienzan a las 3:00 y se incrementan en sentido horario). Debes
recordar que los robots pueden cambiar su dirección sólo si la velocidad
es menor que el 50% (es decir 15 m/s).
- velocidad es la velocidad en porcentaje que el robot debe
alcanzar: 0
significa 0 m/s, 100 significa 30 m/s.
- La función no retorna nada.
Indice
- angulo es la dirección de escaneo del radar (los grados
comienzan a las 3:00 y se incrementan en sentido horario).
- resolucion
es la amplitud del haz medida en grados (es decir que el haz comienza
en angulo-resolucion/2 y finaliza en angulo+resolucion/2).
Su valor debe ser mayor que 0 y menor que 20.
- La función retorna la distancia del robot más cercano encontrado en
dicho sector, o 0 si ningún robot fue encontrado.
Indice
- La función retorna la coordenada X del robot en el campo de batalla (el
origen está en la esquina superior izquierda y las coordenadas crecen
hacia la derecha).
Indice
- La función retorna la coordenada Y del robot en el campo de batalla (el
origen está en la esquina superior izquierda y las coordenadas crecen
hacia abajo).
Indice
- La función retorna la velocidad del robot medida en porcentaje: 0
significa
0 m/s, 100 significa 30 m/s.
Indice
- La función retorna el tiempo transcurrido desde el inicio del
combate medido en segundos
(Esta función no estaba incluida en el juego Crobots original.
Está disponible para obtener mejor control del tiempo).
Indice
- La función retorna un número único de identificación del robot y es
útil en los juegos de equipo. Si hay n robots en el equipo, este
número puede ir desde 0 (para el primer robot creado) hasta n-1,
que representa al último creado
(Esta función no estaba incluida en el juego Crobots original.
Está disponible para distinguir los robots en los modos Team y Double).
Indice
Dado que no se puede usar
la clase java.lang.Math, hay varias funciones para realizar cálculos
matemáticos incluidas. Están las funciones originales de Crobots (por
compatibilidad), y versiones más avanzadas también.Las originales eran:
- int rand(int limite) para obtener números enteros aleatorios.
- int sqrt(int valor) raíz cuadrada.
- int sin(int angulo) función seno (el resultado es el seno
multiplicado por 100000).
- int cos(int angulo) función coseno (el resultado es el
coseno multiplicado por 100000).
- int tan(int angulo) función tangente (el resultado es
la tangente multiplicada por 100000).
- int atan(int valor) función arcotangente (valor, debe ser el
valor real multiplicado por 100000 para que la función devuelva un
ángulo en grados).
Las avanzadas son:
- double d_sqrt(double valor) raíz cuadrada.
- double d_sin(double radianes) seno.
- double d_cos(double radianes) coseno.
- double d_tan(double radianes) tangente.
- double d_atan(double valor) arcotangente.
- double deg2rad(double angulo) para convertir grados a
radianes.
Indice
Extensiones a las funciones básicas
Los métodos anteriores corresponden a los funciones básicas
disponibles. Existen un conjunto de extensiones incluidas en el SDK que
pueden ser leídas en el
archivo de
extensiones.
Indice
Cómo puedo enviar mi Jrobot para
combatir con otros robots?
Esta sección describe el proceso de "carga" de un Jrobots.
Apertura de cuenta
Antes que
nada debes tener una cuenta abierta. Sigue las instrucciones que encuentres
en la página Accounts.
Indice
Carga
Luego de abrir la cuenta puedes cargar el archivo. Sigue las
instrucciones de la página
Uploads.
Indice
Cómo
puedo convertir mi viejo Crobot en un nuevo Jrobot?
Esta sección describe como convertir un robot programado para Crobot en
uno para Jrobot.
Conversión
La conversión es bastante
directa. De hecho, la sintaxis de C es similar a la sintaxis de Java. Para
ver los cambios, puedes encontrar en el archivo comprimido Jrobots Java
Classes & Docs algunos robots de ejemplo. Ellos son los robots
originales
Sniper, Counter, Rook y Rabbit convertidos a
Jrobots.
Los cambios son simples. Sin embargo algunos características
pueden ser diferentes, porque Jrobots usa otro motor de simulación
diferente al usado por Crobots.
Los temporizados que fueron originalmente realizados a través de ciclos, ahora
deben usar la función
time() porque el reloj de las CPU donde ejecutan los combates
pueden ser muy diferentes.
Envíenos un email
si necesita más información sobre el lenguaje Java o la conversión del
código C.
Indice
Apéndices
En las siguientes secciones se describen algunos aspectos del juego no
relacionados directamente con el desarrollo de los Jrobots, como ser el
algoritmo utilizado para seleccionar los enemigos durante un juego y el
algoritmo para generar el tiempo virtual en el que se desarrollan los
combates.
Apéndice A - La regla de selección de los oponentes
Apéndice B - El generador de tiempo virtual
Indice