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:
Espero puedan ayudarme, ya no encuentro solucion.#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]; }
Marque en rojo los cambios que hize...