Problema con juego del ahorcado

Iniciado por Nic88_bhba, 26 Diciembre 2014, 20:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Nic88_bhba

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;

ivancea96

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.

patilanz

Lo que dijo ivancea96 y aquí tienes otro fallo:

Código (cpp) [Seleccionar]
for (int i = 0; i < la_palabra.length(); ++i)

if (la_palabra == respuesta)

{

hasta_ahora = respuesta;

}

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.