Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <string.h> // Necesario para el strcpy, aunque se puede hacer a mano
- #define LETRAS "ABCDEF"
- #define NUM_LETRAS 6 // Me da un poco de grimilla pero es por evitar mallocs luego
- #define LONGITUD 4 // Esta es la longitud de la cadena a adivinar
- #define INTENTOS 2
- int main (void)
- {
- char cadLetras[NUM_LETRAS+1]; // Contiene las letras disponibles
- char cadHecha[LONGITUD+1]; // La combinacion generada
- char cadUsuario[LONGITUD+1]; // Es la combinacion introducida por el usuario
- char input; // Para chequear si se quiere salir o no
- // Variables de contador
- int i, j, k;
- // Estos se explican por si solos a lo largo del codigo
- int elegLetra, colocadas, descolocadas, respondido, salir = 0;
- while (!salir)
- {
- strcpy (cadLetras, LETRAS);
- for (i=0; i<=LONGITUD; i++) // Setemos a NULL cadHecha
- cadHecha[i] = 0;
- srand (time(NULL));
- for (i=0; i<LONGITUD; i++) // Generamos la cadena de LONGITUD caracteres
- {
- elegLetra = rand() % (NUM_LETRAS-i); // Posicion aleatoria entre 0 y el numero de letras disponibles
- cadHecha[i] = cadLetras[elegLetra];
- for (j=elegLetra; j<(NUM_LETRAS); j++) // Eliminamos la letra elegida de las disponibles
- {
- cadLetras[j] = cadLetras[j+1]; // Notese que cuando llega a la ultima copia el 0 del final de cadena
- }
- }
- printf ("DEBUG: %s\n", cadHecha);
- printf ("Introduzca combinaciones de %d caracteres sin repetir entre %s.\n", LONGITUD, LETRAS);
- for (i=0; i<INTENTOS; i++)
- {
- printf ("COMBINACION: ");
- scanf ("%s", &cadUsuario);
- while (strlen(cadUsuario) != LONGITUD)
- {
- printf ("La longitud de la combinacion debe ser %d.\nCOMBINACION: ", LONGITUD);
- scanf ("%s", &cadUsuario);
- }
- // Aqui molaria comprobar si las letras escritas son validas, pero paso xD
- colocadas = 0, descolocadas = 0;
- for (j=0; j<LONGITUD; j++)
- {
- if (cadHecha[j] == cadUsuario[j]) // Coincide exactamente?
- colocadas += 1;
- if (cadHecha[j] != cadUsuario[j]) // Si no coincide...
- {
- for (k=0; k<LONGITUD; k++) // ...esta en la cadena generada?
- {
- if (cadUsuario[j] == cadHecha[k]) // Si!
- {
- descolocadas++;
- break; // No queremos que siga buscando a lo tonto
- }
- }
- }
- }
- printf ("COLOCADAS = %d DESCOLOCADAS = %d\n\n", colocadas, descolocadas);
- if (colocadas == LONGITUD)
- {
- printf ("CORRECTO! ");
- break; // No necesitamos mas intentos
- }
- }
- respondido = 0;
- while (!respondido) // Mientras que no se haya respondido correctamente...
- {
- fflush (stdin); // Para que no se repita el printf de OTRA PARTIDA?
- printf ("OTRA PARTIDA? (S/N) ");
- input = getchar();
- switch (input)
- {
- case 'S': // Otra partida! Se vuelve al principio del bucle principal [strcpy (cadLetras, LETRAS);]
- case 's':
- respondido = 1;
- system("cls");
- break;
- case 'N':
- case 'n': // Hemos respondido y queremos salir
- printf ("ADIOS!!!");
- respondido = 1;
- salir = 1;
- break;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement