este es el codigo sacado de un libro de programacion de video juegos, esta en ingles
/**************************************************************************************************
HANGMAN GAME
**************************************************************************************************/
#include<iostream> // preprosesador incluyendo libreria standar(encabezados)
#include<string> // libreria de cadena de caracteres. si quito esto tambien funciona
#include<vector> // archivo que contiene la definicion de vactores
#include<algorithm> // archivos que contienen las definiciones de los algoritmos de
#include<ctime>
#include<ctype> // -----> este archivo no lo identifica el compilador y el programa corre
using namespace std; // uso general de la biblioteca standar.
int main() // funcion de inicio obligatoria
{ // abre cuerpo de funcion.
const int MAX_WRONG = 8; // entero constante
vector<string> words; // vector tipo string llamado words
words.push_back("GUESS");
words.push_back("HANGMAN"); // llenando vector con 3 palabras
words.push_back("DIFFICULY");
srand(time(0));
random_shuffle(words.begin(),words.end()); // desordena vector con algoritmo random_suffle()
const string THE_WORD = words[0]; // toma la primera palabra y la almacena en
int wrong = 0; // malas adivinadas
string sofar(THE_WORD.size(),'-'); // inicializa otro string de tamaño de la palabra
// lleno de puros'-'.
string used =""; // otra string pero vaica para levar la cuenta de las letras usadas
cout<<"WELCOME TO HANGMAN. GOOD LUCK\n";
while((wrong<MAX_WRONG)&&(sofar!=THE_WORD))
{
cout<<"\n\nyou have "<<(MAX_WRONG-wrong)<<" incorrect guesses left.\n";
cout<<"\nyou used the following letters. \n"<<used<<endl;
cout<<"\nso far the word is \n"<<sofar<<endl;
char guess;
cout<<"\n\nenter your guess: ";
cin>>guess;
guess=toupper(guess); // la combierte en mayuscula
while(used.find(guess)!=string::npos) // si ya fue usada los dos valores son iguales
{
cout<<"\nyou already guess "<<guess<<endl;
cout<<"enter your guess : ";
cin>>guess;
guess=toupper(guess); // la combierte en mayuscula
}
used += guess; //suma guess a used para llevar control de las letras ya utilizadas
if(THE_WORD.find(guess)!=string::npos) // mira si guess esta en the word
{
cout<<"taht's right "<<guess<<" is in the word.\n";
for(int i=0;i<THE_WORD.length();++i) // lenght() o size() son indiferentes
if(THE_WORD[i]==guess)
sofar[i]=guess; //cambia - de la posicion de sofar por guess
}
else
{
cout<<"sorry "<<guess<<" isn't in the word.\n";
++wrong;
}
}
if(wrong==MAX_WRONG)
cout<<"\nyouhave been hanged!";
else
cout<<"\nyou guess it.";
cout<<"\nthe word was "<<THE_WORD<<endl;
system("pause"); // para congelar pantalla
return 0; // devuelve el valor iny a main para terminar satisfactoriamente el programa
} // terminacion de cuerpo de funcion.