1
resposta

Codigo foge foge até aki.

fogefoge.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){

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


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


mapa.c

include <stdio.h>

include <stdlib.h>

include "mapa.h"

void liberamapa(MAPA* m){ for(int i =0; ilinhas; i++){ free(m->matriz[i]); }

free(m->matriz); }

//--------------------------------------------------------------

void lemapa(MAPA* m){ FILE* f; f= fopen("mapa.txt","r"); if (!f){ printf("Desculpe, banco de dados não acessivel\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 alocamapa(MAPA* m){ m->matriz = malloc(sizeof(char)*m->linhas); for(int i= 0; ilinhas; i++ ){ m->matriz[i] = malloc(sizeof(char)(m->colunas+1)); } }

//---------------------------------------------------------------------------------------

void imprimemapa(MAPA* m){

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

}

//-------------------------------------------------------------------------------------------

void encontramapa(MAPA* m, POSICAO* p, char c){ for (int i=0; ilinhas; i++){ for (int j=0; jcolunas; j++){ if (m->matriz[i][j] == '@'){ p->x=i; p->y=j; break; } } } } ****

fogefoge.h

int acabou();

void move(char direcao); void encontramapa(MAPA* m, POSICAO* heroi, char c); **** mapa.txt

5 10

|--------| |...|..-.| |..-|.@..| |......-.| |--------|

1 resposta

Olá! Parece que você está com uma dúvida na implementação do jogo Foge-Foge em C. Vou tentar te ajudar!

Pelo código que você compartilhou, percebo que você já implementou algumas funções como "acabou", "move" e "encontramapa". No entanto, você está com dificuldades na continuação do jogo.

Para continuar a implementação do jogo, você precisa completar as funções "liberamapa", "lemapa", "alocamapa" e "imprimemapa". Essas funções são responsáveis por ler o mapa do jogo, alocar memória para a matriz do mapa, imprimir o mapa na tela e liberar a memória alocada, respectivamente.

Vou te mostrar como implementar cada uma dessas funções:

  1. "liberamapa": Essa função é responsável por liberar a memória alocada para a matriz do mapa. No seu código, você já começou a implementá-la, mas faltou percorrer todas as linhas da matriz e liberar a memória de cada uma delas. Você pode fazer isso utilizando um loop "for" para percorrer todas as linhas da matriz e a função "free" para liberar a memória. Aqui está um exemplo de como implementar essa função:
void liberamapa(MAPA* m) {
    for (int i = 0; i < m->linhas; i++) {
        free(m->matriz[i]);
    }
    free(m->matriz);
}
  1. "lemapa": Essa função é responsável por ler o mapa do jogo a partir de um arquivo. No seu código, você já começou a implementá-la, mas faltou ler o conteúdo do arquivo e armazená-lo na matriz do mapa. Você pode fazer isso utilizando a função "fscanf" para ler as dimensões do mapa e o conteúdo da matriz. Aqui está um exemplo de como implementar essa função:
void lemapa(MAPA* m) {
    FILE* f;
    f = fopen("mapa.txt", "r");
    if (!f) {
        printf("Desculpe, banco de dados não acessível\n");
        exit(1);
    }

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

    alocamapa(m);

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

    fclose(f);
}
  1. "alocamapa": Essa função é responsável por alocar memória para a matriz do mapa. No seu código, você já começou a implementá-la, mas faltou alocar memória para cada linha da matriz. Você pode fazer isso utilizando um loop "for" para percorrer todas as linhas da matriz e a função "malloc" para alocar memória. Aqui está um exemplo de como implementar essa função:
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));
    }
}
  1. "imprimemapa": Essa função é responsável por imprimir o mapa na tela. No seu código, você já começou a implementá-la, mas faltou percorrer todas as linhas da matriz e imprimir cada uma delas. Você pode fazer isso utilizando um loop "for" para percorrer todas as linhas da matriz e a função "printf" para imprimir cada linha. Aqui está um exemplo de como implementar essa função:
void imprimemapa(MAPA* m) {
    for (int i = 0; i < m->linhas; i++) {
        printf("%s\n", m->matriz[i]);
    }
}

Com essas funções implementadas, você poderá continuar o jogo Foge-Foge e terá a funcionalidade de ler o mapa, imprimir o mapa na tela e liberar a memória alocada.

Espero ter ajudado! Se tiver mais alguma dúvida, é só me dizer. Bons estudos!