fogefoge.c
include <stdio.h>
include <stdlib.h>
include "fogefoge.h"
include "mapa.h"
MAPA m;
POSICAO heroi;
//------------------------------------------------------------------------------------------
int acabou(){ return 0; }
//-------------------------------------------------------------------------------------------
void move(char direcao){
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 main(){
lemapa(&m); encontramapa(&m,&heroi,'@');
do{
imprimemapa(&m);
char comando; scanf(" %c",&comando); move(comando);
}while(!acabou());
liberamapa(&m); }
mapa.h
struct mapa{ char** matriz; int linhas; int colunas;}; typedef struct mapa MAPA;
struct posicao{ int x; int y; }; typedef struct posicao POSICAO;
void liberamapa(MAPA* m); void lemapa(MAPA* m); void alocamapa(MAPA* m); void imprimemapa(MAPA* m);
mapa.c
include <stdio.h>
include <stdlib.h>
include "mapa.h"
void liberamapa(MAPA* m){ for(int i =0; ilinhas; i++){ free(m->matriz[i]); }
free(m->matriz); }
//--------------------------------------------------------------
void lemapa(MAPA* m){ FILE* f; f= fopen("mapa.txt","r"); if (!f){ printf("Desculpe, banco de dados não acessivel\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]); } fclose(f); }
//-----------------------------------------------------------------------------------------
void alocamapa(MAPA* m){ m->matriz = malloc(sizeof(char)*m->linhas); for(int i= 0; ilinhas; i++ ){ m->matriz[i] = malloc(sizeof(char)(m->colunas+1)); } }
//---------------------------------------------------------------------------------------
void imprimemapa(MAPA* m){
for(int i = 0; i < 5; i++) { printf("%s\n", m->matriz[i]); }
}
//-------------------------------------------------------------------------------------------
void encontramapa(MAPA* m, POSICAO* p, char c){ for (int i=0; ilinhas; i++){ for (int j=0; jcolunas; j++){ if (m->matriz[i][j] == '@'){ p->x=i; p->y=j; break; } } } } ****
fogefoge.h
int acabou();
void move(char direcao); void encontramapa(MAPA* m, POSICAO* heroi, char c); **** mapa.txt
5 10
|--------| |...|..-.| |..-|.@..| |......-.| |--------|