Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.7 kB
4
Indexable
Never
tMapa* CriaMapa(const char* caminhoConfig) {
    int i = 0, j = 0, contagemLinhas = 0, achouBreak = 0;
    int linhaP1 = 0, linhaP2 = 0, colunaP1 = 0, colunaP2 = 0, tickFlag = 0;
    char aux = '0', caminhoMapa[1000];

    tMapa * mapa = (tMapa*)malloc(sizeof(tMapa));
    FILE * fMapa = NULL;

    sprintf(caminhoMapa, "%s/mapa.txt", caminhoConfig);
    fMapa = fopen(caminhoMapa, "r");
    if (!fMapa) {
        printf("Erro ao abrir o mapa!\n");
        exit(1);
    }

    // inicializa as variaveis
    mapa->nColunas = 0;
    mapa->nLinhas = 0;
    mapa->nFrutasAtual = 0;
    mapa->nMaximoMovimentos = 0;
    mapa->tunel = NULL;

    fscanf(fMapa, "%d\n", &mapa->nMaximoMovimentos);
    while (fscanf(fMapa, "%c", &aux) == 1) {
        // atribui o numero de colunas e conta o num de \n como num linhas
        if (aux == '\n') {
            mapa->nColunas = j;
            mapa->nLinhas++;
            achouBreak = 1; // bloqueia q o numero de colunas altere
        }

        //le qts char tem ate o \n
        if (!achouBreak) {
            j++;
        }
    }

    // aloca memória para o grid
    mapa->grid = (char**) malloc(ObtemNumeroLinhasMapa(mapa) * sizeof(char*));
    for (i = 0; i < ObtemNumeroLinhasMapa(mapa); i++) {
        mapa->grid[i] = (char*) malloc(ObtemNumeroColunasMapa(mapa) * sizeof(char));
    }
    

    // le o mapa e armazena no grid, alem de criar o portal caso exista no mapa
    printf("%dL %dC\n\n", ObtemNumeroLinhasMapa(mapa), ObtemNumeroLinhasMapa(mapa));
    rewind(fMapa);
    fscanf(fMapa, "%d\n", &mapa->nMaximoMovimentos);
    for (i = 0; i < ObtemNumeroLinhasMapa(mapa); i++) {
        for (j = 0; j < ObtemNumeroColunasMapa(mapa); j++) {
            fscanf(fMapa, "%c", &mapa->grid[i][j]);
            // if (mapa->grid[i][j] == PORTAL) {
            //      switch (tickFlag) {
            //          case 1:
            //             tickFlag++;
            //             linhaP1 = i;
            //             colunaP1 = j;
            //             break;

            //          case 2:
            //             linhaP2 = i;
            //             colunaP2 = j;
            //             tTunel * portal = CriaTunel(linhaP1, colunaP1, linhaP2, colunaP2);
            //             mapa->tunel = portal;

            //     }
            // }
        }
    }

    mapa->nFrutasAtual = ObtemQuantidadeFrutasIniciaisMapa(mapa);

    for (i = 0; i < ObtemNumeroLinhasMapa(mapa); i++) {
        printf("\n");
        for (j = 0; j < ObtemNumeroColunasMapa(mapa); j++) {
            printf("%c", mapa->grid[i][j]);
        }
    }

    fclose(fMapa);
    return mapa;
}