Olá. O meu código está compilando normalmente, mas quando tento executar o windows encerra o programa automaticamente logo após eu dar o primeiro comando. Alguém pode me ajudar, por que aparentemente está tudo igual ao que o Maurício está fazendo
O fogefoge.c é esse até agora.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "fogefoge.h"
#include "mapa.h"
MAPA m;
POSICAO heroi;
int paraondeofastasmavai(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 < 5; 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 = paraondeofastasmavai(i, j, &xdestino, &ydestino);
if(encontrou){
andanomapa(&m, i, j, xdestino, ydestino);
}
}
}
}
liberamapa(&copia);
}
int acabou(){
POSICAO pos;
int perdeu = !encontramapa(&m, &pos, HEROI);
int ganhou = !encontramapa(&m, &pos, FANTASMA);
return ganhou || perdeu;
}
int ehdirecao(char direcao) {
return direcao == CIMA ||
direcao == BAIXO ||
direcao == DIREITA ||
direcao == ESQUERDA;
}
void move(char direcao) {
if(!ehdirecao(direcao))
return;
int proximox = heroi.x;
int proximoy = heroi.y;
switch(direcao){
case ESQUERDA:
proximoy--;
break;
case DIREITA:
proximoy++;
break;
case CIMA:
proximox--;
break;
case BAIXO:
proximox++;
break;
}
if(!podeandar(&m, HEROI, proximox, proximoy))
return;
andanomapa(&m, heroi.x, heroi.y, proximox, proximoy);
heroi.x = proximox;
heroi.y = proximoy;
}
int main(){
lemapa(&m);
encontramapa(&m, &heroi, HEROI);
do{
imprimemapa(&m);
char comando;
scanf(" %c", &comando);
move(comando);
fantasmas();
}while(!acabou());
liberamapa(&m);
}
``