Il mondo dei Talli

Iniziamo a studiare il mondo dei Talli. Abbiamo detto che i talli sono delle creature rotonde, con collegato un flagello che gli permette di muoversi. Il flagello può spingere in una sola direzione, con una spinta variabile da nulla ad un massimo predefinito. Nella creazione di un Tallo, fintanto che non sono in grado di riprodursi da soli, i dati della creazione sono randomici.

Vediamo quali dati ci servono per identificare un tallo e come li raggruppiamo. Potremmo avere una variabile per ogni tallo e per ogni attributo ma in questo modo avremmo una quantità enorme di variabili da gestire con una facilità di errore notevole. Il metodo migliore è quello di utilizzare un array di record.

la struttura dei dati

Il record in Delphi permette di raggruppare le variabili comuni ad un oggetto, in questo caso il Tallo; dopodichè si punta ad ogni variabile con il nome del record, un punto, e il nome del campo. per creare un tipo di variabile personalizzato di usa il comando TYPE seguito dal nome che vogliamo dare al tipo di variabile che stiamo creando, seguito dal tipo di variabile, nel nostro caso record si definisce una variabile di tipo record , queste le istruzioni per definire il record: 

type
   ttallo = record
     stato: string;
     x: extended;
     y: extended;
     x_int : integer;
     y_int : integer;
     energia: Integer;
     direzione: Integer;
     spinta: extended;
     velocita: integer;
   end;

Riepilogando Type vuol dire che stiamo creando un tipo di variabile, in questo caso un record, cioè un insieme di campi. Il tipo di variabile l’ho chiamato ttallo (la t iniziale mi aiuta a capire che si tratta di un TYPE); a questo punto come per definire un intero scrivo il comando numero_intero : integer, così per definire un Tallo scrivo il comando mio_tallo : ttallo;

Da questo momento posso puntare ai singoli campi come ho detto prima e cioè mio_tallo.stato per puntare al primo campo, mio_tallo.x per puntare al secondo, cioè, nome della mia variabile seguito da un punto e seguito dal campo.

Utilizziamo gli array

Anche così se avessi ad esempio 10 talli dovrei definire 10 variabili….. mio_tallo1 : ttallo; mio_tallo2:ttallo; e così via, ci viene incontro la possibilità di utilizzare gli array, così posso definire in un colpo solo tutti i talli che voglio:

tallo : array[1..10] of ttallo;

Con questo comando ho definito un array di 10 elementi che si chiama “tallo” di variabili di tipo ttallo. Posso puntare ad ogni singolo campo semplicemente : tallo[indice].stato := ‘A’; dove indice indica quale tallo sto utilizzando.

I dati di ogni tallo sono:

stato indica in che stato si trova il tallo A = attivo, M=morto

Disegniamo il tallo

x ed y sono le coordinate e sono di tipo extended in quanto devono contenere anche i valori decimali per migliorare la precisione della visualizzazione. Il loro valore intero viene inserito in x_int e y_int che serve anche per l’animazione del movimento. Il programma prima provvede a calcolare le nuove coordinate del tallo ricalcolando x e y in base alla direzione e alla spinta (vedremo in un altro articolo come si fa) quindi cancella tallo dalla vecchia posizione utilizzando le coordinate x_int e y_int, imposta la nuova posizione convertendo in interi e dividendo per 100 x e y in x_int e y_int e disegna il tallo nella nuova posizione

disegna_tallo(i,'c');  // il primo paramento indica quale tallo stiamo disegnando
aggiorna_tallo(i);     // aggiorna i valori di x e y con la nuova posizione in funzione della direzione 
tallo(i).x_int := round(tallo(i).x/100);
tallo(i).y_int := round(tallo(i).y/100);
disegna_tallo(i,'d');   // il secondo parametro indica se bisogna [c] cancellare o [d] disegnare

La funzione disegna_tallo(indice,funzione) imposta i colori del tallo prima di disegnarlo e se il secondo paramentro è C quindi cancellazione imposta come colore quello dell’acqua, così disegnandolo in realtà lo cancella. Non ti preoccupare se al momento ti sembra complicato, man mano che ci addentriamo ti darò ulteriori spiegazioni.

Maurizio

Lascia un commento