1
resposta

Continuando o jogo

Código de foge.foge.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) {
    int x;
    int y;

    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);
}

Código de foge.foge.h:

void move(char direcao);
int acabou();

Código de 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++) {
        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) {

    for(int i = 0; i < m->linhas; i++) {
    free(m->matriz[i]);
}
    free(m->matriz);

}

void alocamapa(MAPA* m) {

    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("mapas.txt", "r");
    if(f == 0) {
        printf("Erro na leitura do mapa\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]);
    }
}

Código de 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);
void encontramapa(MAPA* m, POSICAO* p, char c);
1 resposta

Olá, Guilherme! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de alocação dinâmica com ponteiros para construir uma estrutura flexível de mapa e utilizou muito bem a modularização com funções separadas para leitura, impressão e liberação de memória. Por fim, compreendeu a importância do controle de posição com structs para manipular o personagem no jogo de forma precisa.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!