Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    linguaggio c problema con finestre e ncurses.h

    sto programmando il giochino "pac-man" ma ogni tanto si verifica un problema,
    sul terminale vengono stampati dei caratteri scatola definiti in ncurses.h
    inizialmente il terminale riconosce questi caratteri ma dopo un po non li riconosce piu stampando altri caratteri,
    da cosa puo dipendere?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,313
    Senza vedere manco una riga di codice, sarà ben difficile aiutarti.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    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;
                   }     
              } 
    }

  4. #4
    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);
    }

  5. #5
    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*/
         }
     }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.