Aquí un jueguito que muchos quizás lo tengan en su casa con el nombre de "Mastermind"
El juego se base en adivinar un número de n dígitos elegido aleatoriamente por la máquina (el número de dígitos n es ingreso).
Pero se cuentan con una serie de pistas, lo que no indica que en el juego no influya la suerte obvio, pero lo hace un juego más para pensar que para "tirar números al azar".
Estas pistas consiste en dar al usuario el número de cifras en las que ha acertado. Y el número de cambios o conmutaciones que podrían hacer para hacer que una ficha que está incorrecta, lo esté.
Un ejemplo vale más que mil palabras:
Imaginemos que n vale 4 (osea, estamos operando con 4 dígitos)
El número elegido por la pc es: 3345
Nosotros ingresamos el: 5542
Cantidad de aciertos (o blancas): 1 (el 4 en la tercera posición)
Cantidad de rojas: 1 (ya que si bien tengo dos 5, osea, dos incorrectas, en la incógnita tengo sólo un 5. Así que el otro está de más)
Código
#include <stdio.h> #include <stdlib.h> #include <string.h> #define LIMPIAR_PANTALLA system("cls"); int esnumero (const char usuario[], int cant) { while (cant) if ( usuario[--cant]<'0' || usuario[cant]>'9' ) return 1; return 0; } int main(int argc, char *argv[]) { FILE *historial; char *incognita, *usuario, h; int cant, i, j, blancas, rojas; do { } while (cant<1); do { } while (h!=0&&h!=1); if (h) { do { printf ("\n\n\nHa surgido un error al crear el historial. Que desea hacer:\n1-Cerrar el programa\n2-Continuar sin guardar el historial\n\n\tOpcion: "); } while (h!=0&&h!=1); if (h) return 0; else h=0; } for (i=0 ; i<cant ; i++) incognita[cant] = '\0'; if (h) for (i=0,j=0 ; i<cant ; i++) { j *= 10; j += 9; } // Programa propiamente dicho: LIMPIAR_PANTALLA printf ("A continuacion debe numeros entre 0 y %i hasta que adivine el numero\nLuego de cada numero le aparecera las pistas\n\nAprete una teclea para comenzar a jugar...", j); LIMPIAR_PANTALLA do { do if (h) blancas=0; rojas=0; for (i=0;i<cant;i++) if (incognita[i]==usuario[i]) { usuario[i] = 'b'; blancas++; } for (i=0;i<cant;i++) if (usuario[i]!='b') for (j=0;j<cant;j++) if (usuario[j]!='b'&&usuario[j]!='r'&&incognita[i]==usuario[j]) { usuario[j] = 'r'; rojas++; break; } if (h) } while (blancas!=cant); LIMPIAR_PANTALLA return 0; }
Bueno, es un juego muy popular también en mi escuela.
PD: También posee la opción de guardar el historial del juego