#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define MAX_PALABRAS 10
#define MAX_INTENTOS 8
void mostrar(char* cad, int* aciertos);
void estaLetra(char letra,char *cad, int* aciertos);
int comprobado(char* cad,int* aciertos);
int main ()
{
char cadenas[MAX_PALABRAS][MAX_INTENTOS+1];
char *cad;
int i, n_palabra, n_intentos, *aciertos;
char letra;
int ganar;
srand(time(NULL));
i = 0;
do{
printf("Introduce una palabra de como máximo %d caracteres: \n",MAX_INTENTOS);
scanf("%s",cadenas[i]);
i++;
}while (i<MAX_PALABRAS);
if (i==MAX_PALABRAS)
printf("Ya ha introducido el número máximo de palabras permitidas\n\n");
n_palabra = rand()%MAX_PALABRAS;
cad = cadenas[n_palabra]; // cad contiene la palabra a adivinar
aciertos = (int *) malloc (sizeof(int)*strlen(cad)); // aciertos contendrá 0 en las posiciones por acertar y 1 en las acertadas
//inicializamos aciertos a todo 0
for (i=0; i<strlen(cad)-1; i++) {
aciertos[i]=0;
}
aciertos[strlen(cad)]=1;//el intro del final
n_intentos = MAX_INTENTOS;
do{
printf("Introduzca una letra. Tiene %d intentos.\n",n_intentos);
printf("La palabra a adivinar es: ");
mostrar(cad,aciertos);
//leemos la letra
while(getchar()!='\n');
scanf("%c",&letra);
//la buscamos en la palabra
estaLetra(letra,cad,aciertos);
//comprobamos si ya hemos adivinado la palabra
if (ganar = comprobado(cad,aciertos))
printf("Enhorabuena! Ha adivinado la palabra! La palabra era %s \n",cad);
else {
n_intentos--;
}
}while((!ganar) && (n_intentos>0));
if (n_intentos==0)
printf("Lo sentimos! Ha perdido! La palabra era %s \n",cad);
return 0;
}
void mostrar(char* cad, int* aciertos){
int i;
for (i=0; i<strlen(cad); i++) {
if (aciertos[i]==1)
printf(" %c ",cad[i]);
else
printf(" - ");
}
printf("\n");
}
void estaLetra(char letra,char *cad, int* aciertos){
int i;
for (i=0; i<strlen(cad); i++) {
if (cad[i]==letra)
aciertos[i]=1;
}
}
int comprobado(char *cad,int* aciertos){
int i;
int terminado = 1; //supongo que ya acerté todas...
for (i=0; i<strlen(cad); i++) {
if (aciertos[i]==0) {
terminado = 0;
}
}
return terminado;
}