3
respostas

Não consigo corrigir o erro

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();

3 respostas

Oi Henrique,

Desculpa, mas vc pode postar de novo o código usando o botão de inserir código? Confira no campo do lado se o código está saindo formatado e tudo mais. Do jeito que veio, é impossível que a gente consiga ajudar.

Desculpe, eu não sabia como usar o botão inserir código, agora aprendi. Acredito que tenha feito certo. Obrigado.

FOGEFOGE.C

#include <stdio.h>
#include <stdlib.h>
#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 <stdio.h>
#include <stdlib.h>
#include "funcoesfoge.h"
#include<time.h>

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;

FUNCOES.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();

Essa biblioteca hhh.h é a mesma que funcoes.h que coloquei no titulo do código acima. Eu tinha esquecido de renomear. Desculpe o transtorno.