Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Codigo compila e executa normalmente porem o pacman não se movimenta

O codigo compila e executa sem nenhum erro mas o pacman não se move

#include <stdio.h>

#include <stdlib.h>

#include "fogefoge.h"

char** mapa; int linhas; int colunas;

void liberamapa(){ for (int i = 0; i < linhas; i++){ free(mapa[i]); } free(mapa); }

void alocamapa(){

mapa = (char**) malloc(sizeof(char*) * linhas);
for (int i = 0; i < linhas; i++){
    mapa[i] = (char*) malloc(sizeof(char) * (colunas + 1));

}

} void lemapa(){ FILE* f;

f = fopen("mapa.txt", "r");
if (f == 0){
    printf("Erro ao abrir o mapa, tente novamente em alguns instantes :)\n");
    exit(1);
}
fscanf(f, "%d %d", &linhas, &colunas);

alocamapa();

for (int i = 0; i <= 5; i++){
    fscanf(f, "%s", mapa[i]);
}
fclose(f);

}

void imprimemapa(){ for (int i = 0; i <= linhas; i++){ printf("%s\n", mapa[i]); } }

int acabou(){ return 0; }

void move (char direcao) { int x; int y;

for (int i = 0; i < linhas; i++){    
    for (int j = 0; j < colunas; 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;
}
mapa [x] [y] = '.';

}

int main(){

lemapa();

do{

    imprimemapa();

    char comando;
    scanf(" %c", &comando);
    move(comando);

} while (!acabou());

liberamapa();

}

3 respostas

Se você estiver no windows. Inclua a lib #include <conio.h> Mude estas linhas:

for (int i = 0; i <= 5; i++){ --> for (int i = 0; i < linhas; i++){

scanf(" %c", &comando); --> comando = getch();

Acho que assim vai funcionar.

Fiz todas as mudanças e continua a mesma coisa :/

solução!

Mais uma mudança, nesta linha está <= mude para <

void imprimemapa(){ for (int i = 0; i <= linhas; i++){ printf("%s\n", mapa[i]); } }