Juego de cálculo mental

Eduardo de Lorenzo Poza

Este programa es un juego de cálculo mental. El propio programa te dice lo que hace. Los números generados van desde el 1 al 50.

#include <cstdlib>       //Funciones genéricas, entre las que está generar los números aleatorios
#include <ctime>         //Tiempo y reloj
#include <iostream>      //Entrada y salida de texto

using namespace std;

int main() {
    //Letras con acentos y simbolos del ASCII
    char abrirAdmiracion = 173;

    //Breve presentación del programa. Espera a que pulses ENTER para asegurarse de que da tiempo a leerlo
    cout << "********** LA CALCULADORA HUMANA **********" << endl << endl;
    cout << "Acabas de convertirte en la calculadora humana." << endl
         << "Tienes 45 segundos para resolver mentalmente las" << endl
         << "siguientes 7 operaciones. Si no lo consigues," << endl << endl
         << "\t    ==========" << endl
         << "\t    ||MUERES||" << endl
         << "\t    ==========" << endl << endl
         << "As¡ de simple. Buena suerte." << endl << endl;
    cout << "Pulsa ENTER para empezar";
    cin.ignore();
    cout << endl << endl;

    //Cuenta atrás hasta el inicio del reloj
    cout << "El tiempo empieza en:"; for (int i=5; i>0; i--) {
        cout << " " << i;
        _sleep(1000);
    };
    cout << endl << endl;

    //Declaración de variables e inicio del contador aleatorio
    srand(time(0));
    char signo;
    int n1, n2, numSigno;
    int numeroAciertos;
    int respuesta;

    clock_t tiempo;
    tiempo = clock();

    //Valor aleatorio para el primer número
    n1 = rand() % 50 + 1;

    /*Bucle que va creando las operaciones. Solo funciona si
    tienes menos de 7 aciertos y no se ha acabado el tiempo*/
    for (numeroAciertos = 0; numeroAciertos < 7 && clock() - tiempo < 45000; true) {
        //Valor aleatorio para el segundo número y para el signo
        n2 = rand() % 50 + 1;
        numSigno = rand() % 2;

        //Asignación del signo en función del valor aleatorio de nSigno
        if (numSigno == 0) {
            signo = '-';
        } else {
            signo = '+';
        }

        /*Etiqueta para volver en caso de fallar la operación,
        para no volver a generar el signo ni los operandos.
        No afecta al programa.*/
        Fallo:
        cout << numeroAciertos + 1 << ") " << n1 << " " << signo << " " << n2  << " = "; cin >> respuesta;

        //Comprobación de la respuesta dada en función del signo obtenido
        switch (numSigno)
        {case 0:
            if (respuesta == n1 - n2) {
                numeroAciertos++;
                n1 = respuesta;
                //Estos condicionales evitan que se muestren tiempos negativos. Quedan mal.
                if (clock() - tiempo < 45000) {
                    cout << endl << "Te quedan " << 45 - (clock() - tiempo)/CLOCKS_PER_SEC << " segundos." << endl << endl;
                };
                break;
            } else {
                if (clock() - tiempo < 45000) {
                    cout << endl << "INCORRECTO. Te quedan " << 45 - (clock() - tiempo)/CLOCKS_PER_SEC << " segundos." << endl << endl;
                } else {break;};
                goto Fallo;
            }
         case 1:
            if (respuesta == n1 + n2) {
                numeroAciertos++;
                n1 = respuesta;
                if (clock() - tiempo < 45000) {
                    cout << endl << "Te quedan " << 45 - (clock() - tiempo)/CLOCKS_PER_SEC << " segundos." << endl << endl;
                };
                break;
            } else {
                if (clock() - tiempo < 45000) {
                    cout << endl << "INCORRECTO. Te quedan " << 45 - (clock() - tiempo)/CLOCKS_PER_SEC << " segundos." << endl << endl;
                } else {break;};
                goto Fallo;
            }
        };
    };

    //Mensajes finales que dependen de si has ganado o no
    if (numeroAciertos == 7) {
        cout << endl << endl << "Enhorabuena. Has vencido al ordenador. " << abrirAdmiracion << "Y te" << endl
             << "han sobrado " << 45 - (clock() - tiempo)/CLOCKS_PER_SEC << " segundos! Realmente eres una CALCULADORA HUMANA." << endl << endl;
        system("pause");
    } else {
        cout << endl << endl << "No has superado el reto y has muerto. Ahora tienes" << endl
             << "toda la eternidad para reflexionar sobre tu fracaso. Disfruta." << endl << endl;
        system("pause");
    };

    return 0;
}
Anuncios
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s