CROBOTS 64bit        

Per la comprensione di questo paragrafo occorre conoscere la base della teoria di Crobots, cosa facilmente reperibile su internet...
 
CPU & Sintassi
Come molti sanno il glorioso Crobots di Tom Poindexter si basa su una CPU a 32 bit che tratta solo interi.
La CPU di Crobots64 funziona a 64 bit e può lavorare con interi 64bit, numeri in virgola mobile 64bit (double) e stringhe di caratteri (puntatori).
A differenza di molti cloni, e dello stesso Crobots, Crobots64 è scritto interamente in C++ e comprende tutto: dal compilatore alla macchina virtuale;
questo significa che tutto è ottimizzato e perfettamente omogeneo, nonchè controllabile e modificabile nei minimi dettagli.
Il successo di Crobots è decretato dalla semplicità del suo utilizzo, non occorrono compilatori esterni, librerie, o altre diavolerie del genere....,
il numero di funzioni a disposizione è sufficente, così come lo è il subset del linguaggio C usato e il limite imposto delle 1000 istruzioni macchina.
 
Crobots64 a partire dalla versione 1.3 è compatibile al 100% con Crobots; tuttavia il codice generato in modalità "non compatibile" è migliore.
 
l'unica differenza resta la valutazione degli operatori prefissi e postfissi, che Crobots64 valuta correttamente (Crobots invece converte gli operatori postfissi in prefissi).
 
i=0;
a=++i;
a=i++;   
 
sono equivalenti per Crobots ma non lo sono per Crobots64 che nel primo caso assegna "1" alla variabile "a" e nel secondo caso gli assegna "0".
 
Crobots64 ammette, per compatibilità, le dichiarazioni implicite delle variabili ed è possibile effettuare una chiamata ad una funzione prima che questa venga definita.
 
Tutte le operazioni avvengono tra numeri reali a 64 bit; Questo significa che è possibile effettuare calcoli molto più precisi rispetto a quelli
fattibili con Crobots a tutto vantaggio della semplificazione degli algoritmi.
 
Attualmente le funzioni trigonometriche sono rimaste compatibili con Crobots ma presto saranno rese finalmente semplici!!! senza inutili fattori di scala...
 
Dal punto di vista sintattico sono state aggiunte:
 
dichiarazione dei parametri come ammesso nel C++        es.    int function( int x, int y ) {}
 
inizializzatori come in C++        es.    int a=10,b=a+function();        a=b=c=function();     
 
valutazione del separatore virgola    if( a<b ) funzione1(x,y) , funzione2(x), funzione3(); else return funzione4(), funzione5();
 
commenti in linea    // commento ammesso nel c++
 
In realtà si dovrebbe dire che CRobots64 utilizza un subset del C++
 
Il Campo di Battaglia
Il gioco è concettualmente identico a Crobots, tuttavia ci sono notevoli differenze...
La grafica è più curata, ed è adesso possibile osservare con precisione I movimenti dei robots, la posizione e l'apertura dello scanner e tante altre informazioni...
I combattimenti avvengono per gruppi, anche se un gruppo può essere composto da un singolo elemento. Vince il gruppo che resta in vita con almeno un elemento!
Quando viene caricato un robot nella Virtual Machine ne viene specificata anche la quantità; possono combattere un numero qualsiasi di gruppi con qualsiasi
numero di elementi per gruppo.
Per permettere la collaborazione sono state implementate 2 nuove funzioni
 
getID() e scanID()
 
per es. questa è la tipica procedura di sparo di Crobots
 
distanza = scan( ang, 10 );
if( distanza > 0 && distanza<700 ) cannon(ang,distanza);
 
che può essere modificata nella seguente procedura di sparo Crobots64 per evitare di colpire membri della propria squadra
 
distanza = scan( ang, 10 );
if( scanID()<0 ) if( distanza<700 ) cannon(ang,distanza);
 
scanID()<0 ci assicura che il bersaglio non appartiene alla nostra squadra!
 
La funzione getID() invece restituisce il numero che viene assegnato ad ogni componente della squadra dalla Virtual Machine.
 
myID = getID();
 
myID può assumere I valori { 1,2,3,4,5,....}
 
in questo modo è possibile implementare strategie molto complesse...
 
if( myID == 1 ) Strategia1(); else
if( myID == 2 ) Strategia2();
 
Per ultima è stata implementata la funzione message("") che permette di visualizzare dei messaggi sul campo di battaglia...
 
if( damage() > 50 ) message( "cacchio sto morendo... " );