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);
}