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 FAQ

[English] [Italiano] [Español]

"CARGAS"
  1. Para agregar un nuevo robot, necesitas mi programa Java para compilarlo y agregarlo a tus archivos?

  2. Como cargo mi robot luego de hacerle modificaciones? Debo enviar el archivo con el mismo nombre o utilizar un nuevo nombre?

  3. Seguí todas las instrucciones, pero el programa "cargador" me rechaza el robot. Por qué?

  4. Envié un robot al sitio y su nombre aparece en la lista, pero cuando lo selecciono para competir, no aparece en la Arena. Por qué?

DESARROLLO
  1. Por qué la Arena no respeta la convención estándar para el manejo de coordenadas y ángulos?

  2. Como puedo depurar mi robot y ver que está sucediendo dentro del código?

  3. Cuando un robot muere, el simulador no podría invocar el método finalize() sobre ese robot? Lo necesito ya que tengo variables estáticas que se incrementan cuando los robots son creados.


"CARGAS"
  1. P: Para agregar un nuevo robot, necesitas mi programa Java para compilarlo y agregarlo a tus archivos?

    R: No. Puedes compilar y testear tu robot usando el paquete off-line y luego debes cargar el archivo .class en el sitio. Ese archivo es automáticamente reconocido por el applet que ejecuta los torneos.

     

  2. P: Como cargo mi robot luego de hacerle modificaciones? Debo enviar el archivo con el mismo nombre o utilizar un nuevo nombre?

    R: Debes enviar el archivo con el mismo nombre. El archivo anterior es sobrescrito y el nuevo robot hereda los resultados de su predecesor. Si lo cargas con un nuevo nombre, será considerado como un nuevo robot ... que también competirá contra tu versión anterior.

     

  3. P: Seguí todas las instrucciones, pero el programa "cargador" me rechaza el robot. Por qué?

    R: 1º Posibilidad: En el programa que controla tu robot, agregaste un "catch" para manejar una excepción y en el archivo ..class aparece la clase java.lang.Exception. En este caso has quebrado una regla: "No puedes usar las clases de las API de Java en el código de tu robot".

    2º Posibilidad: En el programa que controla tu robot, incluiste la clase java.lang.Math para usar la constante PI. Debes definir la constante PI dentro del código de tu robot.

     

  4. P: Envié un robot al sitio y su nombre aparece en la lista, pero cuando lo selecciono para competir, no aparece en la Arena. Por qué?

    R: 1º Posibilidad: Lamentablemente los robots no pueden usar clases internas. Todos los algoritmos deben estar definidos en una sola clase, y seguramente tu robot usa dos clases MiRobot.class y MiRobot$1.class. Dado que solo puedes definir una clase, MiRobot$1.class fue eliminada de la versión on-line y se produjo una excepción que eliminó tu robot.

DESARROLLO

  1. P: Por qué la Arena no respeta la convención estándar para el manejo de coordenadas y ángulos?

    R: Se usa una convención diferente para acelerar las simulaciones en máquinas lentas, y lograr una simplificación de los cálculos. De todas maneras no es gran problema, ya que los robots no pueden ver dentro del applet, y tu podrías ver la Arena cabeza abajo ;-)

     

  2. P: Como puedo depurar mi robot y ver que está sucediendo dentro del código?

    R: Si usas el JDK y el appletviewer, es realmente simple. Por ejemplo puedes usar este código para imprimir la variable 'a':

    System.out.println("El valor de 'a' es: "+a);

    De esta forma usas una de las clases de Java para imprimir en la ventana de comandos DOS en la que ejecutaste el appletviewer. La interfaz gráfica no será afectada.

    Recuerda que debes remover todas esas líneas cuando envías el robot a la Arena, ya que el programa cargador rechaza los robots que contienen clases Java.

    Si no usas el JDK y sus comandos de línea, sino una herramienta de desarrollo más compleja, la depuración depende de las facilidades que provea esa herramienta.

     

  3. P: Cuando un robot muere, el simulador no podría invocar el método finalize() sobre ese robot? Lo necesito ya que tengo variables estáticas que se incrementan cuando los robots son creados.

    R: Existe un problema de seguridad al usar finalize(). Este método debe ser invocado desde la hebra (thread) principal cuando un robot muere, y de esta manera la hebra (thread) principal le daría el control al robot. Alguien podría colocar un ciclo infinito dentro del finalize() para detener la ejecución y evitar un resultado negativo.

    Para identificar los robots utiliza el método id() en el inicio del main(). Este método devuelve un identificador único de acuerdo al orden de creación de los robots.


Si tienes más preguntas, envía un mail.

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