Sunteți pe pagina 1din 5

#include <Keypad.

h>//importacion de librerias
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 10, 11, 12, 13 , A0);//configuracion de los pines donde se
conectara el display

String numero_azar; //variable donde se guardara el numero ingresado por el usuario


char cifra_jugador[4]; //
String numero_jugador = String();

String a1 = String();
String b1 = String();
String c1 = String();
String d1 = String();
String k = String();
String l = String();
String m = String();
String n = String();

int cont = 0;
int aleatorio[4];//se crea un arreglo para guardar los numero generados por arduino
int i, j, x;
int puntos, fama = 0; //variables para guardar los puntos ganado y la fama ganada
int intentos = 0; //variable para controlar el numero de intentos realizados por el
usuario
int max_intentos = 5; //el maximo de intentos sera de 5

const byte ren = 4;//numero de renglones del keypad


const byte col = 3;//numero de columnas del keypad

char simbolos[ren][col] = {//mapeo de los caracteres del keypad


{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};

byte rowPins[ren] = {8, 7, 6, 5};//asignacion de pines al keypad renglones


byte colPins[col] = {4, 3, 2};//asignacion de pines al keypad columnas

Keypad keypad = Keypad(makeKeymap(simbolos),


rowPins, colPins, ren, col); //creacion del objeto keypad

boolean repetido(String palabra) { //metodo para verificar que no se repitan los


digitos del numero generado
for (i = 0; i <= 3; i++)
{
for (j = 0; j <= 3; j++)
{
if (i != j)
{
if (palabra[i] == palabra[j]) //condicion para comparar los digitos del
nummero generado
{
return false;//si los digitos son iguales retorna falso
break;
}
}

}
}
return true; //si no son iguales retorna true
}
void inicio()
{ Serial.println("yas");
lcd.clear();//borra el lcd
do
{
gen_num;//llama la funcion que genera el numero aleatorio

} while (repetido(numero_azar) != true); //compara que los digitos no se repitan


lcd.setCursor(0, 0); //se posisciona en la fila y columna 0
lcd.print("ingresa 4 digit"); //imprime en la lcd
intentos = 0; //inicializa las variables de control a 0
puntos = 0;
fama = 0;
}

//*********************************************************************************
***************
void gen_num()
{
for (x = 0; x <= 3; x++) //ciclo para generar los cuatro digitos aleatorios de
arduino
{
randomSeed(analogRead(analogRead(x)));
Serial.println(x);

aleatorio[x] = random(9); //genera un nmero aleatorio entre 0 y 9


}
numero_azar = String(aleatorio[0]) + String(aleatorio[1]) + String(aleatorio[2] +
String(aleatorio[3])); //se concatenan los digitos generado para formar un numero
}
//*********************************************************************************
***************
void enter()
{
if (cont == 4) //Si tiene se han contado 4 digitos
{ // se guardan los digitos en variables separadas para su uso
k = String(cifra_jugador[0]); //guarda el primer digito del arreglo
l = String(cifra_jugador[1]); //guarda el segundo digito del arreglo
m = String(cifra_jugador[2]); //guarda el tercer digito del arregl
n = String(cifra_jugador[3]); //guarda el cuarto digito del arreglo
numero_jugador = k + l + m + n; // se concatena los digitos para forma un
numero

if (repetido(numero_jugador)) //Si no contiene duplicados llamo al


procedimiento que compara los dgitos
{
compara();//ejecuta el metodo que hara la comparacion del numero aleatorio y
el numero que digito el usuario
}

else

{
lcd.setCursor(0, 0); //posiciona el cursor en columna y fila 0
lcd.print("Cifras incompletas");//imprime en la lcd

cont = 0; // regresa el cntador a 0

void compara()
{
a1 = String(aleatorio[0]); //se guardan los digitos generados aleatoriamente en
las variables para su comparacion con los digitos introducidos por el usuario
b1 = String(aleatorio[1]);
c1 = String(aleatorio[2]);
d1 = String(aleatorio[3]);

if (a1 == k) //se comprara si el digito 1 generado aleatoriamente y el digito 1


introducido por el usuario son iguales incrementamos fama
{
fama++;
}
if (b1 == l)
{
fama++;
}
if (c1 == m)
{
fama++;
}
if (d1 == n)
{
fama++;
}

if (a1 == l || a1 == m || a1 == n) //si el digito 1 generado de forma aleatoria


no es igual al 1 introducido por el usuario, se compara con los demas digitos y si
son iguales incrementamos puntos
{
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++;// incrementamos el numero de intentos realizados

if (fama == 4) // si fama es 4 el usuario acerto en todos los digitos y gana


{
lcd.clear(); //borramos la lcd
lcd.print("ganaste");//imprime ganaste
lcd.print(intentos);// imprime el numero de intentos
lcd.setCursor(0, 1);
lcd.print( "intentos");// imprime la cadena intentos;
delay(2000);
inicio();//volvemos a ejecutar el inicio del juego

restablecer(); //Muestra nuevamente la interfaz del juego

if (intentos == max_intentos) //intentos es igual al maximo de intentos que es 5


el jugadr pierde
{
lcd.clear();//borra ek display
lcd.setCursor(0, 0); //posisciona el cursor
lcd.write("perdiste el");//muestra mensaje
lcd.setCursor(0, 1); //posisiona el cursor en la fila2 columna 0
lcd.print("numero es "); //muestra mensaje
lcd.print(a1);//muestra el numero generado aleatorio
lcd.print(b1);//muestra el numero generado aleatorio
lcd.print(c1);//muestra el numero generado aleatorio
lcd.print(d1);//muestra el numero generado aleatorio
}

cont = 0;
puntos = 0;
fama = 0;

//*******************************************
void restablecer()//metodo para volver a cargar la interfa del juego con los puntos
y fama n 0
{
lcd.clear();//borra
lcd.setCursor(0, 0); //posciona el cursor
lcd.print("puntos:");//muestra mensaje
lcd.print(puntos);//muestra variable puntos

lcd.setCursor(9, 0); //posiciona cursor en columna 9 fila 0


lcd.print(" fama:");//muestra menasaje
lcd.print(fama);//muestra variable fama

lcd.setCursor(9, 1);
lcd.print("int:");
lcd.print(intentos);
lcd.print("/5");

lcd.setCursor(0, 1);
lcd.blink();//parpadeo
}
//*******************************************
void setup()
{
pinMode(A0, OUTPUT); //configuracion de pines de entrad y salida
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
lcd.begin(16, 2);
inicio();//se llama el metodo inicio para que al cargar arduino inicie el jueogo
}

void loop()
{
char key = keypad.getKey();//lee la tecla presionada

if (key) //condicion para ver si se presiono una tecla


{
switch (key)
{
case '*'://si la tecla presionada es * ejecuta inicio()
inicio(); //inicia un nuevo juego
break; //termina el switch

case '#'://si la tecla presionada es # ejecutar enter()


enter(); //
break;

}
}

if (key)
{
cifra_jugador[cont] = key;

//Si la tecla presionada es un nmero (ignore las letras)


if (key != '*' && key != '#')//leemos la tecla presionada y verificamos que no
sea * o #
{
lcd.setCursor(0 + cont, 1);//posicionamos el cursor en la culumna que indique
el contador y la fila 1
lcd.print(cifra_jugador[cont]);//imprimimos el digito qur halla insertado

cont++;//incrementamo el contador
}

S-ar putea să vă placă și