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]


Che cosa sono i Jrobots?

Questi due paragrafi descrivono le principali caratteristiche del gioco.

Introduzione

Jrobots è un clone di Crobots, un vecchio gioco DOS scritto da Tom Poindexter nel 1985. Alcuni robot combattono in un'arena, sparando missili ed evitando i proiettili dei nemici. Questo gioco sembra piuttosto coinvolgente, ma non è interattivo. Per prima cosa devi sviluppare gli algoritmi dei tuoi robot in un linguaggio di programmazione particolare, poi devi inviare il robot nell'arena per farlo combattere con i robot sviluppati da altri. Durante i combattimenti non puoi aiutarlo, devi insegnargli tutte le tecniche di combattimento prima che l'incontro inizi. Per vedere alcuni robot in combattimento, vai alla pagina Match Applet.

Indice

I robot ed il campo di battaglia

I seguenti paragrafi descrivono i robot e le caratteristiche del campo di battaglia. Per sviluppare i tuoi Jrobots devi conoscere bene questi dati.

L'arena
Il campo di battaglia è un quadrato di lato 1 Km. Quando un robot urta le pareti, "guadagna" 2 punti di danni su un totale di 100 ed il motore si arresta. Non è la cosa peggiore che possa capitare, ma non è neppure la migliore, quindi meglio evitare gli urti con le pareti. Quando un robot raggiunge i 100 punti, viene disabilitato.

Indice

Incontri
Ci sono tre modalità di gioco:
  1. Single Match: due robot combattono uno contro l'altro.
  2. Double Match: due coppie di robot combattono una contro l'altra. Questo tipo di gioco è più difficile del precedente, perché non è facile distinguere l'amico dai nemici.
  3. Team Match: quattro squadre di otto robot ciascuna combattono l'una contro le altre.
Tutti gli incontri durano 180 secondi. Vince il robot o la squadra che disabilita tutti gli altri robot presenti nell'arena.

Indice

Il motore
I robot hanno un motore e possono muoversi ovunque. La velocità massima dei robot è 30 m/s, cioè 100 Km/h, e l'accelerazione è 5 m/s2. Questo significa che un robot necessita di sei secondi per raggiungere la velocià massima.
Quando il motore ha lo 0% di potenza, il robot si ferma con una decelerazione di 5 m/s2, mentre il 100% di potenza fornisce la velocità massima. Quando un robot urta le pareti, il motore scende allo 0% di potenza e la velocità si riduce a zero immediatamente.

Indice

Il cannone
I robot hanno un cannone che spara missili. Il robot può puntare il cannone in qualsiasi direzione e può sparare tutti i missili che vuole. C'è solo il limite del tempo di ricaricamento di un secondo.

Indice

I missili
I missili possono raggiungere una distanza di 700 metri ed una velocità di 300 m/s, così ci vogliono 2 secondi ed un terzo per raggiungere la distanza massima. La velocità del missile non dipende da quella del robot. Quando un missile esplode, danneggia tutti i robot nelle vicinanze (ricorda che 100 punti di danni disabilitano i robot). I punti dipendono dalla distanza dell'esplosione dal robot. La tabella è questa
  • 5 metri 10 punti
  • 20 metri 5 punti
  • 40 metri 3 punti
Se un robot spara un missile ad una distanza di 5 metri, si procura da solo 10 punti di danni, quindi è meglio sparare da una distanza di sicurezza.

Indice

Lo scanner
Il robot ha uno scanner che gli permette di trovare gli altri robot. Perlustra il campo di battaglia con una apertura da 1 a 20 gradi. Più piccolo è l'angolo, migliore è la risoluzione. Con lo scanning dell'arena, il robot riceve la distanza del robot più vicino (che può essere amico o nemico) o zero se nessun robot viene individuato.

Indice

Come posso sviluppare un Jrobot?

Questa sezione descrive la procedura per programmare i propri robot.

Il linguaggio di programmazione (Java)

Crobots usava il C come linguaggio di programmazione. Jrobots usa Java.
Per programmare i robot bisogna scrivere delle classi Java, ma non è poi così difficile: hai solo bisogno di un compilatore Java (è gratuito) e Java ha una sintassi molto simile a quella del C. Se hai già sviluppato un Crobot, la conversione a Jrobot è praticamente immediata.
Per vedere alcuni esempi vai alla pagina dei Downloads.

Indice

Regole e limitazioni

Queste sono alcune regole che devi conoscere:

  • Le classi Java che contengono gli algoritmi del tuo robot, devono avere un nome che inizia con due underscore e termina con uno (ad esempio "__MyRobot_").
  • La classe deve essere derivata dalla classe "JJRobot". Per esempio:
    public class MyRobot extends JJRobot {
      // body
    }
    
  • Nella classe deve essere presente un metodo void main() che è il metodo che viene eseguito per primo quando il robot viene creato.
  • Per ragioni di sicurezza, non è possibile usare nessuna delle API Java.
  • Il file della classe deve occupare al massimo 20 Kb (20480 bytes).

Indice

Funzioni disponibili

Per utilizzare il cannone, il motore e lo scanner, sono disponibili alcuni metodi predefiniti.

int cannon(int degrees, int range)
  • degrees è la direzione in gradi dello sparo (gli angoli partono dalle 3 dell'orologio ed aumentano in senso antiorario).
  • range è la distanza alla quale il missile esplode.
  • returns 1 se il missile è stato sparato, 0 altrimenti (a causa del tempo di ricaricamento).

Indice

int damage()
  • returns i danni del robot: da 0 a 99 significa che il robot è ancora vivo, mentre 100 che è disabilitato (il robot non riuscirà mai a leggere questo valore).

Indice

void drive(int degrees, int speed)
  • degrees è la direzione del movimento del robot (gli angoli partono dalle 3 dell'orologio ed aumentano in senso orario). Devi ricordare che i robot possono cambiare la loro direzione solo se la velocità è inferiore al 50% (cioè 15 m/s).
  • speed è la velocità in percentuale che il robot deve raggiungere: 0 significa 0 m/s, mentre 100 corrisponde a 30 m/s.
  • returns niente.

Index

int scan(int degrees, int resolution)
  • degrees è la direzione in gradi dello scanner (gli angoli partono dalle 3 dell'orologio ed aumentano in senso orario).
  • resolution è l'ampiezza dello scanner in gradi (lo scanning inizia dall'angolo degrees-resolution/2 e termina all'angolo degrees+resolution/2).
  • returns la distanza del robot più vicino, oppure zero se nel settore non ne vengono rilevati.

Indice

int loc_x()
  • returns la coordinata X del robot sul campo di battaglia (l'origine è nell'angolo in alto a sinistra e le coordinate crescono verso destra e verso il basso).

Index

int loc_y()
  • returns la coordinata Y del robot sul campo di battaglia (l'origine è nell'angolo in alto a sinistra e le coordinate crescono verso destra e verso il basso).

Indice

int speed()
  • returns la velocità del robot in percentuale: 0 significa 0 m/s, 100 significa 30 m/s.

Indice

double time()
  • returns i secondi trascorsi dall'inizio del combattimento (questa funzione non era inclusa nel Crobots originale. E' disponibile per ottenere una migliore gestione delle temporizzazioni).

Indice

int id()
  • returns il codice identificativo del robot all'interno della squadra. Se ci sono n robot nella squadra, questo codice varia da 0, per il primo robot creato, a n-1, per l'ultimo (questa funzione non era prevista nel Crobots originale. E' disponibile per poter distinguere i robot negli incontri di doppio o a squadre).

Indice

Math
Ci sono diverse funzioni per effettuare calcoli matematici. Ci sono le funzioni originali di Crobots (solo per compatibilità) e versioni avanzate.

Gli originali sono:

  • int rand(int limit) per generare numeri casuali.
  • int sqrt(int value) radice quadrata.
  • int sin(int degrees) funzione seno (il risultato è il seno per 100000).
  • int cos(int degrees) funzione coseno (il risultato è il coseno per 100000).
  • int tan(int degrees) funzione tangente (il risultato è la tangente per 100000).
  • int atan(int value) funzione arcotangente (il valore deve essere 100000 volte quello reale ed il risultato è in gradi).

Quelle avanzate sono:
  • double d_sqrt(double value) radice quadrata.
  • double d_sin(double radians) funzione seno.
  • double d_cos(double radians) funzione coseno.
  • double d_tan(double radians) funzione tangente.
  • double d_atan(double value) funzione arcotangente.
  • double deg2rad(double degrees) per convertire un angolo da gradi a radianti.

Indice

Estensioni

I metodi elencati precedentemente sono di base. Sono disponibili anche alcune utili estensioni già incluse nell'SDK. Per ulteriori dettagli occorre leggere il file extensions.txt.

Come posso inviare il mio Jrobot per sfidare altri robot?

In questa sezione viene descritto il processo di upload.

Scegli un account

Per prima cosa devi ottenere un account. Segui le istruzioni che trovi alla pagina Accounts.

Indice

Upload

Dopo puoi inviare il tuo file. Segui le istruzioni che trovi alla pagina Uploads.

Indice

Come posso convertire il mio vecchio Crobot in un nuovo Jrobot?

Questa sezione descrive il processo di conversione da un Crobot esistente ad un nuovo Jrobot.

Conversione

La conversione è praticamente immediata. Infatti, la sintassi del C è molto simile a quella di Java. Per vedere i cambiamenti, nel file ZIP Jrobots Java Classes & Docs puoi trovare alcuni robot d'esempio. Sono gli originali Sniper, Counter, Rook and Rabbit convertiti.
I cambiamenti sono semplici. Purtroppo alcuni settaggi possono essere differenti a causa del diverso motore di simulazione utilizzato da Jrobots rispetto a Crobots. Anche le temporizzazioni, che erano realizzate mediante cicli, ora devono essere modificate utilizzando la funzione time(), perché le CPU su cui si svolgono i combattimenti possono avere clock molto diversi.

Mandami un'email per avere maggiori informazioni sul linguaggio e sui metodi di conversione.

Index

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