Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida

eu não consegui entender como que o código funciona.

void explodepilula() {

    if(!tempilula) return;

    explodepilula2(heroi.x, heroi.y, 0, 1, 3);
    explodepilula2(heroi.x, heroi.y, 0, -1, 3);
    explodepilula2(heroi.x, heroi.y, 1, 0, 3);
    explodepilula2(heroi.x, heroi.y, -1, 0, 3);

    tempilula = 0;
}

void explodepilula2(int x, int y, int somax, int somay, int qtd) {

    if(qtd == 0) return;

    int novox = x + somax;
    int novoy = y + somay;

    if(!ehvalida(&m, novox, novoy)) return;
    if(ehparede(&m, novox, novoy)) return;


    m.matriz[novox][novoy] = VAZIO;
    explodepilula2(novox, novoy, somax, somay, qtd - 1);

}

como que quando o personagem usar o poder, a parede "_" não desaparece ? pois só está indicando ali para não desaparecer as paredes "-" e "|"

funções citadas no códigos

int ehvalida(MAPA* m, int x, int y) {
    if(x >= m->linhas)
        return 0;
    if(y >= m->colunas)
        return 0;

    return 1;
}
int ehparede(MAPA* m, int x, int y) {
        return m->mapa[x][y] == '|' ||
                m->mapa[x][y] == '-';
}
1 resposta
solução!

Olá Victor.

Olhando no aquivo mapa.h

#define PAREDE_VERTICAL '|'
#define PAREDE_HORIZONTAL '-'

E olhando para o próprio mapa.txt

5 10
|--------|
|..F|..-.|
|..-|.@P.|
|.F....-.|
|--------|

Podemos ver que em nenhum momento usamos o carácter underscore "_" como parede no jogo.

Então dessa maneira a nossa função.

int ehparede(MAPA* m, int x, int y) {
        return m->mapa[x][y] == '|' ||
                m->mapa[x][y] == '-';
}

É suficiente para encontrar as paredes verticais " | " e horizontais " - "

Espero ter ajudado, bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software