Gente, meu código simplezmente bugou. Ele estava funcionando perfeitamente, mas quando escrevi a função recursiva, ele começou a dar vários erros, e quando removi a função recursiva, continuou dando erros que antes não davam. Alguém pode me ajudar? Segue o código.
FOGEFOGE.C
include
include
include "funcoesfoge.h"
include "mapa.c"
include "hhh.h"
MAPA m; POSICAO heroi; POSICAO fantasma1; POSICAO fantasma2; POSICAO fantasma3; POSICAO fantasma4; POSICAO fantasma5; POSICAO fantasma6;
void pilula() { pilula2(&m, &heroi, 0, 1, 3); pilula2(&m, &heroi, 0, -1, 3); pilula2(&m, &heroi, 1, 0, 3); pilula2(&m, &heroi, -1, 0, 3); }
void pilula2(MAPA m, POSICAO heroi, int somax, int somay, int quantidade) { int novox = (heroi->x) + somax; int novoy = (heroi->y) + somay;
if(quantidade == 0) return;
if(m.matriz[novox][novoy] != '|' && m.matriz[novox][novoy] != '-' && m.matriz[novox][novoy] != 'p') { m.matriz[novox][novoy] = VAZIO; pilula2(&m, &heroi, somax, somay, quantidade - 1); }
if(m->matriz[novox][novoy] == '|' || m->matriz[novox][novoy] == '-' || m->matriz[novox][novoy] == 'p') return; }
void mover(char direcao, int aux) { int proximox, proximoy; if(direcao == BOMBA) { aux = 0; pilula(); } if(direcao != CIMA && direcao != ESQUERDA && direcao != BAIXO && direcao != DIREITA) { printf("Vc digitou um comando inválido\n"); return; } proximox = heroi.x; proximoy = heroi.y;
if(direcao == CIMA) { proximox--; } else if(direcao == ESQUERDA) { proximoy--;m.matriz[proximox][proximoy] != VAZIO; } else if(direcao == DIREITA) { proximoy++; } else if(direcao == BAIXO) { proximox++; }
if(proximox >= m.linhas) { return; } if(proximoy >= m.colunas) { return; } if(m.matriz[proximox][proximoy] != VAZIO) { return; } if(m.matriz[proximox][proximoy] == PILULA) { *aux = 1; } m.matriz[proximox][proximoy] = HEROI; m.matriz[heroi.x][heroi.y] = VAZIO; heroi.x = proximox; heroi.y = proximoy;
Posicao_fantasma(&m, &fantasma1, &fantasma2, &fantasma3, &fantasma4, &fantasma5, &fantasma6, FANTASMA1, FANTASMA2, FANTASMA3, FANTASMA4, FANTASMA5, FANTASMA6); moverfantasma(&m, &fantasma1, &fantasma2, &fantasma3, &fantasma4, &fantasma5, &fantasma6); } int main(void) { char comando; int z = 0, aux = 0; lemapa(&m); encontramapa(&m, &heroi, HEROI); do { imprimemapa(&m); char comando; scanf("%c", &comando); getchar(); mover(comando, &aux); if(aux == 0) printf("Tem pilula? NAO\n"); if(aux == 1) printf("Tem pilula? SIM\n"); } while(z == 0); liberamapa(&m); } MAPA.C
include
include
include "funcoesfoge.h"
include
void moverfantasma(MAPA m, POSICAO fantasma1, POSICAO fantasma2, POSICAO fantasma3, POSICAO fantasma4, POSICAO fantasma5, POSICAO *fantasma6) { int posic, i; int posicAntiga1x = fantasma1->x, posicAntiga1y = fantasma1->y, posicAntiga2x = fantasma2->x, posicAntiga2y = fantasma2->y; int posicAntiga3x = fantasma3->x, posicAntiga3y = fantasma3->y, posicAntiga4x = fantasma4->x, posicAntiga4y = fantasma4->y; int posicAntiga5x = fantasma5->x, posicAntiga5y = fantasma5->y, posicAntiga6x = fantasma6->x, posicAntiga6y = fantasma6->y;
int opcoes1[4][2] = { {fantasma1->x, (fantasma1->y) - 1}, {fantasma1->x, (fantasma1->y) + 1}, {(fantasma1->x) - 1, fantasma1->y}, {(fantasma1->x) + 1, fantasma1->y} }; int opcoes2[4][2] = { {fantasma2->x, (fantasma2->y) - 1}, {fantasma2->x, (fantasma2->y) + 1}, {(fantasma2->x) - 1, fantasma2->y}, {(fantasma2->x) + 1, fantasma2->y} }; int opcoes3[4][2] = { {fantasma3->x, (fantasma3->y) - 1}, {fantasma3->x, (fantasma3->y) + 1}, {(fantasma3->x) - 1, fantasma3->y}, {(fantasma3->x) + 1, fantasma3->y} }; int opcoes4[4][2] = { {fantasma4->x, (fantasma4->y) - 1}, {fantasma4->x, (fantasma4->y) + 1}, {(fantasma4->x) - 1, fantasma4->y}, {(fantasma4->x) + 1, fantasma4->y} }; int opcoes5[4][2] = { {fantasma5->x, (fantasma5->y) - 1}, {fantasma5->x, (fantasma5->y) + 1}, {(fantasma5->x) - 1, fantasma5->y}, {(fantasma5->x) + 1, fantasma5->y} }; int opcoes6[4][2] = { {fantasma6->x, (fantasma6->y) - 1}, {fantasma6->x, (fantasma6->y) + 1}, {(fantasma6->x) - 1, fantasma6->y}, {(fantasma6->x) + 1, fantasma6->y} };
for(i = 0 ; i < 5 ; i++) { srand(time(0)); posic = rand() % 4; int andax1 = opcoes1[posic][0]; int anday1 = opcoes1[posic][1]; if(m->matriz[andax1][anday1] == HEROI) { printf("VC PERDEU!!!"); exit(1); } if(m->matriz[andax1][anday1] != '-' && m->matriz[andax1][anday1] != '|' && m->matriz[andax1][anday1] != 'g' && m->matriz[andax1][anday1] != 'h' && m->matriz[andax1][anday1] != 'i' && m->matriz[andax1][anday1] != 'j' && m->matriz[andax1][anday1] != 'k' && m->matriz[andax1][anday1] != 'p') { m->matriz[andax1][anday1] = FANTASMA1; m->matriz[posicAntiga1x][posicAntiga1y] = VAZIO; } else { return; } } for(i = 0 ; i < 5 ; i++) { srand(time(0)); posic = rand() % 4; int andax1 = opcoes2[posic][0]; int anday1 = opcoes2[posic][1]; if(m->matriz[andax1][anday1] == HEROI) { printf("VC PERDEU!!!"); exit(1); } if(m->matriz[andax1][anday1] != '-' && m->matriz[andax1][anday1] != '|' && m->matriz[andax1][anday1] != 'f' && m->matriz[andax1][anday1] != 'h' && m->matriz[andax1][anday1] != 'i' && m->matriz[andax1][anday1] != 'j' && m->matriz[andax1][anday1] != 'k' && m->matriz[andax1][anday1] != 'p') { m->matriz[andax1][anday1] = FANTASMA2; m->matriz[posicAntiga2x][posicAntiga2y] = VAZIO; } else { return; } } for(i = 0 ; i < 5 ; i++) { srand(time(0)); posic = rand() % 4; int andax1 = opcoes3[posic][0]; int anday1 = opcoes3[posic][1]; if(m->matriz[andax1][anday1] == HEROI) { printf("VC PERDEU!!!"); exit(1); } if(m->matriz[andax1][anday1] != '-' && m->matriz[andax1][anday1] != '|' && m->matriz[andax1][anday1] != 'f' && m->matriz[andax1][anday1] != 'g' && m->matriz[andax1][anday1] != 'i' && m->matriz[andax1][anday1] != 'j' && m->matriz[andax1][anday1] != 'k' && m->matriz[andax1][anday1] != 'p') { m->matriz[andax1][anday1] = FANTASMA3; m->matriz[posicAntiga3x][posicAntiga3y] = VAZIO; } else { return; } } for(i = 0 ; i < 5 ; i++) { srand(time(0)); posic = rand() % 4; int andax1 = opcoes4[posic][0]; int anday1 = opcoes4[posic][1]; if(m->matriz[andax1][anday1] == HEROI) { printf("VC PERDEU!!!"); exit(1); } if(m->matriz[andax1][anday1] != '-' && m->matriz[andax1][anday1] != '|' && m->matriz[andax1][anday1] != 'f' && m->matriz[andax1][anday1] != 'g' && m->matriz[andax1][anday1] != 'h' && m->matriz[andax1][anday1] != 'j' && m->matriz[andax1][anday1] != 'k' && m->matriz[andax1][anday1] != 'p') { m->matriz[andax1][anday1] = FANTASMA4; m->matriz[posicAntiga4x][posicAntiga4y] = VAZIO; } else { return; } } for(i = 0 ; i < 5 ; i++) { srand(time(0)); posic = rand() % 4; int andax1 = opcoes5[posic][0]; int anday1 = opcoes5[posic][1]; if(m->matriz[andax1][anday1] == HEROI) { printf("VC PERDEU!!!"); exit(1); } if(m->matriz[andax1][anday1] != '-' && m->matriz[andax1][anday1] != '|' && m->matriz[andax1][anday1] != 'f' && m->matriz[andax1][anday1] != 'g' && m->matriz[andax1][anday1] != 'h' && m->matriz[andax1][anday1] != 'i' && m->matriz[andax1][anday1] != 'k' && m->matriz[andax1][anday1] != 'p') { m->matriz[andax1][anday1] = FANTASMA5; m->matriz[posicAntiga5x][posicAntiga5y] = VAZIO; } else { return; } } for(i = 0 ; i < 5 ; i++) { srand(time(0)); posic = rand() % 4; int andax1 = opcoes6[posic][0]; int anday1 = opcoes6[posic][1]; if(m->matriz[andax1][anday1] == HEROI) { printf("VC PERDEU!!!"); exit(1); } if(m->matriz[andax1][anday1] != '-' && m->matriz[andax1][anday1] != '|' && m->matriz[andax1][anday1] != 'g' && m->matriz[andax1][anday1] != 'h' && m->matriz[andax1][anday1] != 'i' && m->matriz[andax1][anday1] != 'j' && m->matriz[andax1][anday1] != 'f' && m->matriz[andax1][anday1] != 'p') { m->matriz[andax1][anday1] = FANTASMA6; m->matriz[posicAntiga6x][posicAntiga6y] = VAZIO; } else { return; } } }
void Posicao_fantasma(MAPA m, POSICAO fantasma1, POSICAO fantasma2, POSICAO fantasma3, POSICAO fantasma4, POSICAO fantasma5, POSICAO *fantasma6, char c1, char c2, char c3, char c4, char c5, char c6) { int i, j;
for(i = 0 ; i < m->linhas ; i++) { for(j = 0 ; j < m->colunas ; j++) { if (m->matriz[i][j] == FANTASMA1) { fantasma1->x = i; fantasma1->y = j; } if (m->matriz[i][j] == FANTASMA2) { fantasma2->x = i; fantasma2->y = j; } if (m->matriz[i][j] == FANTASMA3) { fantasma3->x = i; fantasma3->y = j; } if (m->matriz[i][j] == FANTASMA4) { fantasma4->x = i; fantasma4->y = j; } if (m->matriz[i][j] == FANTASMA5) { fantasma5->x = i; fantasma5->y = j; } if (m->matriz[i][j] == FANTASMA6) { fantasma6->x = i; fantasma6->y = j; } } } } void encontramapa(MAPA m, POSICAO heroi, char c) { int i, j; for(i = 0 ; i < m->linhas ; i++) { for(j = 0 ; j < m->colunas ; j++) { if (m->matriz[i][j] == HEROI) { heroi->x = i; heroi->y = j; break; } } } } void liberamapa(MAPA m) { int i; for(i = 0 ; i < m->linhas ; i++) { free(m->matriz[i]); } free(m->matriz); } void lemapa(MAPA m) { int i; FILE f; f = fopen("mapa.txt", "r"); if(f == 0) { printf("Erro na leitura do mapa\n"); exit(1); } fscanf(f, "%d %d", &m->linhas, &m->colunas); printf("linhas %d colunas %d\n", m->linhas, m->colunas); alocamapa(m); for(i = 0 ; i < 14 ; i++) { fscanf(f, "%s", m->matriz[i]); } fclose(f); } void imprimemapa(MAPA m) { int i; for(i = 0 ; i < 14 ; i++) { printf("%s\n", m->matriz[i]); } } void alocamapa(MAPA m) { int i; m->matriz = malloc((m->linhas)sizeof(char*));
for(i = 0 ; i < m->linhas ; i++) { m->matriz[i] = malloc((m->colunas+1) * sizeof(char)); } }
FUNCOESFOGE.H
define CIMA 'w'
define BAIXO 's'
define ESQUERDA 'a'
define DIREITA 'd'
define FANTASMA1 'f'
define FANTASMA2 'g'
define FANTASMA3 'h'
define FANTASMA4 'i'
define FANTASMA5 'j'
define FANTASMA6 'k'
define PILULA 'p'
define BOMBA 'b'
define HEROI '@'
define VAZIO '.'
struct mapa { char **matriz; int linhas; int colunas; };
struct posicao { int x; int y; };
typedef struct mapa MAPA; typedef struct posicao POSICAO;
MAPA.H
void mover(char direcao, int *aux);
void liberamapa(MAPA *m);
void lemapa(MAPA *m);
void alocamapa(MAPA *m);
void imprimemapa(MAPA *m);
void encontramapa(MAPA m, POSICAO heroi, char c);
void Posicao_fantasma(MAPA m, POSICAO fantasma1, POSICAO fantasma2, POSICAO fantasma3, POSICAO fantasma4, POSICAO fantasma5, POSICAO fantasma6, char c1, char c2, char c3, char c4, char c5, char c6); void moverfantasma(MAPA m, POSICAO fantasma1, POSICAO fantasma2, POSICAO fantasma3, POSICAO fantasma4, POSICAO fantasma5, POSICAO fantasma6);
void pilula2(MAPA m, POSICAO heroi, int somax, int somay, int quantidade)
void pilula();