Jump to content
Fórum Script Brasil
  • 0

Alocação Dinâmica de Memória


giovaniChequim

Question

Bom dia galera,

sou novato no fórum e essa é minha primeira visita, também sou meio novo na programação em C,

então caso esteja cometendo algum equivoco desde já peço que entendão :P

bom... eu estou construindo um jogo, mais especificamente um pacMan, e o mapa desse jogo

é uma matriz pré desenhada, porém ele é estática:

char mapaFundo[29] [22] ={//mapa do pacMan
        {k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k},   
        {k,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,k},
        {k,x,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,x,k},
        {k,x,y,x,x,x,y,x,x,y,x,x,y,x,x,y,x,x,x,y,x,k},
        {k,x,w,x,x,x,y,x,x,y,x,x,y,x,x,y,x,x,x,w,x,k},
        {k,x,y,x,x,x,y,x,x,y,x,x,y,x,x,y,x,x,x,y,x,k},
        {k,x,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,x,k},  
        {k,x,y,x,x,x,y,x,y,x,x,x,x,y,x,y,x,x,x,y,x,k},
        {k,x,y,x,x,x,y,x,y,x,x,x,x,y,x,y,x,x,x,y,x,k},
        {k,x,y,x,x,x,y,x,y,y,x,x,y,y,x,y,x,x,x,y,x,k},
        {k,x,w,y,y,y,y,x,x,v,x,x,v,x,x,y,y,y,y,w,x,k},
        {k,x,x,x,x,x,y,x,x,v,x,x,v,x,x,y,x,x,x,x,x,k},
        {k,k,k,k,k,x,y,x,v,v,v,v,v,v,x,y,x,k,k,k,k,k},
        {k,x,x,x,x,x,y,x,v,x,z,z,x,v,x,y,x,x,x,x,x,k},
        {tA,t,t,v,v,v,v,v,v,x,v,v,x,v,v,v,v,v,v,r,r,tB},
        {k,x,x,x,x,x,y,x,v,x,x,x,x,v,x,y,x,x,x,x,x,k},  
        {k,k,k,k,k,x,y,x,v,v,v,v,v,v,x,y,x,k,k,k,k,k},    
        {k,x,x,x,x,x,y,x,v,x,x,x,x,v,x,y,x,x,x,x,x,k},    
        {k,x,y,y,y,y,y,y,y,y,x,x,y,y,y,y,y,y,y,y,x,k},    
        {k,x,y,x,x,y,x,x,x,y,x,x,y,x,x,x,y,x,x,y,x,k},      
        {k,x,w,y,x,y,x,x,x,y,y,y,y,x,x,x,y,x,y,w,x,k},      
        {k,x,x,y,x,y,y,y,y,y,x,x,y,y,y,y,y,x,y,x,x,k},      
        {k,x,x,y,x,y,x,x,y,x,x,x,x,y,x,x,y,x,y,x,x,k},      
        {k,x,y,y,y,y,x,x,y,y,x,x,y,y,x,x,y,y,y,y,x,k}, 
        {k,x,y,x,x,x,x,x,x,y,x,x,y,x,x,x,x,x,x,y,x,k},      
        {k,x,y,x,x,x,x,x,x,y,x,x,y,x,x,x,x,x,x,y,x,k},       
        {k,x,w,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,y,w,x,k},      
        {k,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,k},
        {k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k},              
        };
         while(controle != 'e' ){//Enquanto o usuário não digita 'E' ele continua no laço do jogo
         if(kbhit())
         controle = getch();               
         system("cls");
         for (i=0; i<29; i++){//Escreve as linhas e faz PacMan andar na vertical
             printf("             ");
             for(j=0; j<22; j++){//Escreve as colunas e faz PacMan andar na horizontal    
                  if (pacX == i && pacY == j){
                           if(hadukenModeON){//quando especial ativado...
                                             timerMaldito(1);//timer recebe 1 em cada interação
                                             if(interacoesPoder == 100){//se o timer == 100
                                                              hadukenModeON = false; //fim de poder especial 
                                             }
                           }
                           if(!flag){
                                     printf("C");//primeira forma do pacMan
                                     flag = true;
                                     }else{
                                           printf("<");//segunda forma do pacMan
                                           flag = false;
                                           }
                  }else if(fantAX == i && fantAY == j){
                                   if(!hadukenModeON){//caso especial desativado
                                                      printf("W");//primeira forma do FantasmaA
                                   }else{//caso especial ativado modifica for fantasma A
                                         if(!flag2){//primeira forma do fantasma
                                                    printf("W");
                                                    flag2 = true;
                                         }else{//segunda forma do fantasma
                                               printf("T");
                                               flag2 = false;
                                               }
                                   }
                  }else if(fantBX == i && fantBY == j){
                        if(!hadukenModeON){//caso especial desativado
                             printf("W");//primeira forma do FantasmaB
                        }else{//caso especial ativado modifica for fantasma B
                             if(!flag3){//primeira forma do fantasma
                                        printf("W");
                                        flag3 = true;
                             }else{//segunda forma do fantasma
                                   printf("T");
                                   flag3 = false;
                             }
                        }
                  }else{
                  printf("%c", mapaFundo[i][j]);    
                  }
             }
            printf("\n");  
         }

bom eu sei que talvez não faça muito sentido eu aloca-la dinamicamente, sendo que o numero de linhas

e colunas da matriz sempre serão fixos neste caso, porém mesmo assim preciso fazê-lo. Bom eu sinceramente

não estendo quase nada de alocação e ponteiros e se fosse possível me responder explicadinho eu agradeço...

abrass

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Primeiramente, cria-se um ponteiro do tipo de dados que tu deseja alocar. No caso, um ponteiro apontando para char...

char *mapaFundo
Agora, para alocar espaço, deve-se utilizar a função 'malloc'. Ela recebe como parâmetro a quantidade de bytes a ser alocada, e retorna um ponteiro do tipo 'void', que pode ser atribuido á qualquer outro tipo de ponteiro.
mapaFundo = (char*) malloc(22*29*sizeof(char));
Intepretando: O tamanho da matriz, em bytes, é 29 x 22 x tamanho de um char (1 byte): 638 bytes. Como há a chance de haver erros na alocação da memória, faz-se um teste após a alocação:
if (mapaFundo==NULL) exit (1);
A partir daí, sua matriz já está alocada. Após utilizá-la, libere o espaço alocado anteriormente através da função 'free':
free(mapaFundo);

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...