Ir para conteúdo
Fórum Script Brasil
  • 0

Alocação Dinâmica de Memória


giovaniChequim

Pergunta

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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...