Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Continuando o jogo

fogefoge.c

#include <stdio.h>
#include <stdlib.h>
#include "fogefoge.h"
#include "mapa.h"

MAPA m;
POSICAO heroi;

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 acabou(){
    return 0;
}

int main(){
    ler_mapa(&m);
    encontrar_mapa(&m, &heroi, '@');
    
    do {
        imprimir_mapa(&m);

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

    } while(!acabou());
    
    liberar_mapa(&m);
}

mapa.c

#include <stdio.h>
#include <stdlib.h>
#include "mapa.h"

void encontrar_mapa(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 ler_mapa(MAPA* m){
    FILE* f;
    f = fopen("mapa.txt", "r");

    if(f == 0){
        printf("Erro na leitura do mapa\n");
        exit(1);
    }

    fscanf(f, "%d %d", &(m->linhas), &(m->colunas));
    alocar_mapa(m);

    for(int i = 0; i < 5; i++){
        fscanf(f, "%s", m->matriz[i]);
    }

    fclose(f);
}

void alocar_mapa(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 liberar_mapa(MAPA* m){
    for(int i = 0; i < m->linhas; i++){
        free(m->matriz[i]);
    }

    free(m->matriz);
}

void imprimir_mapa(MAPA* m){
    for(int i = 0;	i < 5; i++){
        printf("%s\n", m->matriz[i]);
    }
}
1 resposta
solução!

Oi Henrique, tudo bem?

Henrique, agradeço por compartilhar o progresso no projeto "Continuando o jogo". É notável o avanço na implementação utilizando structs, leitura de mapa e manipulação de posições. A estrutura do código está clara, e a integração entre os arquivos "fogefoge.c" e "mapa.c" está bem organizada.

A criação da função move para atualizar a posição do herói no mapa, conforme a direção informada, demonstra um controle eficiente do personagem.

Continue nesse ótimo caminho! Caso tenha mais detalhes ou desafios a compartilhar, pode mandar. Parabéns pela prática e dedicação!

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software