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] = '@';
break;
heroi.x++;
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);
}
FogeFoge.h
int acabou ();
void move(char direcao);
Mapa.c
#include <stdio.h>
#include <stdlib.h>
#include "Mapa.h"
void encontramapa(MAPA* m, POSICAO* p, char c)
{
for(int i = 0; i < (m->linhas); i++) //posição do FOGE-FOGE
{
for(int j = 0; j < (m->colunas); j++)
{
if(m->matriz[i][j] == c)
{
p->x = i;
p->y = j;
break;
}
}
}
}
void liberamapa(MAPA* m)
{
//liberando variavel //tem que usar 'for' primeiro para liberar cada item da matriz
for(int i = 0; i < (m->linhas); i++) // -> ponteiro de MAPA* m
{
free(m->matriz[i]);
}
free(m->matriz);
}
void alocamapa(MAPA* m)
{
/*função malloc aloca um bloco de memória dinâmicamente // função sizeof da o tamanho de bytes do que estive dentro do ()
para ponteiro e array que são ponteiros // ** para matrizes que são ponteiros de ponteiros*/
(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)
{
FILE* f;
f = fopen("mapa.txt", "r");
if(f == 0)
{
printf("Erro na leitura do mapa!\n\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 imprimemapa(MAPA* m)
{
for(int i = 0; i < 5; i++)
{
printf("%s\n", m->matriz[i]);
}
}
Mapa.h
struct mapa //estrtutura de variáveis //agrupa variáveis
{
char** matriz;
int linhas;
int colunas;
}; //atenção a o ; no final
typedef struct mapa MAPA; //Função typedef possibilita dar apelidos - definir, escrevendo primeiro o que voce tem e depois o apelido
struct posicao
{
int x;
int y;
};
typedef struct posicao POSICAO;
void liberamapa(MAPA* m);
void alocamapa(MAPA* m);
void lemapa(MAPA* m);
void imprimemapa(MAPA* m);
void encontramapa(MAPA* m, POSICAO* p, char c);
mapa.txt
5 10
|--------|
|...|..-.|
|..-|.@..|
|......-.|
|--------|