questa è la funzione che gestisce le collisioni deli fantasmi,
grazie per l'auito
codice:void collisioni_fantasmi(oggetto fantasma, ptr_oggetto list[],ptr_oggetto primi_f,oggetto pacman,int id_f[]) { ptr_oggetto app; oggetto appoggio; int i; mvaddch(0,0,' '); list[0]=aggiorna_lista(list[0],fantasma); /*aggiorna la lista dei fantasmi*/ app=collisione(list[0],fantasma); if(app!=NULL) /*se un fantasma colpisce un'altro fantasma*/ { fantasma=inverti_dir(fantasma); /*inverto la direzione del fantasma*/ scrivi_fantasma(fantasma,indice(fantasma,id_f)); /*mando il fantasma invertito al processo che l'ha generato*/ if((app->direzione!=FERMO)&&(app->direzione!=fantasma.direzione)) { appoggio=inverti_dir(*app); /*inverto il fantasma colpito*/ scrivi_fantasma(appoggio,indice(appoggio,id_f)); } } else { app=collisione(list[2],fantasma); if(app!=NULL) { termina(fantasma.id); /*termino il processo del fantasma*/ termina(app->id); /*termino il missile colpito*/ i=indice(fantasma,id_f); /*ottengo la indice dell'array in qui viene memorizato il pid del fantasma*/ 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,fantasma)!=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,fantasma); /*tolgo il fantasma colpito dalla lista dei primi fantasmi*/ } list[0]=togli(list[0],fantasma); /*tolgo il fantasma dalla lista dei fantasmi*/ list[2]=togli(list[2],*app); /*tolgo il missile dalla lista dei missili*/ } if(pos_uguali(pacman.posizione,fantasma.posizione)) /*se il fantasma colpisce pacman*/ energia=energia-10; /*togli 10 di energia cioe 1 vita a pacman*/ } }

Rispondi quotando