Salve a tutti.
Immaginatevi tante palline verdi che vagano all'interno di una finestra rimbalzandone sui lati.
Vorrei far in modo che quando si scontrino tra loro una delle due compaia e quella che rimane cambi colore.
le palline sono memorizzate in una lista doppiamente concatenata. Ecco il codice delle strutture che uso e le funzioni di inserimento e cancellazione:
codice:
typedef struct nodo{
struct nodo *next,*prec;
GLfloat color,x,y,v,dir; //dir è la direzione 1 top left; 2bottom left; 3 top right; 4 bottom right;
GLint id;
}nodo;
typedef struct lista{
struct nodo *first,*last,*index;
int nelem;
}lista;
lista ll;
void inserisciNodo(lista *l){
nodo *tmp;
/*
* questa parte gestisce il primo elemento della coda
*/
if(l->first==NULL){
tmp = (nodo*) malloc(sizeof (nodo));
tmp->color=2.0;
tmp->x=10.0;
tmp->y=590.0;
tmp->v=v;
tmp->dir=4;
tmp->id=idb;
idb++;
tmp->next = NULL;
tmp->prec=NULL;
l->first=l->last=tmp;
l->nelem++;
nball+=1;
} else {
/*
* questa parte gestisce gli inserimenti sucessivi al primo
*/
tmp = (nodo*) malloc(sizeof (nodo));
tmp->color=2.0;
tmp->x=10.0;
tmp->y=590.0;
tmp->v=v;
tmp->dir=4;
tmp->id=idb;
idb++;
tmp->next = NULL;
tmp->prec=l->last;
l->last->next = tmp;
l->last = tmp;
l->nelem++;
nball+=1;
}
}
void cancellaNodo(nodo *n){
nodo *tmp;
if(n->prec!=NULL){
tmp=n->prec;
tmp->next=n->next;
n->prec=tmp;
free(n);
ll.nelem--;
}
else if(n->prec==NULL){
ll.first=n->next;
ll.nelem--;
free(n);
}
}
dovrei confrontare tutti i nodi tra loro e quando i 2 nodi sono "sovrapposti" ne cancello uno.
ho provato a scrivere decine di funzioni ma mi imbatto in errori di logica che non riesco a risolvere
grazie