#include <stdio.h>
#include <string.h>

// Variables globales para el estado del juego
int puntajeTotal = 0;

// Matriz de disponibilidad para 5 categorías y 4 preguntas cada una (1 = Disponible, 0 = Respondida)
int disp[5][4] = {
    {1, 1, 1, 1}, // Categoría 1: Tipo de datos
    {1, 1, 1, 1}, // Categoría 2: Librería
    {1, 1, 1, 1}, // Categoría 3: Operadores lógicos
    {1, 1, 1, 1}, // Categoría 4: Operadores relacionales
    {1, 1, 1, 1}  // Categoría 5: Operadores aritméticos
};

void mostrarTablero() {
    printf("\n=========================================================\n");
    printf("    KEVIN Toala- TECNOLOGIAS DE LA INFOMACIÓN        \n");
    printf("=========================================================\n");
    
    char *nombresCategorias[5] = {
        "1. TIPO DE DATOS",
        "2. LIBRERIAS",
        "3. OPERADORES LOGICOS",
        "4. OPERADORES RELACIONALES",
        "5. OPERADORES ARITMETICOS"
    };

    for (int i = 0; i < 5; i++) {
        printf("--- %s ---\n", nombresCategorias[i]);
        for (int j = 0; j < 4; j++) {
            int puntos = (j + 1) * 100;
            printf("  [%d.%d] ", i + 1, j + 1);
            if (disp[i][j] == 1) {
                printf("%d Puntos\n", puntos);
            } else {
                printf("---\n");
            }
        }
    }
    printf("  [0] Salir del juego\n");
    printf("=========================================================\n");
}

int main() {
    int cat, preg;
    int opcionMenu;
    char respuestaTexto[50];
    int respuestaNum;

    do {
        mostrarTablero();
        printf("Selecciona la categoria (1-5) o 0 para salir: ");
        scanf("%d", &opcionMenu);

        if (opcionMenu == 0) {
            break;
        }

        if (opcionMenu < 1 || opcionMenu > 5) {
            printf("\nOpcion no valida. Intenta de nuevo.\n");
            continue;
        }

        int c = opcionMenu - 1; // Índice de la categoría
        printf("Selecciona el numero de pregunta (1-4): ");
        scanf("%d", &preg);

        if (preg < 1 || preg > 4) {
            printf("\nNumero de pregunta no valido.\n");
            continue;
        }

        int p = preg - 1; // Índice de la pregunta

        if (disp[c][p] == 0) {
            printf("\n¡Esa pregunta ya fue respondida! Elige otra.\n");
            continue;
        }

        int puntosPregunta = (p + 1) * 100;
        int acierto = 0;

        // Evaluación de preguntas de forma directa (Pregunta y Respuesta abierta)
        switch (c) {
            case 1: // TIPO DE DATOS
                if (p == 0) {
                    printf("\n[100 Puntos] ¿Cuantos bytes ocupa habitualmente un 'int' en C? R= ");
                    scanf("%d", &respuestaNum);
                    if (respuestaNum == 4) acierto = 1;
                } else if (p == 1) {
                    printf("\n[200 Puntos] ¿Que palabra reservada se usa para un solo caracter? R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "char") == 0) acierto = 1;
                } else if (p == 2) {
                    printf("\n[300 Puntos] ¿Modificador para enteros exclusivamente positivos? R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "unsigned") == 0) acierto = 1;
                } else if (p == 3) {
                    printf("\n[400 Puntos] ¿Tipo de dato para numeros con decimales de doble precision? R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "double") == 0) acierto = 1;
                }
                break;

            case 2: // LIBRERÍAS
                if (p == 0) {
                    printf("\n[100 Puntos] ¿Libreria estandar obligatoria (ej: nombre.h)? R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "stdio.h") == 0) acierto = 1;
                } else if (p == 1) {
                    printf("\n[200 Puntos] ¿Libreria para funciones matematicas como sqrt? R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "math.h") == 0) acierto = 1;
                } else if (p == 2) {
                    printf("\n[300 Puntos] ¿Libreria para gestion de memoria dinamica y rand()? R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "stdlib.h") == 0) acierto = 1;
                } else if (p == 3) {
                    printf("\n[400 Puntos] ¿Libreria para manejo de cadenas de texto (strings)? R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "string.h") == 0) acierto = 1;
                }
                break;

            case 3: // OPERADORES LÓGICOS
                if (p == 0) {
                    printf("\n[100 Puntos] Escribe el operador para el AND logico: R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "&&") == 0) acierto = 1;
                } else if (p == 1) {
                    printf("\n[200 Puntos] Escribe el operador para el OR logico: R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "||") == 0) acierto = 1;
                } else if (p == 2) {
                    printf("\n[300 Puntos] Escribe el operador para el NOT logico (negacion): R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "!") == 0) acierto = 1;
                } else if (p == 3) {
                    printf("\n[400 Puntos] Si a=1 y b=0, ¿cual es el resultado entero de 'a && b'? R= ");
                    scanf("%d", &respuestaNum);
                    if (respuestaNum == 0) acierto = 1;
                }
                break;

            case 4: // OPERADORES RELACIONALES
                if (p == 0) {
                    printf("\n[100 Puntos] Escribe el operador relacional de igualdad estricta: R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "==") == 0) acierto = 1;
                } else if (p == 1) {
                    printf("\n[200 Puntos] Escribe el operador para comprobar si dos valores son diferentes: R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "!=") == 0) acierto = 1;
                } else if (p == 2) {
                    printf("\n[300 Puntos] Si x=5, ¿que evalúa la expresion 'x >= 5'? (1 para verdadero, 0 para falso) R= ");
                    scanf("%d", &respuestaNum);
                    if (respuestaNum == 1) acierto = 1;
                } else if (p == 3) {
                    printf("\n[400 Puntos] Escribe el operador relacional de 'menor o igual que': R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "<=") == 0) acierto = 1;
                }
                break;

            case 5: // OPERADORES ARITMÉTICOS
                if (p == 0) {
                    printf("\n[100 Puntos] Escribe el operador aritmetico para obtener el modulo/residuo: R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "%") == 0) acierto = 1;
                } else if (p == 1) {
                    printf("\n[200 Puntos] Si 'int res = 10 / 3;', ¿cual es el valor entero almacenado? R= ");
                    scanf("%d", &respuestaNum);
                    if (respuestaNum == 3) acierto = 1;
                } else if (p == 2) {
                    printf("\n[300 Puntos] Escribe el operador aritmetico para multiplicar: R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "*") == 0) acierto = 1;
                } else if (p == 3) {
                    printf("\n[400 Puntos] Escribe el operador de decremento unitario (restar 1): R= ");
                    scanf("%s", respuestaTexto);
                    if (strcmp(respuestaTexto, "--") == 0) acierto = 1;
                }
                break;
        }

        // Comprobación global del resultado
        if (acierto == 1) {
            printf("\n¡CORRECTO! +%d puntos.\n", puntosPregunta);
            puntajeTotal += puntosPregunta;
        } else {
            printf("\nINCORRECTO. -%d puntos.\n", puntosPregunta);
            puntajeTotal -= puntosPregunta;
        }

        disp[c][p] = 0; // Marcar la pregunta como respondida
        printf("PUNTUACION ACTUAL: %d puntos\n", puntajeTotal);

    } while(1);

    printf("\nJuego terminado, Kevin. Tu puntuacion final es: %d puntos.\n", puntajeTotal);
    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: