1
resposta

Duvida na função praondeofantasmavai

or( int i = 0; i < 5; i++){

    int posicao = rand() % 4;

    if (validalimitedomapa(&m, opcoes[posicao][0], opcoes[posicao][1])
        && posicaovaziadomapa(&m, opcoes[posicao][0], opcoes[posicao][1])){
        *xdestino = opcoes[posicao][0];
        *ydestino = opcoes[posicao][1];

        return 1;
    }
}

não entendi esta parte onde coloca o opcoes[posicao][0], mas especificamente a parte do 0 e o 1 no vetor opcoes `

1 resposta

Isso é por conda do...

    int opcoes[4][2] = {
        { xAtual, yAtual +1},
        { xAtual +1, yAtual},
        { xAtual, yAtual -1},
        { xAtual -1, yAtual}
    };

Que vem antes desse seu código.

Isso é uma matriz. Onde está o '[4]' possui os índices 0,1,2 e 3, e onde está o '[2]' possui os índices 0 e 1, que são os índices chamados nessa condição que você postou aqui.

Essa matriz do tipo int define 4 opções que a função 'rand' irá definir qual delas utilizar, escolhendo um dos índices do '[4]', se o computador através do rand, escolher por exemplo o número 2, ele irá pegar o terceiro valor desse espaço na matriz, que no caso seria esse...

    int opcoes[4][2] = {
        { xAtual, yAtual +1},
        { xAtual +1, yAtual},
    --> { xAtual, yAtual -1}, <--
        { xAtual -1, yAtual}

E você percebe que cada um desses quatro espaços possuem dois valores dentro dele, nesse meu exemplo da escolha do número 2 pelo 'rand', seria o 'xAtual' que possui o índice 0, e o 'yAtual -1' que logo possui o indice 1 por ser o segundo espaço.

A sua condição que você postou aqui, está simplesmente pegando os valores desses pequenos espaços através desses dois índice 0 e 1, e jogando para dentro da variável xdestino(que no caso é o do índice 0 por se tratar do eixo x na matriz 'opçoes') e jogando para a variável ydestino(que logo é o índice 1 por se tratar do eixo y).

Nesse exemplo do número 2 escolhido pelo rand, o computador está basicamente escrevendo como se fosse isso para as variáveis destino...

        *xdestino = xAtual;
        *ydestino = yAtual -1;