Advertisement
Guest User

kaoD

a guest
Jan 24th, 2009
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.88 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <string.h> // Necesario para el strcpy, aunque se puede hacer a mano
  5.  
  6. #define LETRAS        "ABCDEF"
  7. #define NUM_LETRAS    6 // Me da un poco de grimilla pero es por evitar mallocs luego
  8. #define LONGITUD      4 // Esta es la longitud de la cadena a adivinar
  9. #define INTENTOS      2
  10.  
  11. int main (void)
  12. {
  13.     char cadLetras[NUM_LETRAS+1]; // Contiene las letras disponibles
  14.     char cadHecha[LONGITUD+1]; // La combinacion generada
  15.     char cadUsuario[LONGITUD+1]; // Es la combinacion introducida por el usuario
  16.     char input; // Para chequear si se quiere salir o no
  17.  
  18.     // Variables de contador
  19.     int i, j, k;
  20.  
  21.     // Estos se explican por si solos a lo largo del codigo
  22.     int elegLetra, colocadas, descolocadas, respondido, salir = 0;
  23.  
  24.     while (!salir)
  25.     {
  26.         strcpy (cadLetras, LETRAS);
  27.         for (i=0; i<=LONGITUD; i++) // Setemos a NULL cadHecha
  28.             cadHecha[i] = 0;
  29.  
  30.         srand (time(NULL));
  31.  
  32.         for (i=0; i<LONGITUD; i++) // Generamos la cadena de LONGITUD caracteres
  33.         {
  34.             elegLetra = rand() % (NUM_LETRAS-i); // Posicion aleatoria entre 0 y el numero de letras disponibles
  35.  
  36.             cadHecha[i] = cadLetras[elegLetra];
  37.  
  38.             for (j=elegLetra; j<(NUM_LETRAS); j++) // Eliminamos la letra elegida de las disponibles
  39.             {
  40.                 cadLetras[j] = cadLetras[j+1]; // Notese que cuando llega a la ultima copia el 0 del final de cadena
  41.             }
  42.         }
  43.  
  44.         printf ("DEBUG: %s\n", cadHecha);
  45.         printf ("Introduzca combinaciones de %d caracteres sin repetir entre %s.\n", LONGITUD, LETRAS);
  46.  
  47.         for (i=0; i<INTENTOS; i++)
  48.         {
  49.             printf ("COMBINACION: ");
  50.             scanf ("%s", &cadUsuario);
  51.  
  52.             while (strlen(cadUsuario) != LONGITUD)
  53.             {
  54.                 printf ("La longitud de la combinacion debe ser %d.\nCOMBINACION: ", LONGITUD);
  55.                 scanf ("%s", &cadUsuario);
  56.             }
  57.  
  58.             // Aqui molaria comprobar si las letras escritas son validas, pero paso xD
  59.  
  60.             colocadas = 0, descolocadas = 0;
  61.  
  62.             for (j=0; j<LONGITUD; j++)
  63.             {
  64.                 if (cadHecha[j] == cadUsuario[j]) // Coincide exactamente?
  65.                     colocadas += 1;
  66.  
  67.                 if (cadHecha[j] != cadUsuario[j]) // Si no coincide...
  68.                 {
  69.                     for (k=0; k<LONGITUD; k++) // ...esta en la cadena generada?
  70.                     {
  71.                         if (cadUsuario[j] == cadHecha[k]) // Si!
  72.                         {
  73.                             descolocadas++;
  74.                             break; // No queremos que siga buscando a lo tonto
  75.                         }
  76.                     }
  77.                 }
  78.             }
  79.  
  80.             printf ("COLOCADAS = %d DESCOLOCADAS = %d\n\n", colocadas, descolocadas);
  81.  
  82.             if (colocadas == LONGITUD)
  83.             {
  84.                 printf ("CORRECTO! ");
  85.                 break; // No necesitamos mas intentos
  86.             }
  87.         }
  88.  
  89.         respondido = 0;
  90.         while (!respondido) // Mientras que no se haya respondido correctamente...
  91.         {
  92.             fflush (stdin); // Para que no se repita el printf de OTRA PARTIDA?
  93.  
  94.             printf ("OTRA PARTIDA? (S/N) ");
  95.             input = getchar();
  96.  
  97.             switch (input)
  98.             {
  99.                 case 'S': // Otra partida! Se vuelve al principio del bucle principal [strcpy (cadLetras, LETRAS);]
  100.                 case 's':
  101.                     respondido = 1;
  102.                     system("cls");
  103.                     break;
  104.                 case 'N':
  105.                 case 'n': // Hemos respondido y queremos salir
  106.                     printf ("ADIOS!!!");
  107.                     respondido = 1;
  108.                     salir = 1;
  109.                     break;
  110.             }
  111.         }
  112.     }
  113.  
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement