Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/11/2015, 13:34
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Pregunta Al repetir el programa tengo problemas con fichero o logica

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...