Untitled

 avatar
unknown
plain_text
24 days ago
3.1 kB
7
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 10  // Tamanho máximo fixo para a matriz

void lerJogo(int *l, int *c, char matriz[MAX_SIZE][MAX_SIZE]) {
    FILE *ficheiro = fopen("jogo.txt", "r");
    if (ficheiro == NULL) {
        perror("Erro ao abrir o arquivo");
        return;
    }

    if (fscanf(ficheiro, "%d %d", l, c) != 2) {
        printf("Erro ao ler dimensoes do tabuleiro\n");
        fclose(ficheiro);
        return;
    }

    // Verifica se as dimensões são válidas
    if (*l <= 0 || *c <= 0 || *l > MAX_SIZE || *c > MAX_SIZE) {
        printf("Dimensoes invalidas! Maximo: %dx%d\n", MAX_SIZE, MAX_SIZE);
        fclose(ficheiro);
        return;
    }

    while (fgetc(ficheiro) != '\n');  // Consome a quebra de linha

    char linha[MAX_SIZE + 2];  // Buffer para cada linha (+ \n e \0)

    for (int i = 0; i < *l; i++) {
        if (fgets(linha, sizeof(linha), ficheiro) == NULL) {
            printf("Erro ao ler linha %d do tabuleiro\n", i+1);
            break;
        }
        
        // Remove a quebra de linha
        linha[strcspn(linha, "\n")] = '\0';
        
        for (int j = 0; j < *c; j++) {
            if (linha[j] == '\0') {
                printf("Aviso: linha %d menor que o esperado\n", i+1);
                break;
            }
            matriz[i][j] = linha[j];
        }
    }

    fclose(ficheiro);

    printf("\nTabuleiro inicial (%dx%d):\n", *l, *c);
    for (int i = 0; i < *l; i++) {
        for (int j = 0; j < *c; j++) {
            printf("%c ", matriz[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int l = 0, c = 0;  // Inicializa com 0
    char comando[100];
    char matriz[MAX_SIZE][MAX_SIZE];

    printf("Digite um comando (l jogo para carregar): ");
    fgets(comando, sizeof(comando), stdin);

    // Remove o '\n' no final
    comando[strcspn(comando, "\n")] = '\0';

    if (strcmp(comando, "l jogo") == 0) {
        lerJogo(&l, &c, matriz);
    } else {
        printf("Comando inválido.\n");
    }

    // Resto do código...
    int x;
    char y;
    char command;
    
    while (l > 0 && c > 0) {  // Só permite comandos se o tabuleiro foi carregado
        printf("> ");
        if (scanf(" %c %c%d", &command, &y, &x) != 3) {
            printf("Formato invalido! Use: b a1 ou r b2\n");
            while (getchar() != '\n');  // Limpa o buffer de entrada
            continue;
        }
        
        int ord = y - 'a';
        if (x >= 0 && x < l && ord >= 0 && ord < c) {
            if (command == 'r') {
                matriz[x][ord] = '#';
            } else if (command == 'b') {
                matriz[x][ord] = matriz[x][ord] - 32;  // Para maiúscula
            }
            
            // Mostra tabuleiro atualizado
            printf("\n");
            for (int i = 0; i < l; i++) {
                for (int j = 0; j < c; j++) {
                    printf("%c ", matriz[i][j]);
                }
                printf("\n");
            }
        } else {
            printf("Coordenada invalida!\n");
        }
    }
    
    return 0;
}
Editor is loading...
Leave a Comment