Hola gente, recurro al foro porque ya no sé qué más probar para ponerle un menú a este programa y tengo que entregarlo el Martes. GRACIAS DESDE YA POR LA AYUDA
Sé que tengo que usar una estructura while y switch pero cada vez que lo programo si no me da un error me da otro.
Alguien puede decirme qué tengo que poner y cómo para que me funcione un menu que cuando empiece el programa pregunte si quiero jugar o salir y cuando termine de jugar me diga si quiero jugar otra vez y que genere otra frase nueva para el juego?
Código C++:
Ver original#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
const int numero_intentos=7;
int rellenado (char, string, string&);
int main ()
{
string name;
int puntos=0;
char letra;
int menu;
int num_fallos=0;
string palabra_secreta;
string palabras[] =
{
"Perro",
"sandia",
"caracol",
"sorpresa",
"gato",
"queso",
"sombrero",
"neptuno",
"monje",
"ladron"
};
// seleccionamos una palabra al azar dentro de 'palabras' a la que llamamos 'palabra_secreta'
palabra_secreta=palabras[n];
// convertimos la palabra a asteriscos
string oculta(palabra_secreta.length(),'*');
// menu de bienvenida y reglas
cout << "\n\nBienvenido al ahorcado";
cout << "\n\nREGLAS:";
cout << "\n\nCada letra esta representada por un asterisco";
cout << "\n\nPuedes ingresar una o varias letras a la vez pero cada una cuenta como un intento";
cout << "\n\nAcertar suma dos puntos, errar resta uno. Siempre que resuelvas antes de que se te terminen los intentos sumas 10 puntos";
cout << "\n\nTienes " << numero_intentos << " intentos, acertar no resta intentos";
cout << "\n----------------------------------------------";
// estructura while que nos hace ingresar una letra hasta que se nos terminen los intentos
while (num_fallos < numero_intentos)
{
cout << "\n\n" << oculta;
cout << "\n\nIngresa una letra: ";
cin >> letra;
// utilizamos la función de rellenado, si la letra no está dentro de la palabra se imprime el mensaje y nos resta un punto pero si acertamos, nos suma 2 y nos imprime los puntos y el mensaje de acierto
if (rellenado(letra, palabra_secreta, oculta)==0)
{
cout << endl << "La letra no se encuentra en la palabra" << endl;
num_fallos++;
puntos -= 1;
}
else
{
cout << endl << "Has acertado una letra" << endl;
puntos += 2;
cout << endl << "Puntos: " << puntos << endl;
}
// imprime el numero de intentos que nos quedan
cout << "You have " << numero_intentos - num_fallos;
cout << " guesses left." << endl;
// comprobamos si el usuario ya ha adivinado la palabra secreta al completo
if (palabra_secreta==oculta)
{
cout << palabra_secreta << endl;
cout << "Lo conseguiste! la palabra secreta era " << palabra_secreta << endl;
puntos +=10;
cout << "Tu puntuacion es " << puntos << endl;
break;
}
}
if(num_fallos == numero_intentos)
{
cout << "\nPerdiste, se te acabaron los intentos" << endl;
cout << "La palabra era: " << palabra_secreta << endl;
}
cin.ignore();
cin.get();
return 0;
}
/* tomamos la la letra, la palabra secreta y vamos rellenando secreta_rellenar, despues devolvemos los aciertos. Si la letra
ya la probamos en un intento anterior entonces se devuelve 0 */
int rellenado (char letra_intento, string palabrasecreta, string &secreta_rellenar)
{
int i;
int aciertos=0;
int numletras=palabrasecreta.length();
for (i = 0; i< numletras; i++)
{
// si la letra ya la probamos en un intento anterior
if (letra_intento == secreta_rellenar[i])
return 0;
// si la letra esta en la palabra que tenemos que adivinar
if (letra_intento == palabrasecreta[i])
{
secreta_rellenar[i] = letra_intento;
aciertos++;
}
}
return aciertos;
}