questa è la funzione che gestisce le collisioni dei missili:
codice:void collisioni_missile(oggetto missile , ptr_oggetto list[],ptr_oggetto primi_f,oggetto pacman,int id_f[]) { ptr_oggetto app; int i; //mvaddch(0,0,CH_MISSILE); //refresh(); list[2]=aggiorna_lista(list[2],missile); /*aggiorna la lista dei missili*/ if(pos_uguali(missile.posizione,pacman.posizione)) /*se il missile colpisce pacman*/ { termina(missile.id); /*termino il processo che ha creato il missile*/ list[2]=togli(list[2],missile); /*tolgo il missile dalla lista dei missili*/ energia=energia-1; /*tolgo energia a pacman*/ } app=collisione(list[0],missile); if(app!=NULL) /*se il missile colpisce un fantasma*/ { i=indice(*app,id_f); /*ottengo la indice dell'array in qui viene memorizato il pid del fantasma */ termina(missile.id); /*termino il processo del missile*/ termina(app->id); /*termino il fantasma colpito*/ id_f[i]=0; /*azzero il pid del fantasma nell'array dei pid dei fantasmi*/ id_f[i]=crea_fantasma(pos_box[i],i); /*creo un fantasma nella box dei fantasmi*/ if(cerca(primi_f,*app)!=NULL) /*se il fantasma è uno dei primi fantasmi, cioe si puo sdoppiare*/ { i=libero(id_f); /*trovo una posizione libera nell'array dei pid dei fantasmi*/ id_f[i]=crea_fantasma(pos_box[i],i); primi_f=togli(primi_f,*app); /*tolgo il fantasma colpito dalla lista dei primi fantasmi*/ } list[0]=togli(list[0],*app); /*tolgo il fantasma dalla lista dei fantasmi*/ list[2]=togli(list[2],missile); /*tolgo il missile dalla lista dei missili*/ } app=collisione(list[1],missile); if(app!=NULL) /*se il missile colpisce una pallina */ { termina(missile.id); /*termina il processo che ha creato il missile*/ list[2]=togli(list[2],missile); /*tolgo il la pallina dalla lista delle palline*/ } app=collisione(list[2],missile); if (app!=NULL) /*se il missile colpisce un'altro missile*/ { termina(missile.id); /*termino il processo che ha generato il missile*/ list[2]=togli(list[2],missile); /*tolgo il missile dalla lista dei missili*/ if(app->direzione!=missile.direzione) /*se i due missili hanno direzioni diverse*/ { termina(app->id); /*termina anche il processo che ha generato l'altro missile*/ list[2]=togli(list[2],*app); /*togli anche l'altro missile dalla lista dei missili*/ } } if(pos_occupata(list[1],missile.posizione)==NULL) mvaddch(missile.posizione.y,missile.posizione.x,missile.c); if(pos_occupata(list[2],missile.pos_prec)!=NULL) mvaddch(missile.pos_prec.y,missile.pos_prec.x,missile.c); else if(pos_occupata(list[0],missile.pos_prec)!=NULL) mvaddch(missile.pos_prec.y,missile.pos_prec.x,CH_FANTASMA); else mvaddch(missile.pos_prec.y,missile.pos_prec.x,' '); mvaddch(pacman.posizione.y,pacman.posizione.x,pacman.c); }

Rispondi quotando