Ver Mensaje Individual
  #19 (permalink)  
Antiguo 20/11/2015, 07:12
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 10 meses
Puntos: 3
Respuesta: problema con juego de palabras

Y otras de las funciones que no me dejaba ponerlo todo junto porque es muy largo:
Código C:
Ver original
  1. //Busca una combinacion correcta y rellena con ella la estructura
  2. int SearchCombination(Palabra CombRes[6],char *palabra[SIZE],int nPalabras)
  3. {
  4.    char entrada[SIZE];
  5.    int posCaracterExtra;
  6.    int index=0,largo,encontrada=0;
  7.    int selCincoLetras,selSeisLetras,selSieteLetras,selOchoLetras,selNueveLetras;
  8.    Combinacion combinacion;
  9.  
  10.    BarajarListaInicial(palabra,nPalabras);
  11.  
  12.    do{
  13.       strcpy(combinacion.cuatroLetras.Palabra,palabra[index]);
  14.       combinacion.cincoLetras.nEncontradas=0;
  15.       combinacion.cincoLetras.Palabras=NULL;
  16.       combinacion.seisLetras.nEncontradas=0;
  17.       combinacion.seisLetras.Palabras=NULL;
  18.       combinacion.sieteLetras.nEncontradas=0;
  19.       combinacion.sieteLetras.Palabras=NULL;
  20.       combinacion.ochoLetras.nEncontradas=0;
  21.       combinacion.ochoLetras.Palabras=NULL;
  22.       combinacion.nueveLetras.nEncontradas=0;
  23.       combinacion.nueveLetras.Palabras=NULL;
  24.       largo=MIN_LEVEL;
  25.       if(SearchNextWords(combinacion.cuatroLetras.Palabra,largo,&combinacion.cincoLetras) > 0){
  26.          do{
  27.             selCincoLetras=rand()%combinacion.cincoLetras.nEncontradas;
  28.             largo=MIN_LEVEL+1;
  29.             if(SearchNextWords(combinacion.cincoLetras.Palabras[selCincoLetras].Palabra,largo,&combinacion.seisLetras) > 0){
  30.                do{
  31.                   selSeisLetras=rand()%combinacion.seisLetras.nEncontradas;
  32.                   largo=MIN_LEVEL+2;
  33.                   if(SearchNextWords(combinacion.seisLetras.Palabras[selSeisLetras].Palabra,largo,&combinacion.sieteLetras) > 0){
  34.                      do{
  35.                         selSieteLetras=rand()%combinacion.sieteLetras.nEncontradas;
  36.                         largo=MIN_LEVEL+3;
  37.                         if(SearchNextWords(combinacion.sieteLetras.Palabras[selSieteLetras].Palabra,largo,&combinacion.ochoLetras) > 0){
  38.                            do{
  39.                               selOchoLetras=rand()%combinacion.ochoLetras.nEncontradas;
  40.                               largo=MIN_LEVEL+4;
  41.                               if(SearchNextWords(combinacion.ochoLetras.Palabras[selOchoLetras].Palabra,largo,&combinacion.nueveLetras) > 0){
  42.                                  selNueveLetras=rand()%combinacion.nueveLetras.nEncontradas;
  43.                                  strcpy(CombRes[0].Palabra,combinacion.cuatroLetras.Palabra);
  44.                                  CombRes[0].PosCaracterExtra=-1;
  45.                                  strcpy(CombRes[1].Palabra,combinacion.cincoLetras.Palabras[selCincoLetras].Palabra);
  46.                                  CombRes[1].PosCaracterExtra=combinacion.cincoLetras.Palabras[selCincoLetras].PosCaracterExtra;
  47.                                  strcpy(CombRes[2].Palabra,combinacion.seisLetras.Palabras[selSeisLetras].Palabra);
  48.                                  CombRes[2].PosCaracterExtra=combinacion.seisLetras.Palabras[selSeisLetras].PosCaracterExtra;
  49.                                  strcpy(CombRes[3].Palabra,combinacion.sieteLetras.Palabras[selSieteLetras].Palabra);
  50.                                  CombRes[3].PosCaracterExtra=combinacion.sieteLetras.Palabras[selSieteLetras].PosCaracterExtra;
  51.                                  strcpy(CombRes[4].Palabra,combinacion.ochoLetras.Palabras[selOchoLetras].Palabra);
  52.                                  CombRes[4].PosCaracterExtra=combinacion.ochoLetras.Palabras[selOchoLetras].PosCaracterExtra;
  53.                                  strcpy(CombRes[5].Palabra,combinacion.nueveLetras.Palabras[selNueveLetras].Palabra);
  54.                                  CombRes[5].PosCaracterExtra=combinacion.nueveLetras.Palabras[selNueveLetras].PosCaracterExtra;
  55.                                  free(combinacion.nueveLetras.Palabras);
  56.                                  combinacion.nueveLetras.Palabras=NULL;
  57.                                  combinacion.nueveLetras.nEncontradas=0;
  58.                                  encontrada=1;
  59.                               }else{
  60.                                  EliminarPalabra(&combinacion.ochoLetras,selOchoLetras);
  61.                               }
  62.                            }while(encontrada == 0 &&combinacion.nueveLetras.nEncontradas < 1 && combinacion.ochoLetras.nEncontradas > 0);
  63.                            free(combinacion.ochoLetras.Palabras);
  64.                            combinacion.ochoLetras.Palabras=NULL;
  65.                            combinacion.ochoLetras.nEncontradas=0;
  66.                            if(encontrada==0)
  67.                               EliminarPalabra(&combinacion.sieteLetras,selSieteLetras);
  68.                         }else{
  69.                            EliminarPalabra(&combinacion.sieteLetras,selSieteLetras);
  70.                         }
  71.                      }while(encontrada == 0 && combinacion.ochoLetras.nEncontradas < 1 && combinacion.sieteLetras.nEncontradas > 0);
  72.                      free(combinacion.sieteLetras.Palabras);
  73.                      combinacion.sieteLetras.Palabras=NULL;
  74.                      combinacion.sieteLetras.nEncontradas=0;
  75.                      if(encontrada==0)
  76.                         EliminarPalabra(&combinacion.seisLetras,selSeisLetras);
  77.                   }else{
  78.                      EliminarPalabra(&combinacion.seisLetras,selSeisLetras);
  79.                   }
  80.                }while(encontrada == 0 && combinacion.sieteLetras.nEncontradas < 1 && combinacion.seisLetras.nEncontradas > 0);
  81.                free(combinacion.seisLetras.Palabras);
  82.                combinacion.seisLetras.Palabras=NULL;
  83.                combinacion.seisLetras.nEncontradas=0;
  84.                if(encontrada==0)
  85.                   EliminarPalabra(&combinacion.cincoLetras,selCincoLetras);
  86.             }else{
  87.                EliminarPalabra(&combinacion.cincoLetras,selCincoLetras);
  88.             }
  89.          }while(encontrada == 0 && combinacion.seisLetras.nEncontradas < 1 && combinacion.cincoLetras.nEncontradas > 0);
  90.          free(combinacion.cincoLetras.Palabras);
  91.          combinacion.cincoLetras.Palabras=NULL;
  92.          combinacion.cincoLetras.nEncontradas=0;
  93.       }
  94.       index++;
  95.    }while(encontrada == 0 && combinacion.cincoLetras.nEncontradas < 1 && index < nPalabras);
  96.    return encontrada;
  97. }
  98. //-----------------------------------------------------------------------------
  99.  
  100. //Realmente no elimina nada, lo que hace es colocar dicha palabra al final de la
  101. //lista indicada y decrementa el valor de la variable que indica el numero de
  102. //elementos para que deje de trabajar con dicha palabra
  103. void EliminarPalabra(ListaPalabras *Lista,int pos)
  104. {
  105.    int i;
  106.    if(pos < Lista->nEncontradas-1 && pos > 0)
  107.       for(i=Lista->nEncontradas-1;i>pos;i--)
  108.          memcpy(&Lista->Palabras[i-1],&Lista->Palabras[i],sizeof(Palabra));
  109.    if(Lista->nEncontradas > 0)
  110.       Lista->nEncontradas--;
  111. }
  112. //-----------------------------------------------------------------------------
  113.  
  114. //Muestra la primera palabra con sus caracteres desordenados
  115. int ShowFirst(char *word)
  116. {
  117.    char cadena[MIN_LEVEL+1];
  118.    char titulo[]="*  Juega a 'Adivina la palabra'  *";
  119.    char barra[]="**********************************";
  120.    int largoTitulo=strlen(titulo);
  121.    int centrado;
  122.  
  123.    centrado=(80-largoTitulo)/2;
  124.    printf("%*s\n",centrado+largoTitulo,barra);
  125.    printf("%*s\n",centrado+largoTitulo,titulo);
  126.    printf("%*s\n\n",centrado+largoTitulo,barra);
  127.    printf("Introduce '0' y pulsa intro para salir del juego en cualquier momento.\n");
  128.    printf("Introduce '1' y pulsa intro para obtener una ayuda.\n");
  129.    printf("======================================================================\n\n");
  130.  
  131.    do{
  132.       RandomCharsOfWord(word,cadena,MIN_LEVEL);
  133.    }while(strcmp(cadena,word)==0);
  134.  
  135.    printf ("La palabra desordenada es: %s\n",cadena);
  136.    return 0;
  137. }
  138. //-----------------------------------------------------------------------------
  139.  
  140. //Muestra la palabra enmascarada para que la adivinemos
  141. void ShowMask(char *word,int length,int posCharExtra,int nCaracteresAMostrar)
  142. {
  143.    int i;
  144.    for(i=0;i<length;i++)
  145.       if(i==posCharExtra)
  146.          printf("%c ",word[i]);
  147.       else if(nCaracteresAMostrar > 0){
  148.          printf("%c ",word[i]);
  149.          nCaracteresAMostrar--;
  150.       }else
  151.          printf("_ ");
  152.    printf("\n");
  153. }
  154. //-----------------------------------------------------------------------------
  155.  
  156. //Desordena la palabra indicada
  157. void RandomCharsOfWord(char *word,char *result,int length)
  158. {
  159.    int a,i,posRand;
  160.    char aux;
  161.  
  162.    strcpy(result,word);
  163.    for(a=0;a<length;a++){
  164.       for(i=0;i<length-(1+a);i++){
  165.          posRand=rand()%length;
  166.          aux=result[i];
  167.          result[i]=result[posRand];
  168.          result[posRand]=aux;
  169.       }
  170.    }
  171. }