//Busca una combinacion correcta y rellena con ella la estructura
int SearchCombination(Palabra CombRes[6],char *palabra[SIZE],int nPalabras)
{
char entrada[SIZE];
int posCaracterExtra;
int index=0,largo,encontrada=0;
int selCincoLetras,selSeisLetras,selSieteLetras,selOchoLetras,selNueveLetras;
Combinacion combinacion;
BarajarListaInicial(palabra,nPalabras);
do{
strcpy(combinacion.
cuatroLetras.
Palabra,palabra
[index
]); combinacion.cincoLetras.nEncontradas=0;
combinacion.cincoLetras.Palabras=NULL;
combinacion.seisLetras.nEncontradas=0;
combinacion.seisLetras.Palabras=NULL;
combinacion.sieteLetras.nEncontradas=0;
combinacion.sieteLetras.Palabras=NULL;
combinacion.ochoLetras.nEncontradas=0;
combinacion.ochoLetras.Palabras=NULL;
combinacion.nueveLetras.nEncontradas=0;
combinacion.nueveLetras.Palabras=NULL;
largo=MIN_LEVEL;
if(SearchNextWords(combinacion.cuatroLetras.Palabra,largo,&combinacion.cincoLetras) > 0){
do{
selCincoLetras
=rand()%combinacion.
cincoLetras.
nEncontradas; largo=MIN_LEVEL+1;
if(SearchNextWords(combinacion.cincoLetras.Palabras[selCincoLetras].Palabra,largo,&combinacion.seisLetras) > 0){
do{
selSeisLetras
=rand()%combinacion.
seisLetras.
nEncontradas; largo=MIN_LEVEL+2;
if(SearchNextWords(combinacion.seisLetras.Palabras[selSeisLetras].Palabra,largo,&combinacion.sieteLetras) > 0){
do{
selSieteLetras
=rand()%combinacion.
sieteLetras.
nEncontradas; largo=MIN_LEVEL+3;
if(SearchNextWords(combinacion.sieteLetras.Palabras[selSieteLetras].Palabra,largo,&combinacion.ochoLetras) > 0){
do{
selOchoLetras
=rand()%combinacion.
ochoLetras.
nEncontradas; largo=MIN_LEVEL+4;
if(SearchNextWords(combinacion.ochoLetras.Palabras[selOchoLetras].Palabra,largo,&combinacion.nueveLetras) > 0){
selNueveLetras
=rand()%combinacion.
nueveLetras.
nEncontradas; strcpy(CombRes
[0].
Palabra,combinacion.
cuatroLetras.
Palabra); CombRes[0].PosCaracterExtra=-1;
strcpy(CombRes
[1].
Palabra,combinacion.
cincoLetras.
Palabras[selCincoLetras
].
Palabra); CombRes[1].PosCaracterExtra=combinacion.cincoLetras.Palabras[selCincoLetras].PosCaracterExtra;
strcpy(CombRes
[2].
Palabra,combinacion.
seisLetras.
Palabras[selSeisLetras
].
Palabra); CombRes[2].PosCaracterExtra=combinacion.seisLetras.Palabras[selSeisLetras].PosCaracterExtra;
strcpy(CombRes
[3].
Palabra,combinacion.
sieteLetras.
Palabras[selSieteLetras
].
Palabra); CombRes[3].PosCaracterExtra=combinacion.sieteLetras.Palabras[selSieteLetras].PosCaracterExtra;
strcpy(CombRes
[4].
Palabra,combinacion.
ochoLetras.
Palabras[selOchoLetras
].
Palabra); CombRes[4].PosCaracterExtra=combinacion.ochoLetras.Palabras[selOchoLetras].PosCaracterExtra;
strcpy(CombRes
[5].
Palabra,combinacion.
nueveLetras.
Palabras[selNueveLetras
].
Palabra); CombRes[5].PosCaracterExtra=combinacion.nueveLetras.Palabras[selNueveLetras].PosCaracterExtra;
free(combinacion.
nueveLetras.
Palabras); combinacion.nueveLetras.Palabras=NULL;
combinacion.nueveLetras.nEncontradas=0;
encontrada=1;
}else{
EliminarPalabra(&combinacion.ochoLetras,selOchoLetras);
}
}while(encontrada == 0 &&combinacion.nueveLetras.nEncontradas < 1 && combinacion.ochoLetras.nEncontradas > 0);
free(combinacion.
ochoLetras.
Palabras); combinacion.ochoLetras.Palabras=NULL;
combinacion.ochoLetras.nEncontradas=0;
if(encontrada==0)
EliminarPalabra(&combinacion.sieteLetras,selSieteLetras);
}else{
EliminarPalabra(&combinacion.sieteLetras,selSieteLetras);
}
}while(encontrada == 0 && combinacion.ochoLetras.nEncontradas < 1 && combinacion.sieteLetras.nEncontradas > 0);
free(combinacion.
sieteLetras.
Palabras); combinacion.sieteLetras.Palabras=NULL;
combinacion.sieteLetras.nEncontradas=0;
if(encontrada==0)
EliminarPalabra(&combinacion.seisLetras,selSeisLetras);
}else{
EliminarPalabra(&combinacion.seisLetras,selSeisLetras);
}
}while(encontrada == 0 && combinacion.sieteLetras.nEncontradas < 1 && combinacion.seisLetras.nEncontradas > 0);
free(combinacion.
seisLetras.
Palabras); combinacion.seisLetras.Palabras=NULL;
combinacion.seisLetras.nEncontradas=0;
if(encontrada==0)
EliminarPalabra(&combinacion.cincoLetras,selCincoLetras);
}else{
EliminarPalabra(&combinacion.cincoLetras,selCincoLetras);
}
}while(encontrada == 0 && combinacion.seisLetras.nEncontradas < 1 && combinacion.cincoLetras.nEncontradas > 0);
free(combinacion.
cincoLetras.
Palabras); combinacion.cincoLetras.Palabras=NULL;
combinacion.cincoLetras.nEncontradas=0;
}
index++;
}while(encontrada == 0 && combinacion.cincoLetras.nEncontradas < 1 && index < nPalabras);
return encontrada;
}
//-----------------------------------------------------------------------------
//Realmente no elimina nada, lo que hace es colocar dicha palabra al final de la
//lista indicada y decrementa el valor de la variable que indica el numero de
//elementos para que deje de trabajar con dicha palabra
void EliminarPalabra(ListaPalabras *Lista,int pos)
{
int i;
if(pos < Lista->nEncontradas-1 && pos > 0)
for(i=Lista->nEncontradas-1;i>pos;i--)
memcpy(&Lista
->Palabras
[i
-1],&Lista
->Palabras
[i
],sizeof(Palabra
)); if(Lista->nEncontradas > 0)
Lista->nEncontradas--;
}
//-----------------------------------------------------------------------------
//Muestra la primera palabra con sus caracteres desordenados
int ShowFirst(char *word)
{
char cadena[MIN_LEVEL+1];
char titulo[]="* Juega a 'Adivina la palabra' *";
char barra[]="**********************************";
int largoTitulo
=strlen(titulo
); int centrado;
centrado=(80-largoTitulo)/2;
printf("%*s\n",centrado
+largoTitulo
,barra
); printf("%*s\n",centrado
+largoTitulo
,titulo
); printf("%*s\n\n",centrado
+largoTitulo
,barra
); printf("Introduce '0' y pulsa intro para salir del juego en cualquier momento.\n"); printf("Introduce '1' y pulsa intro para obtener una ayuda.\n"); printf("======================================================================\n\n");
do{
RandomCharsOfWord(word,cadena,MIN_LEVEL);
}while(strcmp(cadena
,word
)==0);
printf ("La palabra desordenada es: %s\n",cadena
); return 0;
}
//-----------------------------------------------------------------------------
//Muestra la palabra enmascarada para que la adivinemos
void ShowMask(char *word,int length,int posCharExtra,int nCaracteresAMostrar)
{
int i;
for(i=0;i<length;i++)
if(i==posCharExtra)
else if(nCaracteresAMostrar > 0){
nCaracteresAMostrar--;
}else
}
//-----------------------------------------------------------------------------
//Desordena la palabra indicada
void RandomCharsOfWord(char *word,char *result,int length)
{
int a,i,posRand;
char aux;
for(a=0;a<length;a++){
for(i=0;i<length-(1+a);i++){
aux=result[i];
result[i]=result[posRand];
result[posRand]=aux;
}
}
}