codice:
void controllo ()
{
oggetto valore_letto,pacman,appoggio;
int id_fant[MAXFANT]={0};
ptr_oggetto iniz_nascondigli=NULL,app,primi_fant=NULL;
ptr_oggetto liste[4]={NULL,NULL,NULL,NULL};
int i; char c[40],n[]={" "};
liste[1]=lista('p',CH_PALL);
liste[3]=lista(' ',' ');
iniz_nascondigli=lista_nascondigli( liste[1] , NFANT);
stampa_lista(liste[1]);
do
{
valore_letto=leggi_oggetto();
refresh();
switch(valore_letto.type)
{
case PACMAN:
pacman=valore_letto;
app=pos_occupata(iniz_nascondigli,pacman.pos_prec);
if((app!=NULL)&&(!pos_uguali(pacman.pos_prec,pacman.posizione)))
{
i=libero(id_fant);
id_fant[i]=crea_fantasma(app->posizione,i);
iniz_nascondigli=togli(iniz_nascondigli,*app);
appoggio.id=id_fant[i];
primi_fant=add(primi_fant,appoggio);
}
collisioni_pacman(pacman,liste);
mvaddch(pacman.pos_prec.y,pacman.pos_prec.x,' ');
mvaddch(pacman.posizione.y,pacman.posizione.x,pacman.c);
break;
case MISSILE:
collisioni_missile(valore_letto , liste, primi_fant, pacman, id_fant);
break;
case FANTASMA:
collisioni_fantasmi(valore_letto, liste, primi_fant, pacman, id_fant);
stampa(liste);
mvaddch(pacman.posizione.y,pacman.posizione.x,pacman.c);
break;
}
sprintf(c,"PUNTEGGIO %d ",punteggio);
mvaddstr(2,55,n);
mvaddstr(2,55,c);
mvprintw(11,1," ");
mvprintw(11,1," ENERGIA %d0%% ",(energia-1)%ENERG_A_VITA+1);
for(i=1;i<(energia-1)%ENERG_A_VITA+1;i++)
{
mvaddch(12,2+i*2,ACS_CKBOARD|COLOR_PAIR(COLOR_GREEN));
mvaddch(12,2+1+i*2,ACS_CKBOARD|COLOR_PAIR(COLOR_GREEN));
}
mvprintw(9,1," "); mvprintw(9,1," VITE %d",energia/ENERG_A_VITA);
mvprintw(10,1," ");
for(i=1;i<=(energia/ENERG_A_VITA);i++)
mvaddch(10,2+i*2,'O'|COLOR_PAIR(COLOR_YELLOW));
refresh();
} while ((conta_elementi(liste[1])!=0)&&(energia>0)); /*finche non ci saranno 0 palline da mangiare o finche pacman avrà finito l'energia*/
for(i=0;i<2;i++) /*per tutte le liste*/
{
app=liste[i*2];
while(app!=NULL) /*e per tutti gli elementi della lista*/
{
termina(app->id); /*termina il processo che ha generato l'elemento*/
app=app->next;
}
}
}