Tambien conocido como picas y fijas en algunos paises, es un juego que tradicionalmente se juega con lapiz y papel y consiste en adivinar el numero secreto de 4 cifras (no repetidas entre si) que ha pensado el contrincante. El jugador oponente intenta adivinar el numero de su rival a traves de una serie de pistas que este le brinda: si una de las cifras se encuentra en la misma posicion, significa una fama, si el numero contiene una cifra pero en una posicion distinta, se menciona un punto.
Vamos a suponer que el n煤mero secreto a adivinar es el 5678.
N煤mero secreto: 5 6 7 8
N煤mero del jugador: 7 6 8 4
El jugador escribe el n煤mero 7684, por lo tanto, como el n煤mero 6 se encuentra en la misma posici贸n (segunda) del n煤mero secreto, obtendremos (1) fama (fija). El n煤mero 7 y el tambi茅n est谩n presentes en el n煤mero secreto pero en una posici贸n distinta, de esta manera, obtendremos 2 puntos (picas).
Asi que el resultado ser铆a: (2) puntos y (1) fama.
Este juego se ha construido para jugar contra el arduino, que es el encargado de generar el numero de 4 cifras no repetidas entre si.
El jugador introduce sus 4 digitos a traves del teclado hexadecimal, presiona la tecla D para confirmar los digitos introducidos. La pantalla lcd visualiza la cantidad de puntos y famas obtenidos por cada intento. Si despues de cinco intentos (se puede configurar en el codigo la cantidad de intentos permitidos) no consigue adivinar el numer secreto, se muestra un mensaje en pantalla y finaliza el juego.
Al presionar la tecla A se reinicia el juego.
Si se presiona la tecla B, se muestra el numero secreto y finaliza el juego.
LISTA DE COMPONENTES:
DIAGRAMA DEL PROYECTO
MONTAJE EN EL PROTOBOARD
VIDEO DE FUNCIONAMIENTO
/* Juego de punto y fama para arduino Realizado por: José Luis Bejarano Vásquez Fecha: 12/02/2016 www.sistemasymicros.com.co www.youtube.com/c/sistemasymicros1 @sistemasyymicros*/ #include <Keypad.h> #include <LiquidCrystal.h> LiquidCrystal lcd(7, 8, 9, 10, 11 , 12); int aleatorio[4]; String numero_azar; //almacena las 4 cifras aleatorias char cifra_jugador[4]; //Almacena el numero del jugador String numero_jugador = String(); //Almacena las 4 cifras del jugador String a1 = String(); //primera cifra del número secreto String b1 = String(); //segunda cifra del número secreto String c1 = String(); //tercera cifra del número secreto String d1 = String(); //cuarta cifra del número secreto String k = String(); //primera cifra del número jugador String l = String(); //segunda cifra del número jugador String m = String(); //tercera cifra del número jugador String n = String(); //cuarta cifra del número jugador int cuenta=0; int i,j,x; int puntos,famas=0; int intentos=0; int maximo_intentos=5; const byte ROWS=4; const byte COLS=4; char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {13,6,5,4}; //Filas(pines del 9 al 6) byte colPins[COLS] = {3,2,1,0}; //Columnas (pines del 5 al 2) Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //Verifica que no existan cifras repetidas boolean verificar_duplicados(String palabra) { for(i=0;i<=3;i++) { for(j=0;j<=3;j++) { if(i !=j) { if(palabra[i]==palabra[j]) { return false; break; } } } } return true; } //************************************************************************************************** void inicio() { lcd.clear(); do { generar_aleatorio(); } while(verificar_duplicados(numero_azar)!=true); lcd.setCursor(0,0); lcd.print("Digite un # de 4 cifras"); intentos=0; puntos=0; famas=0; } //************************************************************************************************ void generar_aleatorio() { for(x=0;x<=3;x++) { randomSeed(analogRead(analogRead(x))); aleatorio[x]=random(10); //genera un número aleatorio entre 0 y 9 } numero_azar = String(aleatorio[0])+String(aleatorio[1])+String(aleatorio[2]+String(aleatorio[3])); } //************************************************************************************************ void ingresar() { if(cuenta==4) //Si tiene 4 dígitos { k=String(cifra_jugador[0]); l=String(cifra_jugador[1]); m=String(cifra_jugador[2]); n=String(cifra_jugador[3]); numero_jugador = k+l+m+n; if(verificar_duplicados(numero_jugador)) //Si no contiene duplicados llamo al procedimiento que compara los dígitos { comprobar(); } } else { lcd.setCursor(0,0); lcd.print("Cifras incompletas"); } cuenta=0; } //******************************************************************** void comprobar() { a1=String(aleatorio[0]); b1=String(aleatorio[1]); c1=String(aleatorio[2]); d1=String(aleatorio[3]); if(a1==k) {famas++;} if(b1==l) {famas++;} if(c1==m) {famas++;} if(d1==n) {famas++;} if(a1==l || a1==m || a1==n) { puntos++;} if(b1==k || b1==m || b1==n) { puntos++;} if(c1==k || c1==l || c1==n) { puntos++;} if(d1==k || d1==l || d1==m) { puntos++;} intentos++; if(famas==4) { lcd.clear(); lcd.print("Ganaste en: "); lcd.print(intentos); lcd.setCursor(0,1); lcd.print( "intentos"); delay(2000); inicio(); } actualizar_pantalla(); //Muestra la información en pantalla if(intentos==maximo_intentos) { lcd.clear(); lcd.setCursor(0,0); lcd.write("Has perdido, el"); lcd.setCursor(0,1); lcd.print("numero era: "); lcd.print(a1); lcd.print(b1); lcd.print(c1); lcd.print(d1); } cuenta=0; puntos=0; famas=0; } //******************************************* void actualizar_pantalla() { lcd.clear(); lcd.setCursor(0,0); lcd.print("Puntos:"); lcd.print(puntos); lcd.print(" Famas:"); lcd.print(famas); lcd.setCursor(5,1); lcd.print("Intento:"); lcd.print(intentos); lcd.print("/5"); lcd.setCursor(0,1); lcd.blink(); } //******************************************* void setup() { lcd.begin(16, 2); inicio(); } //******************************************* void loop() { char key = keypad.getKey(); if(key) { switch (key) { case 'A': inicio(); //Inciar un nuevo juego break; case 'B': lcd.clear(); lcd.setCursor(0,0); lcd.print("Adios, el numero"); lcd.setCursor(0,1); lcd.print("era el: "); lcd.print(numero_azar); break; case 'D': ingresar(); //Enter break; } } if(key) { cifra_jugador[cuenta] = key; //Si la tecla presionada es un número (ignore las letras) if(key!='A' && key!='B' && key!='C' && key!='D') { lcd.setCursor(0+cuenta,1); lcd.print(cifra_jugador[cuenta]); cuenta++; } } }
Ingeniero en electronica, desarrollador de software. Desarrollo de proyectos con microcontroladores.