Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Nic88_bhba en 26 Diciembre 2014, 20:54 pm



Título: Problema con juego del ahorcado
Publicado por: Nic88_bhba en 26 Diciembre 2014, 20:54 pm
Hola tengo un problema con un juego del ahorcado que saque de un libro llamado
Beggining C++ que enseña programacion de juegos. El problema es que no me reconoce mas de una letra correcta ademas de la primera. No se en que le estoy errando por que esta igual que en el libro. Saludos.


#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cctype>


using namespace std;

int main(int argc, char *argv[]) {
   
   const int res_incorrectas = 8;
   
   vector<string> palabras;
   
   palabras.push_back("Adivina");
   
   palabras.push_back("Ahorcado");
   
   palabras.push_back("Dificultad");
   
   srand(time(0));
   
   random_shuffle(palabras.begin() , palabras.end());
   
   const string la_palabra = palabras[0];
   
   int error = 0;

   string hasta_ahora(la_palabra.size(), '-');
   
   string usada = "";
   
   cout << "\nBienvenido a Ahorcado V1.0\n";
   
   while ((error < res_incorrectas) && (hasta_ahora != la_palabra))
      
   {
      
      cout << "\nTienes " << (res_incorrectas - error) << " oportunidades para acertar.\n";
      
      cout << "\nHas usado las siguientes letras " << usada << "\n";
      
      cout << "\nHasta ahora la palabra es: " << hasta_ahora << "\n";
      
      
      char respuesta;
      
      cout << "\n\nIngresa una letra: ";
      
      cin >> respuesta;
      
      respuesta = toupper(respuesta);
      
      while (usada.find(respuesta) != string::npos)
         
      {
         
         cout << "\nYa has ingresado: " << respuesta << "\n";
         
         cout << "\nIngresa tu respuesta: \n";
         
         cin >> respuesta,
            
         respuesta = toupper(respuesta);
         
         
      }
      
      usada+= respuesta;
      
      if (la_palabra.find(respuesta) != string::npos)
         
      {
         cout << "\nMuy bien! " << respuesta << " esta en la palabra.\n";
         
         for (int i=0 ; i < la_palabra.length(); ++i)
         
         if (la_palabra == respuesta)
         
         {   
            
            hasta_ahora = respuesta;
         
         }
      }
      
      else
      
      {
         cout << "\nPerdon, " << hasta_ahora << " no es la palabra.\n";
      
          ++error;
         
      }
      
      
      
   }   
   
   
   if (error == res_incorrectas)
      
    {
      
      cout << "\nHas sido colgado!\n";
      
      cout << "\nLa palabra es: " << la_palabra;
      
    }
   
   else
      
      {   
         cout << "\nAcertaste!!!\n";
         
         cout << "\nLa palabra es: " << la_palabra;
      }
   
   
   return 0;


Título: Re: Problema con juego del ahorcado
Publicado por: ivancea96 en 26 Diciembre 2014, 23:59 pm
Usas toupper(), por tanto las letras del vector de palabras deberían estar todas en mayúsculas.

PD: Utiliza etiquetas GeSHi para postear código.


Título: Re: Problema con juego del ahorcado
Publicado por: patilanz en 27 Diciembre 2014, 00:09 am
Lo que dijo ivancea96 y aquí tienes otro fallo:

Código
  1. for (int i = 0; i < la_palabra.length(); ++i)
  2.  
  3. if (la_palabra == respuesta)
  4.  
  5. {
  6.  
  7. hasta_ahora = respuesta;
  8.  
  9. }
Primero el bucle mejor que lo cierres {} y tu lo que haces es comparar la palabra que es un string con la respuesta que es un char. Es como comparar si (hola == h) nunca van a ser iguales.