#include <iostream>
#include <stdlib.h>
#include <locale.h>
#include "functions.h"
using namespace std;
MAPA m;
int main()
{
setlocale(LC_ALL,""); // Ativa o uso de acentos
leMapa();
do{
char comando;
imprimeMapa();
scanf(" %c", &comando);
move(comando);
}while(!acabou());
liberaMapa();
system("pause");
return 0;
}
void liberaMapa()
{
// Libera��o da mem�ria alocada
for (int i = 0; i < m.linhas; i++)
{
free(m.matriz[i]);
}
free(m.matriz);
}
void leMapa()
{
FILE *f;
f = fopen("mapa.txt", "r");
if (f == 0)
{
printf("Erro na leitura do mapa");
exit(1);
}
fscanf(f, "%d %d", &(m.linhas), &(m.colunas));
alocaMapa();
// Leitura do mapa do arquivo
for (int i = 0; i < m.linhas; i++)
{
fscanf(f, "%s", m.matriz[i]);
}
fclose(f);
}
void alocaMapa()
{
// Aloca��o din�mica da matriz
m.matriz = (char**)malloc(sizeof(char*) * m.linhas);
for (int i = 0; i < m.linhas; i++)
{
m.matriz[i] = (char*)malloc(sizeof(char) * (m.colunas + 1)); // +1 para o caractere nulo
}
}
void imprimeMapa()
{
// Impress�o do mapa
for (int i = 0; i < m.linhas; i++)
{
printf("%s\n", m.matriz[i]);
}
}
int acabou()
{
return 0;
}
void move(char direcao) {
int x;
int y;
for(int i = 0; i < m.linhas; i++) {
for(int j = 0; j < m.colunas; j++) {
if(m.matriz[i][j] == '@') {
x = i;
y = j;
break;
}
}
}
switch(direcao) {
case 'a':
m.matriz[x][y-1] = '@';
break;
case 'w':
m.matriz[x-1][y] = '@';
break;
case 's':
m.matriz[x+1][y] = '@';
break;
case 'd':
m.matriz[x][y+1] = '@';
break;
}
m.matriz[x][y] = '.';
}
O que está errado nesse código, ele estava funcionando até eu colocar a struct MAPA.