elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] Simple juego.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Simple juego.  (Leído 3,287 veces)
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
[Ayuda] Simple juego.
« en: 22 Julio 2013, 20:09 pm »

Bueno es que estaba aburrido y me puse a programar un juego muy sencillo que trata sobre meter un numero entre el 1 y el 15 y tú compañero tiene que adivinarlo. Pero lo que quiero hacer es que no se puedan ingresar letras solo números acá esta el código:

Código
  1. #include <iomanip>
  2. #include <cstdlib>
  3. #include <windows.h>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. bool Ingreso_Numero(int* pNumero);
  9. bool Adivina_Numero(int* pNumero);
  10.  
  11. int main()
  12. {
  13.   int numero;
  14.  
  15.   if(Ingreso_Numero(&numero))
  16.    {
  17.        system("cls");
  18.        system("color 2");
  19.        cout << "________________________________________________________________________________" << endl;
  20.        cout << setw(60) << "*** Felicidades has ganado el juego! ***\n" << endl;
  21.        cout << setw(50) << "|| El numero correcto es: " << numero << " ||\n" << endl;
  22.        cout << setw(53) << "*** Gracias Por Jugar! ***" << endl;
  23.        cout << "________________________________________________________________________________" << endl;
  24.    }
  25.  
  26.    else
  27.    {
  28.        cout << endl;
  29.        system("color 4");
  30.        cout << "----------------------------------------------------------" << endl;
  31.        cout << "Has perdido! \nEl numero correcto era: " << numero << endl;
  32.        cout << "Trata nuevamente en la proxima..." << endl;
  33.        cout << "-----------------------------------------------------------" << endl;
  34.    }
  35.  
  36.    system("pause>nul");
  37.  
  38.    return 0;
  39. }
  40.  
  41. bool Ingreso_Numero(int* pNumero)
  42. {
  43.    char Decision;
  44.  
  45.    Introduce_Numero:
  46.  
  47.    cout << "Introduce el numero para que adivine tu rival (1-15): ";
  48.    cin >> *pNumero;
  49.  
  50.    Repeticion2:
  51.  
  52.    if(*pNumero > 15)
  53.    {
  54.        cout << endl;
  55.  
  56.        cout << "El numero ingresado es demasiado alto. " << endl;
  57.  
  58.        Introduce_Numero_Alto:
  59.  
  60.        cout << endl;
  61.  
  62.        cout << "Introduce el numero para que adivine tu rival (1-15): ";
  63.        cin >> *pNumero;
  64.  
  65.        if(*pNumero > 15)
  66.        {
  67.            cout << endl;
  68.            cout << "El numero ingresado es demasiado alto. " << endl;
  69.            goto Introduce_Numero_Alto;
  70.        }
  71.    }
  72.  
  73.    if(*pNumero < 1)
  74.    {
  75.        cout << endl;
  76.        cout << "El numero ingresado es demasiado bajo." << endl;
  77.  
  78.        Introduce_Numero_Bajo:
  79.  
  80.        cout << endl;
  81.  
  82.        cout << "Introduce el numero para que adivine tu rival (1-15): ";
  83.        cin >> *pNumero;
  84.  
  85.        if(*pNumero < 1)
  86.        {
  87.            cout << endl;
  88.            cout << "El numero ingresado es demasiado bajo. " << endl;
  89.            goto Introduce_Numero_Bajo;
  90.        }
  91.  
  92.        if(*pNumero > 15)
  93.        {
  94.            goto Repeticion2;
  95.        }
  96.    }
  97.  
  98.    if(*pNumero >= 1 && *pNumero <= 15)
  99.    {
  100.        Decision_Error:
  101.  
  102.        cout << endl;
  103.  
  104.        cout << "Estas seguro que deseas que tu rival adivine este numero S/N: ";
  105.        cin >> Decision;
  106.  
  107.        if(Decision == 'N' || Decision == 'n')
  108.        {
  109.            cout << endl;
  110.            goto Introduce_Numero;
  111.        }
  112.  
  113.        else if((Decision != 'S' && Decision != 's') && (Decision != 'N' && Decision != 'n'))
  114.        {
  115.            cout << endl;
  116.            cout << "Has introducido una decision erronea, intentalo nuevamente." << endl;
  117.            cout << endl;
  118.            goto Decision_Error;
  119.        }
  120.  
  121.        else if(Decision == 'S' || Decision == 's')
  122.        {
  123.            cout << endl;
  124.            system("cls");
  125.  
  126.            for(int x = 5 ; x > 0 ; x--)
  127.            {
  128.                cout << "El juego comenzara en: " << x << endl;
  129.                Sleep(1000);
  130.                system("cls");
  131.            }
  132.            return Adivina_Numero(pNumero);
  133.        }
  134.    }
  135. }
  136.  
  137. bool Adivina_Numero(int* pNumero)
  138. {
  139.    int Contador_Vidas;
  140.    int COMP_Numero;
  141.  
  142.    cout << "Tienes 5 intentos para adivinar el numero." << endl << endl;
  143.  
  144.    for(Contador_Vidas = 5 ; Contador_Vidas > 0 ; Contador_Vidas--)
  145.    {
  146.        cout << endl;
  147.  
  148.        repeticion:
  149.  
  150.        if(Contador_Vidas == 1)
  151.        {
  152.            cout << endl;
  153.  
  154.            cout << "Te queda: " << Contador_Vidas << " vida." << endl;
  155.            cout << "Ingresa un numero: "; cin >> COMP_Numero;
  156.  
  157.            if(COMP_Numero <= 0 || COMP_Numero > 15)
  158.            {
  159.                if(COMP_Numero <= 0)
  160.                {
  161.                    cout << endl;
  162.  
  163.                    cout << "El numero ingresado es demasiado bajo."<< endl;
  164.  
  165.                    goto repeticion;
  166.                }
  167.  
  168.                else if(COMP_Numero > 15)
  169.                {
  170.                    cout << endl;
  171.  
  172.                    cout << "El numero ingresado es demasiado alto.";
  173.  
  174.                    goto repeticion;
  175.                }
  176.            }
  177.        }
  178.  
  179.        else
  180.        {
  181.            cout << endl;
  182.  
  183.            cout << "Te quedan: " << Contador_Vidas << " vidas." << endl;
  184.            cout << "Ingresa un numero: "; cin >> COMP_Numero;
  185.  
  186.            if(COMP_Numero <= 0 || COMP_Numero > 15)
  187.            {
  188.                if(COMP_Numero <= 0)
  189.                {
  190.                    cout << endl;
  191.                    cout << "El numero ingresado es demasiado bajo.";
  192.                    cout << endl;
  193.  
  194.                    goto repeticion;
  195.                }
  196.  
  197.                else if(COMP_Numero > 15)
  198.                {
  199.                    cout << endl;
  200.                    cout << "El numero ingresado es demasiado alto.";
  201.                    cout << endl;
  202.  
  203.                    goto repeticion;
  204.                }
  205.            }
  206.        }
  207.  
  208.        if(COMP_Numero == *pNumero)
  209.        {
  210.            return true;
  211.        }
  212.  
  213.        else
  214.        {
  215.            continue;
  216.        }
  217.    }
  218.  
  219.    return false;
  220. }
  221.  


« Última modificación: 22 Julio 2013, 20:12 pm por Zodiak98 » En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: [Ayuda] Simple juego.
« Respuesta #1 en: 22 Julio 2013, 23:57 pm »

bastaría con un
Código:
		if (!pNumero)
{
cout << "EROR";
exit(0);
}
en el caso de que pNumero sea int.

Usas demasiados gotos que no estan recomendados y duplicas ifs cuando no es necesario.
Te dejo aqui tu código que retoque, seguramente no es perfecto pero en vez de usar gotos uso whiles y resumo algunos ifs.

Código
  1. #include <iomanip>
  2. #include <cstdlib>
  3. #include <windows.h>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. int Ingreso_Numero();
  9. bool Adivina_Numero(int pNumero);
  10.  
  11. int main()
  12. {
  13. int numero = Ingreso_Numero();
  14. if( Adivina_Numero(numero)==true)
  15.  {
  16.      system("cls");
  17.      system("color 2");
  18.      cout << "________________________________________________________________________________" << endl;
  19.      cout << setw(60) << "*** Felicidades has ganado el juego! ***\n" << endl;
  20.      cout << setw(50) << "|| El numero correcto es: " << numero << " ||\n" << endl;
  21.      cout << setw(53) << "*** Gracias Por Jugar! ***" << endl;
  22.      cout << "________________________________________________________________________________" << endl;
  23.  }
  24.  else
  25.  {
  26.      cout << endl;
  27.      system("color 4");
  28.      cout << "----------------------------------------------------------" << endl;
  29.      cout << "Has perdido! \nEl numero correcto era: " << numero << endl;
  30.      cout << "Trata nuevamente en la proxima..." << endl;
  31.      cout << "-----------------------------------------------------------" << endl;
  32.  }
  33.  system("pause>nul");
  34.  return 0;
  35. }
  36.  
  37. int Ingreso_Numero()
  38. {
  39. int pNumero;
  40. char Decision;
  41.  
  42. while (Decision == 'N' || Decision == 'n'|| pNumero > 15 || pNumero < 1)
  43. {
  44.  cout << "Introduce el numero para que adivine tu rival (1-15): ";
  45.  cin >> pNumero;
  46.  
  47. if (!pNumero)
  48. {
  49. cout << "EROR";
  50. exit(0);
  51. }  
  52.  
  53.  if (pNumero > 15)
  54.  {
  55.      cout << endl;
  56.      cout << "El numero ingresado es demasiado alto. " << endl;
  57.    } else  if (pNumero < 1)
  58.  {
  59.      cout << endl;
  60.      cout << "El numero ingresado es demasiado bajo." << endl;
  61.   } else {
  62. cout << endl;
  63. cout << "Estas seguro que deseas que tu rival adivine este numero S/N: ";
  64. cin >> Decision;
  65.  
  66. while (Decision != 'N' && Decision != 'n' && Decision != 'S' && Decision != 's')
  67.  {
  68. cout << endl;
  69.        cout << "Has introducido una decision erronea, intentalo nuevamente." << endl;
  70.        cout << endl;
  71. cin >> Decision;
  72. }
  73. system("cls");
  74. }
  75. }
  76.  
  77.          for(int x = 5 ; x > 0 ; x--)
  78.          {
  79.              cout << "El juego comenzara en: " << x << endl;
  80.              Sleep(1000);
  81.  system("cls");
  82.          }
  83.          return pNumero;
  84. }
  85.  
  86. bool Adivina_Numero(int pNumero)
  87. {
  88.  int Contador_Vidas;
  89.  int COMP_Numero;
  90.  
  91.  cout << "Tienes 5 intentos para adivinar el numero." << endl << endl;
  92.  
  93.  for(Contador_Vidas = 5 ; Contador_Vidas > 0 ; Contador_Vidas--)
  94.  {
  95.  cout << endl;
  96.          cout << endl;
  97.  if (Contador_Vidas == 1) {
  98.          cout << "Te queda: " << Contador_Vidas << " vida." << endl;
  99.  } else {
  100.   cout << "Te quedan: " << Contador_Vidas << " vida." << endl;
  101.   }
  102.          cout << "Ingresa un numero: "; cin >> COMP_Numero;
  103.  
  104.              if(COMP_Numero <= 0)
  105.              {
  106.                  cout << endl << "El numero ingresado es demasiado bajo."<< endl;
  107.  Contador_Vidas++;
  108.              } else if(COMP_Numero > 15)  {
  109.                  cout  << endl<< "El numero ingresado es demasiado alto.";
  110.  Contador_Vidas++;
  111.               } else if(COMP_Numero == pNumero) {
  112. return true;
  113. }
  114.  }
  115.  return false;
  116. }
  117.  
  118.  


« Última modificación: 23 Julio 2013, 10:29 am por Stakewinner00 » En línea

z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: [Ayuda] Simple juego.
« Respuesta #2 en: 23 Julio 2013, 01:14 am »

Yo aviso que el resultado de numero cuando se acaba el juego no es certero así que.. :silbar:
En línea


Interesados hablad por Discord.
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: [Ayuda] Simple juego.
« Respuesta #3 en: 23 Julio 2013, 10:04 am »

No hay nada peor que ayudar y equivocarte tu jaja.

De todos modos si que el código se puede reducir notablemente. En vez de usar esto

Código:
if(Contador_Vidas == 1)
       {
 
           if(COMP_Numero <= 0 || COMP_Numero > 15)
           {
               if(COMP_Numero <= 0)
               {
               }
 
               else if(COMP_Numero > 15)
               {
               }
           }
       }
 
       else
       {
           if(COMP_Numero <= 0 || COMP_Numero > 15)
           {
               if(COMP_Numero <= 0)
               {
               }
 
               else if(COMP_Numero > 15)
               {
               }
           }
       }
 
       if(COMP_Numero == *pNumero)
       {
       }
 
       else
       {
       }
   }

puedes hacer lo siguiente y en medio pus pones lo que haga falta

Código:
 
           if(COMP_Numero <= 0 || COMP_Numero > 15)
           {
if(Contador_Vidas == 1)
{}
               if(COMP_Numero <= 0)
               {
               }
 
               else if(COMP_Numero > 15)
               {
               }
           }
       } else if
       {
       } else if(COMP_Numero == *pNumero)
       {
       }
 
       else
       {
       }
   }

SALUDOS
« Última modificación: 23 Julio 2013, 10:08 am por Stakewinner00 » En línea

z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: [Ayuda] Simple juego.
« Respuesta #4 en: 23 Julio 2013, 12:08 pm »

No se... Yo cuando he acabado el juego el juego me ha dicho que el numero que yo había ingresado era 1198 no se cuanto mil más. xD
En línea


Interesados hablad por Discord.
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: [Ayuda] Simple juego.
« Respuesta #5 en: 23 Julio 2013, 12:39 pm »

Eso era antes. Bueno la duda del usuario esta respondida, haber si le sirve o no lo del
Código:
		if (!pNumero)
{
cout << "EROR";
exit(0);
}
el probelma de esto es que en punteros no funciona. Vaya forma de complicarse la vida tiene Zodiak98
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [Ayuda] Simple juego.
« Respuesta #6 en: 23 Julio 2013, 18:26 pm »

Bueno es que estaba aburrido y me puse a programar un juego muy sencillo que trata sobre meter un numero entre el 1 y el 15 y tú compañero tiene que adivinarlo. Pero lo que quiero hacer es que no se puedan ingresar letras solo números
Con solo C++ estándar hay que limitarse a la validación una vez se genere el texto.

Debes leer una linea verificando que la lectura del entero sea exitosa y el siguiente carácter sea el avance de linea. Por ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <limits>
  7. using std::numeric_limits;
  8.  
  9. int main()
  10. {
  11.   int num;
  12.   bool ok = false;
  13.   bool error_critico = false;
  14.  
  15.   do {
  16.      cout << "Teclea un numero: ";
  17.      if (cin >> num && cin.get() == '\n')
  18.         ok = true;
  19.      else if (cin.eof() || cin.bad())
  20.         error_critico = true;
  21.      else {
  22.         cout << "Entrada no valida" << endl;
  23.         cin.clear();
  24.         cin.ignore(numeric_limits<int>::max(), '\n');
  25.      }
  26.   }while (!ok && !error_critico);
  27.  
  28.   cout << endl;
  29.  
  30.   if (ok)
  31.      cout << "El numero es " << num << endl;
  32.   else
  33.      cout << "Error critico en la lectura" << endl;
  34.  
  35.   return 0;
  36. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Ayuda] Simple juego.
« Respuesta #7 en: 24 Julio 2013, 03:35 am »

Ya logre resolver el problema gracias por su ayuda de todos modos. :) Ahora que me doy cuenta en vez de usar tantos if y goto hubiera usado un while jaja perdonen esa estúpides estaba medio dormido. >_< Y sobre los punteros pues en la segunda función no lo use para nada hice un copia y pega de la primera función y solo cambie el nombre, pero si lo necesitaba en la primera. Como dije estaba medio  dormido. Hehehe xDD
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Simple juego « 1 2 »
Programación Visual Basic
vivachapas 12 4,726 Último mensaje 10 Noviembre 2008, 02:00 am
por vivachapas
ayuda muy simple =)
PHP
DarkFire 6 3,312 Último mensaje 11 Abril 2009, 10:46 am
por decrypt
AYUDA!!!!!Es muy Simple!!
Programación Visual Basic
prometheus48 6 2,685 Último mensaje 27 Octubre 2011, 00:22 am
por ignorantev1.1
Un simple parche dispara el rendimiento de un juego en AMD Ryzen
Noticias
wolfbcn 0 1,069 Último mensaje 30 Marzo 2017, 21:44 pm
por wolfbcn
Ayuda Simple DnsCrypt
Redes
lafacil 0 1,660 Último mensaje 10 Febrero 2022, 12:13 pm
por lafacil
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines