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; }