Daleja / elbosqueperdido

Es una simulación de un juego de rol, en donde el usuario elige un personaje, y a través de diferentes situaciones, opta por distintos caminos, los cuales lo llevarán a uno de los tres desenlaces.
Apache License 2.0
0 stars 0 forks source link

Primera parte completa con detalles #8

Open Daleja opened 10 years ago

Daleja commented 10 years ago

include

include

include

include

define NUM_ACERTIJOS 20

//**ESTRUCTURAS*****// typedef struct personaje { char * nombre; } PERSONAJE;

typedef struct ACERTIJOS{ char * nombre; char * solucion; }ACERTIJOS;

//**FUNCIONES*****//

PERSONAJE nuevoPersonaje() { PERSONAJE cr; cr.nombre = malloc(sizeof(char)*30); //Inicializar al personaje porque la estructura tiene un arreglo de caracteres puts("¿Cuál es tu nombre? "); gets(cr.nombre); return cr; }

ACERTIJOS nuevo_acertijo(int numero_acertijo){ FILE * f; ACERTIJOS cr; char * nombre = malloc(sizeof(char)*50); srand(time(NULL)); //Semilla sprintf(nombre, "Acertijos/Acertijo%i.acr",numero_acertijo );//Abre los acertijos de manera aleatoria (A partir del número uno) f = fopen(nombre,"r"); fscanf(f, "%s", nombre); while(fscanf(f, "%s", nombre) != EOF) { printf("%s", nombre); printf(" "); } fclose(f); printf("\n"); return cr; }

//Analiza el número random que se le da, lo compara con el arreglo y si lo tiene pide otro. Si no, lo guarda y permite que se imprima el acertijo int buscarNumero(int numero, int arreglo [], int tamanio) { int i, stop = 0; for(i = 0; (i < tamanio && stop == 0); i++){ if(arreglo[i] == numero) stop = 1; } return stop; }

//La función de solucionario va a analizar cada uno de las respuestas que se le den al juego, si son correctas, el usuario podrá seguir jugando int solucionario (char solucion[30], int numero_acertijo) {

int correcto = 0;//cuando correcto sea igual a 0 significará que es falso.

switch(numero_acertijo)
{
case 1:
    if(strncmp("el rio", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("rio", strlwr(solucion), strlen(solucion) -1) == 0  || strncmp("el río", strlwr(solucion), strlen(solucion) -1) == 0  || strncmp("río", strlwr(solucion), strlen(solucion) -1) == 0 )
        correcto = 1;
    else
        correcto = 0;
    break;
    //strncmp Compara dos cadenas, en este caso la solución del if con la respuesta del usuario (convertida a minúsculas -1 que es el \0 del final de la cadena -.-! Cuando el valor regresa un cero quiere decir que son iguales)
case 2:
    if(strncmp("mañana", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("el mañana", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("el manana", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("manana", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("el maniana", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("maniana", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 3:
    if(strncmp("veinte", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("20", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 4:
    if(strncmp("1105", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 5:
    if(strncmp("nirek", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 6:
    if(strncmp("la madre", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("madre", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("la mamá", strlwr(solucion), strlen(solucion) -1) == 0 ||strncmp("mamá", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("la mama", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("mama", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 7:
    if(strncmp("c", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("c)", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 8:
    if(strncmp("quince", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("15", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 9:
    if(strncmp("85", strlwr(solucion), strlen(solucion) -1) == 0|| strncmp("ochenta y cinco", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 10:
    if(strncmp("6720", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 11:
    if(strncmp("9-9000", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 12:
    if(strncmp("la montaña", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("montaña", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("la montana", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("montana", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("la montania", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("montania", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 13:
    if(strncmp("los dientes", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("dientes", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 14:
    if(strncmp("el viento", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("viento", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 15:
    if(strncmp("la oscuridad", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("oscuridad", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 16:
    if(strncmp("el huevo", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("huevo", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("los huevos", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("huevos", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 17:
    if(strncmp("los peces", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("peces", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 18:
    if(strncmp("el tiempo", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("tiempo", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 19:
    if(strncmp("el humano", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("humano", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("el hombre", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("hombre", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;

case 20:
    if(strncmp("el futuro", strlwr(solucion), strlen(solucion) -1) == 0 || strncmp("futuro", strlwr(solucion), strlen(solucion) -1) == 0)
        correcto = 1;
    else
        correcto = 0;
    break;
}
return correcto;

}

/*Nota:

//**INICIO DEL JUEGO*****// int main() { setvbuf(stdout, NULL, _IONBF, 0); char opcion; char solucion [30]; char * nombre; int numeros [NUM_ACERTIJOS]; int random; int fstop; int control_acertijos = 0; //PERSONAJE nuevo = nuevoPersonaje();//Se manda a llamar la función y se crea un nuevo personaje. int limpieza = 0; while (limpieza < 20) { numeros [limpieza] = 0; limpieza ++; } // Llena los números del arreglo con ceros, para quitarle la basura.

//CAP. 1.- EL PRISIONERO
puts("Prisionero: … Sé que mi hogar va a ser el mar, donde él esté, yo estoy… Yo-jo todos los marinos, la bandera izar, tiren fuerte, ladrones y pordioseros, nunca moriremos… Yo-jo todos juntos, la bandera izar…");

do
{
    puts("¿Hay alguien allí?");
    printf("a) Sí\nb) No\n");
    fflush(stdin);
    scanf("%c", &opcion);
} while(opcion != 'a' && opcion != 'A' && opcion != 'b' && opcion != 'B');

fflush(stdin);//¡¡¡ESTA COSA ES MÁGICAAAAAAAAA!!!

if(opcion == 'a' || opcion == 'A')
{
    PERSONAJE nuevo = nuevoPersonaje();
    printf("Prisionero: '¿%s?'\n", nuevo.nombre); // Manda llamar el nombre del nuevo personaje
}
else if(opcion == 'b' || opcion == 'B')
{
    puts("Prisionero: Y somos tan malos como un huracán, todos brindando, Yo-jo...Yo-jo...Yo-jo piratas siempre seremos… ");
    puts("Prisionero: ¡¿Quién está allí?!");
    PERSONAJE nuevo = nuevoPersonaje();//Se manda a llamar la función y se crea un nuevo personaje.
    printf("Prisionero: '¿%s?'\n", nuevo.nombre); // Manda llamar el nombre del nuevo personaje
}

//El prisionero pide que lo liberen
puts("Prisionero: Hace tiempo que no venía nadie por aquí...");
do
{
    puts("Prisionero: ¿Podrías liberarme?");
    printf("a) Sí\nb) No\n");
    scanf("%c", &opcion);
    fflush(stdin);
} while(opcion != 'a' && opcion != 'A' && opcion != 'b' && opcion != 'B');

if(opcion == 'a' || opcion == 'A')
{
    puts("Prisionero: Para liberarme necesitas resolver el acertijo que está grabado en la pared... ¡¡¡Pero cuidado!!! Sólo tienes una oportunidad \n");

    //Se generará un número random que llevará al usuario a un acertijo
    do
    {
        random =  rand()%20 + 1;
        fstop = buscarNumero(random, numeros, NUM_ACERTIJOS); //Llama a la función que verifica si el número del acertijo es repetido o no
    } while(fstop);

    numeros[control_acertijos] = random;
    control_acertijos ++;
    if(control_acertijos == 19) //Sólo si se pidieran más de veinte acertijos se reiniciaría el contador de acertijos, pero sería mejor introducir nuevos.
        control_acertijos = 0;

    nuevo_acertijo(random); // Guarda el acertijo generado dentro del random (OJO: el primer acertijo siempre es el dos, aun no entiendo por qué... ya antes había salido diferente)

    puts("Solución:\n");
    fflush(stdin);
    gets(solucion);

    //printf("%d", strncmp("mañana", strlwr(solucion), strlen(solucion)-1)); //Prueba de lo que imprime

    if(solucionario(solucion,random))
        puts("¡Excelente :)!\n");
    //AQUÍ SALE HACIA EL PRISIONERO ES LIBERADO

    else
    {
        puts("Prisionero: ¡Vaya! Tenías la respuesta en la punta de la lengua, si no pudiste con algo tan simple no podrás terminar el juego\n\n");
        puts("\t\t\t\t\t GAME OVER");
        return 0;
    }

}
//ELSE DE LA PRIMER PREGUNTA DE LIBERACIÓN, DEBE TERMINAR CUANDO EL PRISIONERO SEA LIBERADO
else if(opcion == 'b' || opcion == 'B')
{
    puts("Prisionero: Puedo ayudarte a salir de aquíKJHKHGHJ");
    do
    {
        puts("¿Liberar al prisionero?");
        fflush(stdin);
        printf("a) Sí\nb) No\n");
        scanf("%c", &opcion);
    } while(opcion != 'a' && opcion != 'A' && opcion != 'b' && opcion != 'B');

    if(opcion == 'a' || opcion == 'A')
    {
        puts("Prisionero: Para liberarme necesitas resolver el acertijo que está grabado en la pared... ¡¡¡Pero cuidado!!! Sólo tienes una oportunidad \n");

        //Se generará un número random que llevará al usuario a un acertijo
        do
        {
            random =  rand()%20 + 1;
            fstop = buscarNumero(random, numeros, NUM_ACERTIJOS); //Llama a la función que verifica si el número del acertijo es repetido o no
        } while(fstop);

        numeros[control_acertijos] = random;
        control_acertijos ++;
        if(control_acertijos == 19) //Sólo si se pidieran más de veinte acertijos se reiniciaría el contador de acertijos, pero sería mejor introducir nuevos.
            control_acertijos = 0;

        nuevo_acertijo(random); // Guarda el acertijo generado dentro del random (OJO: el primer acertijo siempre es el dos, aun no entiendo por qué... ya antes había salido diferente)

        puts("Solución:\n");
        fflush(stdin);
        gets(solucion);

        if(solucionario(solucion,random))
            puts("¡Excelente :)!\n");
        //AQUÍ SALE HACIA EL PRISIONERO ES LIBERADO

        else
        {
            puts("Prisionero: ¡Vaya! Tenías la respuesta en la punta de la lengua, si no pudiste con algo tan simple no podrás terminar el juego\n\n");
            puts("\t\t\t\t\t GAME OVER");
            return 0;
        }

    }
    else if(opcion == 'b' || opcion == 'B')
        //VIENE DE LA PROPUESTA: PUEDO AYUDARTE A SALIR DE AQUÍ
    {
        puts("Prisionero: Si me liberas te daré una bolsa llena de chocolates :)");

        do
        {
            puts("¿Liberar al prisionero?");
            fflush(stdin);
            printf("a) Sí\nb) No\n");
            scanf("%c", &opcion);
        } while(opcion != 'a' && opcion != 'A' && opcion != 'b' && opcion != 'B');
        if(opcion == 'a' || opcion == 'A')
        {
            puts("Prisionero: Para liberarme necesitas resolver el acertijo que está grabado en la pared... ¡¡¡Pero cuidado!!! Sólo tienes una oportunidad \n");

            //Se generará un número random que llevará al usuario a un acertijo
            do
            {
                random =  rand()%20 + 1;
                fstop = buscarNumero(random, numeros, NUM_ACERTIJOS); //Llama a la función que verifica si el número del acertijo es repetido o no
            } while(fstop);

            numeros[control_acertijos] = random;
            control_acertijos ++;
            if(control_acertijos == 19) //Sólo si se pidieran más de veinte acertijos se reiniciaría el contador de acertijos, pero sería mejor introducir nuevos.
                control_acertijos = 0;

            nuevo_acertijo(random); // Guarda el acertijo generado dentro del random (OJO: el primer acertijo siempre es el dos, aun no entiendo por qué... ya antes había salido diferente)

            puts("Solución:\n");
            fflush(stdin);
            gets(solucion);

            if(solucionario(solucion,random))
                puts("¡Excelente :)!\n");
            //AQUÍ SALE HACIA EL PRISIONERO ES LIBERADO

            else
            {
                puts("Prisionero: ¡Vaya! Tenías la respuesta en la punta de la lengua, si no pudiste con algo tan simple no podrás terminar el juego\n\n");
                puts("\t\t\t\t\t GAME OVER");
                return 0;
            }

        }
        else if(opcion =='b' || opcion == 'B')
        {
            //VIENE DEL SOBORNO DE LA BOLSA DE CHOCOLATES
            puts("Prisionero: No tengo más que ofrecerte. Parece que seremos compañeros de celda...");

            do
            {
                puts("Prisionero: Tengo un montón de ricos cocos, tirili, ahí están en fila míralos, grandes, chichos, tan enanos como ves…");
                puts("¿Liberar al prisionero?");
                fflush(stdin);
                printf("a) Sí\nb) No\n");
                scanf("%c", &opcion);
                //POR EL MOMENTO, SI EL USUARIO DECIDE NO LIBERAR AL PRISIONERO, EL JUEGO SE CICLARÁ
            } while(opcion != 'a' && opcion != 'A');

            if(opcion == 'a' || opcion == 'A')
            {
                puts("Prisionero: Para liberarme necesitas resolver el acertijo que está grabado en la pared... ¡¡¡Pero cuidado!!! Sólo tienes una oportunidad \n");

                //Se generará un número random que llevará al usuario a un acertijo
                do
                {
                    random =  rand()%20 + 1;
                    fstop = buscarNumero(random, numeros, NUM_ACERTIJOS); //Llama a la función que verifica si el número del acertijo es repetido o no
                } while(fstop);

                numeros[control_acertijos] = random;
                control_acertijos ++;
                if(control_acertijos == 19) //Sólo si se pidieran más de veinte acertijos se reiniciaría el contador de acertijos, pero sería mejor introducir nuevos.
                    control_acertijos = 0;

                nuevo_acertijo(random); // Guarda el acertijo generado dentro del random (OJO: el primer acertijo siempre es el dos, aun no entiendo por qué... ya antes había salido diferente)

                puts("Solución:\n");
                fflush(stdin);
                gets(solucion);

                if(solucionario(solucion,random))
                    puts("¡Excelente :)!\n");
                //AQUÍ SALE HACIA EL PRISIONERO ES LIBERADO

                else
                {
                    puts("Prisionero: ¡Vaya! Tenías la respuesta en la punta de la lengua, si no pudiste con algo tan simple no podrás terminar el juego\n\n");
                    puts("\t\t\t\t\t GAME OVER");
                    return 0;
                }

            }
        }
    }
}
Daleja commented 10 years ago

Por si en algún momento algo truena... -.-!