Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida copiamapa

Opa pessoal tudo certo ?

Estou na etapa de cópia do mapa do jogo para fazer com que os fantasmas se movimentem para a direita (Aula 3 - Vídeo 5). Porém estou tendo algum problema na hora de execução do código.

Quando eu rodo meu programa sem a função "fantasma()" roda normal, consigo mover o personagem sem problemas. Porém se eu chamar a função "fantasma()" o programa para de responder logo depois de receber o comando.

Sei que o problema está dentro da função "fantasma()", porém comparei com o código do professor (https://gist.github.com/mauricioaniche/905820c66a4f8e1a3a1c) e não achei nada de diferente...

Segue o link para meu código https://gist.github.com/rkTinelli/be533edabf44e13e6366549081d10897

De qualquer forma, segue o código da função "fantasma()" , "copiamapa()" e "aloca_mapa()"

void fantasma(){

    MAPA copia;
    copiamapa(&copia, &m);

        printf("COPIA !!\n");
        imprime_mapa(&m);

    int i;
    int j;
    for (i=0 ; i< copia.linhas; i++){
        for (j=0; j< copia.colunas; j++){
            if (copia.mapa[i][j] == FANTASMA){
                if (ehvalida(&m, i,j+1) && ehvazio(&m,i,j+1)){
                    andanomapa(&m, i, j, i, j+1);
                }
            }
        }
    }
    libera_mapa(&copia);
}

-

void copiamapa (MAPA* destino, MAPA* origem){

    destino->linhas = origem->linhas;
    destino->colunas = origem->colunas;

    aloca_mapa(destino);

    int i;
    for (i=0; i<= origem->linhas; i++){
        strcpy(destino->mapa[i], origem->mapa[i]);
    }
}

.

void aloca_mapa(MAPA* m){
    m->mapa = malloc(sizeof(char*)*m->linhas);
    int j;
    for (j=0;j<m->linhas;j++){
    m->mapa[j] = malloc(sizeof(char*)*(m->colunas+1));
    }
}

Valeu pessoal !!!

2 respostas
solução!

Pessoal consegui descobrir meu erro... meu problema estava no laço FOR dentro da função copiamapa().

Por descuido, define o for dessa maneira:

for ( i=0 ;  i<= origem->linhas ; i++ ){

quando na verdade deveria ser:

for  ( i=0;  i < origem->linhas ; i++ ){

Considerando a primeira maneira que eu fiz, o contador i chegará até quinta linha, que seria a linha de índice 4 já que consideramos 0 como a primeira linha, depois será incrementado, ficando i = 5, e isso satisfaz a condição de execução do Loop, pois origem->linhas =5.

Pórem dentro do Loop, meu código tenta buscar algo em uma linha de índice 5, que seria uma sexta linha, que não existe na matriz original, e o programa para de responder.

Valeu pessoal !

E ai Henrique!

Legal que você conseguiu resolver seu problema! Vi que você esqueceu de marcar o tópico como solucionado então marquei aqui pra você!

Lembre-se sempre de marcar seus tópicos como solucionados pois ajuda outros alunos com a mesma dúvida a encontrar a solução também!

Abraço e bons estudos!