Estou usando o site replit para executar o código, e estava funcionando normalmente até que modifiquei a minha função "acabou()" da mesma forma que no vídeo "Implementando a finalização do jogo", e então o meu programa encerra após o primeiro comando.
A única diferença que eu percebi do meu código para o da vídeo-aula são os nomes das variáveis e funções.
#include <stdio.h>
#include <stdlib.h>
#include "FogeFoge.h"
#include <time.h>
#include "mapa.h"
MAPA m;
POSICAO heroi;
int paraOndeFantasmaVai(int xAtual, int yAtual,
int* xDestino, int* yDestino) {
int opcoes[4][2] = {
{ xAtual, yAtual +1},
{ xAtual +1, yAtual},
{ xAtual, yAtual -1},
{ xAtual -1, yAtual}
};
srand(time(0));
for(int i = 0; i < 10; i++) {
int posicao = rand() % 4;
if(podeAndar(&m, FANTASMA, opcoes[posicao][0], opcoes[posicao][1])) {
*xDestino = opcoes[posicao][0];
*yDestino = opcoes[posicao][1];
return 1;
}
}
return 0;
}
void fantasmas(){
MAPA copia;
copiaMapa(&copia, &m);
for (int i = 0; i < m.linhas; i++) {
for (int j = 0; j < m.colunas; j++) {
if (copia.matriz[i][j] == FANTASMA) {
int xDestino;
int yDestino;
int encontrou = paraOndeFantasmaVai(i, j,
&xDestino, &yDestino);
if(encontrou) {
andaNoMapa(&m, i, j, xDestino, yDestino);
}
}
}
}
liberaMapa(&copia);
}
int acabou() {
POSICAO pos;
int fogeFogeNoMapa = encontraMapa(&m, &pos, HEROI);
return !fogeFogeNoMapa;
}
int ehDirecao(char direcao){
return direcao == ESQUERDA ||
direcao == CIMA ||
direcao == BAIXO ||
direcao == DIREITA;
}
void move(char direcao) {
if(!ehDirecao(direcao)) {
return;
}
int proximoX = heroi.x;
int proximoY = heroi.y;
switch(direcao) {
case ESQUERDA:
proximoY--;
break;
case CIMA:
proximoX--;
break;
case BAIXO:
proximoX++;
break;
case DIREITA:
proximoY++;
break;
}
if(!ehValida(&m, proximoX, proximoY))
return;
if(!ehVazia(&m, proximoX, proximoY))
return;
andaNoMapa(&m, heroi.x, heroi.y, proximoX, proximoY);
heroi.x = proximoX;
heroi.y = proximoY;
}
int main(void) {
leMapa(&m);
encontraMapa(&m, &heroi, HEROI);
do {
imprimeMapa(&m);
char comando;
scanf(" %c", &comando);
move(comando);
fantasmas();
} while (!acabou());
liberaMapa(&m);
return 0;
}