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:
dovrei confrontare tutti i nodi tra loro e quando i 2 nodi sono "sovrapposti" ne cancello uno.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); } }
ho provato a scrivere decine di funzioni ma mi imbatto in errori di logica che non riesco a risolvere![]()
grazie

Rispondi quotando