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

Dúvidas sobre o "!"

int podeandar(MAPA* m, char personagem, int x, int y) {
    return 
        ehvalida(m, x, y) && 
        !ehparede(m, x, y) &&
        !ehpersonagem(m, personagem, x, y);
}

Oi gente, podem me ajudar explicando o que esse "!" está fazendo na função? Ele está negando a função, significa que senão for parede ele retornar como verdadeiro? eu não consegui entender muito bem.

Desde já obrigado.

2 respostas
solução!
Isso msm se não for parede ele retorna verdadeiro.

E tentando entender esse metodo "**podeandar**",
Ele só vai conseguir andar se o medodo "**podeandar**" retornar verdadeiro(true);
Se é valida,  se nao tiver parede e se não for personagem.

Vou dar 2 cenarios de exemplos.

Cenario 1 pode andar.
Ex:
ehvalida(m, x, y) = true
ehparede(m, x, y) = false -> negando ( !false ) fica true
ehpersonagem(m, personagem, x, y) = false negando ( !false ) fica true

com isso o return ( true && true && true ) é true  ai ele pode andar.

-----------------------------------------------------------------------------------------------------------

Cenario 2 não pode andar.
Ex:
ehvalida(m, x, y) = true
ehparede(m, x, y) = true -> negando ( !true ) fica false
ehpersonagem(m, personagem, x, y) = false negando ( !false ) fica true

com isso o return ( true && false && true ) é false  ai ele não pode andar.

Agora faz sentido, usa "!" para dar uma resposta certa para a função podeandar().

Obrigado.