fogefoge.c
#include <stdio.h>
#include <stdlib.h>
#include "fogefoge.h"
#include "mapa.h"
MAPA m;
POSICAO heroi;
void move(char direcao){
    int x;
    int y;
    m.matriz[heroi.x][heroi.y] = '.';
    switch(direcao) {
        case 'a':
            m.matriz[heroi.x][heroi.y-1] = '@';
            heroi.y--;
            break;
        case 'w':
            m.matriz[heroi.x-1][heroi.y] = '@';
            heroi.x--;
            break;
        case 's':
            m.matriz[heroi.x+1][heroi.y] = '@';
            heroi.x++;
            break;
        case 'd':
            m.matriz[heroi.x][heroi.y+1] = '@';
            heroi.y++;
            break;
    }
}
int acabou(){
    return 0;
}
int main(){
    ler_mapa(&m);
    encontrar_mapa(&m, &heroi, '@');
    
    do {
        imprimir_mapa(&m);
        char comando;
        scanf(" %c", &comando);
        move(comando);
    } while(!acabou());
    
    liberar_mapa(&m);
}
mapa.c
#include <stdio.h>
#include <stdlib.h>
#include "mapa.h"
void encontrar_mapa(MAPA* m, POSICAO* p, char c){
    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;
            }
        }
    }
}
void ler_mapa(MAPA* m){
    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));
    alocar_mapa(m);
    for(int i = 0; i < 5; i++){
        fscanf(f, "%s", m->matriz[i]);
    }
    fclose(f);
}
void alocar_mapa(MAPA* m){
    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 liberar_mapa(MAPA* m){
    for(int i = 0; i < m->linhas; i++){
        free(m->matriz[i]);
    }
    free(m->matriz);
}
void imprimir_mapa(MAPA* m){
    for(int i = 0;	i < 5; i++){
        printf("%s\n", m->matriz[i]);
    }
}
 
            