INFO   Main   Docs   FAQ   News   Tutorials   Interviews   Forums   Mailing List
ONLINE    BATTLE ARENA   Accounts   Uploads   Downloads   Hall of Fame
|   No-Limits Challenge: JROBOTS FOREVER! (January 6th 2010)   ||   October-December Challenge: The End! (December 26th 2009)   ||   October-December Challenge: JROBOTS 2K9 Q4! (October 3rd 2009)   ||   September-October Challenge: JROBOTS 2K9 Q3! (July 4th 2009)   ||   April-June Challenge: JROBOTS 2K9 Q2! (March 28th 2009)   ||   Old News  |

MAKE a DONATION

GAME

Main

BATTLE ARENA
Hall of Fame

Downloads

Accounts
Uploads
 
INFO

News

Docs
F.A.Q.
Tutorials
Interviews

Forums
Mailing List
Contact leo
 
Visit the APOCALYX BLOG!

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:

Arena
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

Combates
Hay tres tipos de juego:
  1. Single Match: Dos robots enemigos combatiendo uno contra otro.
  2. 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.
  3. 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

Motor
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

Cañón
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

Misiles
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

Radar
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:

  • La clase Java que contiene los algoritmos de tu robot deben tener un nombre que comience con dos underscores, y debe terminar con uno (ej: "__MiRobot_").
  • La clase debe ser derivada de la clase "JJRobot". Por ejemplo:
    public class MiRobot extends JJRobot {
      // cuerpo
    }
    
  • Debes poner en la clase al menos un método llamado void main(), que es el método que se ejecuta antes de la creación del robot.
  • Por razones de seguridad, no puedes usar ninguna API de Java.
  • El archivo con la clase debe tener un tamaño menor a 20 Kb (20480 bytes).

Indice

Funciones disponibles

Puedes manejar el cañón, el motor y el radar usando estos métodos:

int cannon(int angulo, int rango)
  • 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

int damage()
  • 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

void drive(int angulo, int velocidad)
  • 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

int scan(int angulo, int resolucion)
  • 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

int loc_x()
  • 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

int loc_y()
  • 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

int speed()
  • La función retorna la velocidad del robot medida en porcentaje: 0 significa 0 m/s, 100 significa 30 m/s.

Indice

double time()
  • 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

int id()
  • 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

Funciones Matemáticas
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

For more information
send an email to
TETRACTYS Software
Project Hosted by SourceForge Copyright © 1999-2009 Leonardo Boselli
All Rights Reserved. Legal Terms.