Estou com erro na movimentação do fantasma, toda vez que eu seleciono a tecla de movimentação ex. "D", oque movimenta é a linha horizontal do mapa ao inves dos fantasma
 
  
fogefoge.c
#include <stdio.h>
#include <stdlib.h>
#include "fogefoge.h"
#include "mapa.h"
//Variavel que permite eu agrupar outras variaveis dentro dela
 MAPA m;
 POSICAO heroi;
 //Fazendo o fantasma andar para um lado
 void Fantasmas() {
    MAPA copia;
    Copiamapa(&copia, &m);
    for(int i = 0; i < copia.linhas; i++) {
        for(int j = 0; j < copia.colunas; j++) {
            if(copia.matriz[i][j] == FANTASMA) {
                if(Ehvalida(&m, i, j+1) && Ehvazia(&m, i, j+1)) {
                    Andanomapa(&m, i, j, i, j+1);
                }
                return;
            }
        }
    }
    Liberamapa(&copia);
}
int acabou() {
    return 0;
 }
 // Variavel para caso se o usuario apertar a tecla errado
 int Ehdirecao(char direcao) {
    return direcao == ESQUERDA ||
            direcao == CIMA||
            direcao == BAIXO ||
            direcao == DIREITA;
 }
 void move(char direcao) {
    //Variavel chamada caso o usuario chame a tecla erra
        if(!Ehdirecao(direcao))
                return;
    // Variaveis de validação para o Pacman andar
    int proximox = heroi.x;
    int proximoy = heroi.y;
    // Permite que eu selecione o lado que eu desejo ir
    switch(direcao) {
        
    // se eu apertar a seta para a esquerda mostra o pac man um pouco para a esquerda    
    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() {
    //Chamando a função para ler o mapa
    Lemapa(&m);
    Encontramapa(&m, &heroi, HEROI);
    do {
        imprimemapa(&m);
        char comando;
        scanf(" %c", &comando);
        move(comando);
        Fantasmas();
    } while (!acabou());
    
    //Liberação de memoria s
   Liberamapa(&m);
}
 
Mapa.C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mapa.h"
//Variavel e função criada para criada para o mapa auxiliar
void Copiamapa(MAPA* destino, MAPA* origem) {
    destino->linhas = origem->linhas;
    destino->colunas = origem->colunas;
    Alocamapa(destino);
    for (int i = 0; i < origem->linhas; i++) {
        //função que recebe um array de chaves
        strcpy(destino->matriz[i], origem->matriz[i]);    
    
    }
}
int Andanomapa(MAPA* m, int xorigem, int yorigem, int xdestino, int ydestino) {
    char personagem = m->matriz[xorigem][yorigem];
    m->matriz[xdestino][ydestino] = personagem;
    m->matriz[xorigem][yorigem] = VAZIO;
}
int Ehvalida(MAPA* m, int x, int y) {
     //Metodo que não permite o Pacman passar das limitações do mapa
    if(x >= m->linhas)
        return 0;
    
    if(y >= m->colunas)
        return 0;
        return 1;
}
int Ehvazia(MAPA* m, int x, int y) {
     return m->matriz[x][y] = VAZIO;       
}
void Encontramapa(MAPA* m, POSICAO* p, char c) {
    
    // Metodo que  acha a posição do pac man OBs: Porem ele guarda uma posição fixa
    for( int i = 0; i < m->linhas; i++) {
        for(int j = 0; j < m->colunas; j++) {
            if(m->matriz[i][j] == 'c') {
                p->x = i;
                p->y = j;
                break;
            }
        }
    }
 
}
int Liberamapa(MAPA* m) {
         for(int i = 0; i < m->linhas; i++) {
        free(m->matriz[i]);
    }
        free(m->matriz);
    }
    void Alocamapa(MAPA* m) {
     // Tornando o mapa mais flexivel
    m->matriz = malloc(sizeof(char*) * m->linhas);
    for(int i = 0; i < m->linhas; i++) {
        m->matriz[i] = malloc(sizeof(char) * (m->colunas +1));
        }   
    }
    void Lemapa(MAPA* m) {
        
        //Ponteiro de arquivos
    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));
    Alocamapa(m);
    for(int i = 0; i < 5; i++) {
        fscanf(f, "%s", m->matriz[i]);
    }
    //Fechando o arquivo
    fclose(f);
}
void imprimemapa(MAPA* m) {
  
    for(int i = 0; i < 5; i++) {
        printf("%s\n", m->matriz[i]);
    }
}
 
            