1
resposta

[Bug] Bug na movimentação do fantasma

O mesmo fantasma era movido várias vezes, pois o loop encontrava ele em posições diferentes. Para resolver isso, na aula, foi criada uma cópia do mapa, usando a função copiamapa(). Porém, consegui resolver o bug de uma maneira muito mais simples.

Função inicial (bug):

void fantasmas() {
    //varre a matriz
    for(int i = 0; i < m.linhas; i++) {
        for(int j = 0; j < m.colunas; j++) {
            if(m.matriz[i][j] == FANTASMA) {
                if(posicaovazia(&m, i, j+1))
                andanomapa(&m, i, j, i, j+1);
            }
        }
    }
}

Para resolver, eu adicionei um j++ após a função andanomapa(), dentro do mesmo if. Sendo assim, após mover o fantasma, o loop for(int j = 0; j < m.colunas; j++) pula a nova posição do fantasma. Sendo assim, não reconhece essa posição como fantasma e não executa o if infinitamente.

Função corrigida:

void fantasmas() {
    //varre a matriz
    for(int i = 0; i < m.linhas; i++) {
        for(int j = 0; j < m.colunas; j++) {
            if(m.matriz[i][j] == FANTASMA) {
                if(posicaovazia(&m, i, j+1)) {
                andanomapa(&m, i, j, i, j+1);
                j++;
                }
            }
        }
    }
}
1 resposta

Bom dia, Alexandre! Tudo bem?

Gostei da sua iniciativa de tentar encontrar outra solução para essa situação ao encontrar um bug. Isso mostra o seu comprometimento com seu aprendizado. Também agradeço por compartilhar a sua solução aqui no fórum, sei que ajudará outros alunos que enfrentarem os mesmo problemas que você.

Então, continue com o bom trabalho e não hesite em pedir ajuda sempre que precisar.

Bons estudos!