quando eu aperto as teclas elas não causam variação na posção.
#include <iostream>
#include <stdlib.h>
#include <locale.h>
using namespace std;
char** mapa;
int linhas, colunas;
void liberaMapa();
void leMapa();
void alocaMapa();
void imprimeMapa();
int acabou();
void move(char direcao);
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 < linhas; i++)
{
free(mapa[i]);
}
free(mapa);
}
void leMapa()
{
FILE *f;
f = fopen("mapa.txt", "r");
if (f == 0)
{
printf("Erro na leitura do mapa");
exit(1);
}
fscanf(f, "%d %d", &linhas, &colunas);
alocaMapa();
// Leitura do mapa do arquivo
for (int i = 0; i < linhas; i++)
{
fscanf(f, "%s", mapa[i]);
}
fclose(f);
}
void alocaMapa()
{
// Alocação dinâmica da matriz
mapa = (char**)malloc(sizeof(char*) * linhas);
for (int i = 0; i < linhas; i++)
{
mapa[i] = (char*)malloc(sizeof(char) * (colunas + 1)); // +1 para o caractere nulo
}
}
void imprimeMapa()
{
// Impressão do mapa
for (int i = 0; i < linhas; i++)
{
printf("%s\n", mapa[i]);
}
}
int acabou()
{
return 0;
}
void move(char direcao)
{
int x, y, i, j;
for(i = 0; i < linhas; i++)
{
for(j = 0; j < linhas; j++)
{
if(mapa[i][j] == '@')
{
x = i;
y = j;
break;
}
}
}
switch(direcao)
{
case 'a':
mapa[x][y-1] = '@';
break;
case 'w':
mapa[x-1][y] = '@';
break;
case 's':
mapa[x+1][y] = '@';
break;
case 'd':
mapa[x][y+1] = '@';
break;
}
// remove um dos Packman
mapa[x][y] = '.';
}