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... " );
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-