hola amigos, gracias por toda su ayuda.
He terminado el juego de el ahorcado pero, tengo un problema a la hora de repetirlo.
1. Termina el juego.
2. Guardo el nombre del jugador, el puntaje y la palabra que se jugo en un fichero
3. Si se repite el programa, leo esos datos y los imprimo
4. Ahora entra el problema
Screenshot:
Se supone que me permita escribir el nombre, pero no lo hace. Esto empezó cuando puse la opcion de repetir el programa y cuando puse que se muestre esos datos guardados.
Abré hecho algo mal?..
Código completo:
Código:
#include <iostream>
#include <fstream> // Librería para el manejo de archivos
#include <string> // Librería para el manejo de strings
#include <cstdlib> // Librería para el uso de system("cls"), system("pause") y atoi()
#include <cctype> // Librería para clasificar y transformar caracteres individuales
using namespace std;
bool ValidarNombreJugador(string NombreJugador);
bool ValidarNumeroIngresado(string NumeroLetras);
bool ValidarPalabra(int NumeroLetras, fstream &FicheroPalabras);
void GuardarScore(string NombreJugador, string Palabra, int Intentos, fstream &FicheroScore);
void ProximaParteDibujo(int Linea);
string PalabraAdivinar;
int main()
{
int RepetirPrograma = 1;
bool VecesJugado = false;
do
{
system("cls");
fstream FicheroPalabras, FicheroScore;
string NombreJugador, NumeroLetras, Respuesta;
char Letra;
int i, Intentos = 0, y = 0;
const int MAX_INTENTOS = 7;
bool LetraEncontrada = false, LetraRepetida = false;
/* Creamos el fichero con las palabras a adivinar
------------------------------------------------------------------------*/
cout << "Creando fichero con palabras..." << endl;
FicheroPalabras.open("palabras.txt", ios::out);
FicheroPalabras << "baloncesto\n";
FicheroPalabras << "atletismo\n";
FicheroPalabras << "natacion\n";
FicheroPalabras << "beisbol\n";
FicheroPalabras << "futbol\n";
FicheroPalabras << "rugby\n";
FicheroPalabras << "golf";
FicheroPalabras.close();
cout << "Fichero creado exitosamente..." << endl;
/* Header del programa
------------------------------------------------------------------------*/
cout << "\nJuego de El Ahorcado\n--------------------" << endl;
cout << "Tema: Deportes\n" << endl;
/* Mostramos el score del jugador anterior
------------------------------------------------------------------------*/
if (VecesJugado == true)
{
string Nombre, Palabra, Numero;
FicheroScore.open("score.txt", ios::in);
FicheroScore >> Nombre >> Palabra >> Numero;
cout << "BEST SCORE por " << Nombre << " con la palabra " << Palabra << " en " << Numero << " intentos." << endl;
FicheroScore.close();
}
/* Content del programa
------------------------------------------------------------------------*/
do
{
cout << "Escribe tu primer nombre: ";
getline(cin, NombreJugador);
} while(ValidarNombreJugador(NombreJugador));
do
{
cout << "N\243mero de letras de la palabra: ";
getline(cin, NumeroLetras);
} while(!ValidarNumeroIngresado(NumeroLetras) || ValidarPalabra(atoi(NumeroLetras.c_str()), FicheroPalabras));
Respuesta = "";
for (int i = 0; i < PalabraAdivinar.size(); i++)
{
Respuesta += "_";
}
system("pause");
do
{
system("cls");
cout << "-------------------------------------------" << endl;
cout << "| A D I V I N A L A P A L A B R A |";
cout << "\n-------------------------------------------" << endl;
cout << " INTENTOS: " << Intentos << " de " << MAX_INTENTOS << endl;
cout << endl;
for(i = 0; i < Respuesta.size(); i++)
{
cout << (char)toupper(Respuesta[i]) << " ";
}
cout << endl;
ProximaParteDibujo(Intentos);
if (LetraRepetida)
{
cout << "\n\tAviso!, letra ya ingresada..." << endl;
}
y = PalabraAdivinar.compare(Respuesta);
if (y == 0)
break;
do
{
cout << "\nIntroduzca una letra ==> ";
cin >> Letra;
Letra = tolower(Letra);
cout << "\n\tAviso!, solo se permiten letras..." << endl;
} while(!isalpha(Letra));
LetraEncontrada = false;
LetraRepetida = false;
for(i = 0; i < PalabraAdivinar.size(); i++)
{
if (Letra == Respuesta[i])
{
LetraRepetida = true;
}
if (Letra == tolower(PalabraAdivinar[i]))
{
Respuesta[i] = Letra;
LetraEncontrada = true;
}
}
if (!LetraEncontrada)
{
Intentos++;
}
} while(Intentos < MAX_INTENTOS);
if (Intentos == MAX_INTENTOS || y == 0)
{
if (y == 0)
{
cout << "\nFELICIDADES!, adivinaste la palabra..." << endl;
}
else
{
system("cls");
cout << "-------------------------------------------" << endl;
cout << "| A D I V I N A L A P A L A B R A |";
cout << "\n-------------------------------------------" << endl;
cout << " INTENTOS: " << Intentos << " de " << MAX_INTENTOS << endl;
cout << endl;
for(i = 0; i < Respuesta.size(); i++)
{
cout << (char)toupper(Respuesta[i]) << " ";
}
cout << endl;
ProximaParteDibujo(Intentos);
cout << "\nINCORRECTO!, la palabra correcta era \"" << PalabraAdivinar << "\"." << endl;
cout << "\n|====================================|" << endl;
cout << "|\tFIN\tDEL\tJUEGO\t |" << endl;
cout << "|====================================|" << endl;
}
}
//Guardamos el Score en otro fichero
GuardarScore(NombreJugador, PalabraAdivinar, Intentos, FicheroScore);
VecesJugado = true;
cout << "\nDes\202a jugar otra vez? (OTRO NUMERO = SI, 0 = NO) ==> ";
cin >> RepetirPrograma;
} while(RepetirPrograma != 0);
return 0;
}
/* Validar el nombre del jugador
------------------------------------------------------------------------*/
bool ValidarNombreJugador(string NombreJugador)
{
int i = 0, Salir = 0;
while(NombreJugador[i])
{
if (isalpha(NombreJugador[i]))
Salir++;
else
Salir = 0;
i++;
}
if (Salir == NombreJugador.size())
{
cout << "\n\tEnhorabuena!, nombre v\240lido...\n" << endl;
return false;
}
else
{
cout << "\n\tError!, nombre inv\240lido...\n" << endl;
return true;
}
}
/* Validar el número ingresado
------------------------------------------------------------------------*/
bool ValidarNumeroIngresado(string NumeroLetras)
{
if (isdigit(NumeroLetras[0]))
{
cout << "\n\tEnhorabuena!, n\243mero v\240lido...\n" << endl;
return true;
}
else
{
cout << "\n\tError!, n\243mero inv\240lido...\n" << endl;
return false;
}
}
/* Validar que exista una palabra con el número de letras ingresado
------------------------------------------------------------------------*/
bool ValidarPalabra(int NumeroLetras, fstream &FicheroPalabras)
{
string Palabra;
bool PalabraEncontrada = true;
int Resultado;
FicheroPalabras.open("palabras.txt", ios::in);
while (PalabraEncontrada)
{
if (FicheroPalabras.eof())
{
PalabraEncontrada = false;
Resultado = 1;
}
else
{
getline(FicheroPalabras, Palabra);
if (Palabra.size() == NumeroLetras)
{
PalabraAdivinar = Palabra; //Guardamos la palabra en una variable global
PalabraEncontrada = false;
Resultado = 2;
}
}
}
FicheroPalabras.close();
if (Resultado == 1)
{
cout << "\tError!, no hay palabras de " << NumeroLetras << " letras en el juego...\n" << endl;
return true;
}
else
{
cout << "\tEnhorabuena!, palabra de " << NumeroLetras << " letras encontrada..." << endl;
return false;
}
}
/* Guardamos el score en otro fichero
------------------------------------------------------------------------*/
void GuardarScore(string NombreJugador, string Palabra, int Intentos, fstream &FicheroScore)
{
cout << "\nGuardando el score en otro fichero..." << endl;
FicheroScore.open("score.txt", ios::out);
FicheroScore << NombreJugador << endl;
FicheroScore << Palabra << endl;
FicheroScore << Intentos;
FicheroScore.close();
cout << "Fichero creado exitosamente..." << endl;
}
/* El muñeco ahorcado
------------------------------------------------------------------------*/
void ProximaParteDibujo(int Linea)
{
string dibujo[] =
{
"__________\n",
"| | \n",
"| | \n",
"| O \n",
"| /{ }\\\n",
"| [ ] \n",
"| _| |_ \n"
};
for (int i = 0; i < Linea; i++)
cout << dibujo[i];
}
Espero puedan ayudarme, ya no encuentro solucion.
Marque en rojo los cambios que hize...