#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define columnas 16
#define filas 2
const byte FILAS = 4;
const byte COLUMNAS = 3;
char teclas [FILAS][COLUMNAS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte pines_filas[FILAS] = {13, 12, 14, 27};
byte pines_columnas[COLUMNAS] = {26, 25, 33};
Keypad teclado = Keypad(makeKeymap(teclas), pines_filas, pines_columnas, FILAS, COLUMNAS);
LiquidCrystal_I2C lcd(0x27, columnas, filas);
String msg_a_deslizar = "Ingrese el numero de cifras con las que desea jugar (2-7)";
String msg_a_intentos = "Ingrese el numero de intentos con los que desea jugar";
byte corazon[] = {0x00, 0x0A, 0x1F, 0x1F, 0x1F, 0x0E, 0x04, 0x00};
byte pic[] = {0x00, 0x04, 0x0E, 0x1F, 0x15, 0x04, 0x0E, 0x00};
byte trebol[] = {0x0E, 0x0E, 0x15, 0x1F, 0x15, 0x04, 0x0E, 0x00};
byte diamante[] = {0x00, 0x00, 0x04, 0x0E, 0x1F, 0x0E, 0x04, 0x00};
void deslizar_texto(int fila,String mensaje, int retardo);
const char* mensaje1 = " Picas Y";
const char* mensaje2 = " Fijas";
void setup() {
// Inicializar puerto serie
Serial.begin(9600);
// Semilla para la generación de números aleatorios
randomSeed(analogRead(A0));
// configuracion LCD
lcd.init();
lcd.backlight();
lcd.home();
lcd.createChar(0, corazon);
lcd.createChar(1, pic);
lcd.createChar(2, trebol);
lcd.createChar(3, diamante);
}
void loop() {
int numeroIngresado=0;
int position = 0;
int numIntentos = 0;
int intento = 0;
int numeroUsuario = 0;
//LCD INICIO
for (int i = 0; i < 3; i++){
for (int i = 2; i < 9; i++) { // 11 letras en "Bienvenida"
lcd.setCursor(i, 0); // Establece la posición del cursor en la primera fila
lcd.print(mensaje1[i]); // Imprime la letra actual
delay(200); // Espera 200 milisegundos antes de imprimir la siguiente letra
}
for (int i = 8; i < 14; i++) { // 11 letras en "Bienvenida"
lcd.setCursor(i, 1); // Establece la posición del cursor en la segunda fila
lcd.print(mensaje2[i]); // Imprime la letra actual
delay(200); // Espera 200 milisegundos antes de imprimir la siguiente letra
}
lcd.setCursor(0, 0);
lcd.write(1);
delay(500);
lcd.setCursor(0,0);
lcd.write(0);
lcd.setCursor(15,0);
lcd.write(2);
delay(500);
lcd.setCursor(15,0);
lcd.write(3);
delay(500);
lcd.setCursor(15,1);
lcd.write(3);
delay(500);
lcd.setCursor(15,1);
lcd.write(2);
lcd.setCursor(0,1);
lcd.write(0);
delay(500);
lcd.setCursor(0,1);
lcd.write(3);
delay(500);
lcd.clear();
}
lcd.clear();
deslizar_texto(1, msg_a_deslizar, 300);
///////////// NUMERO DE CIFRAS ///////////////////
while (numeroIngresado == 0 || numeroIngresado == 1 || numeroIngresado == 8 || numeroIngresado == 9) {
char key = teclado.getKey(); // Obtener la tecla presionada
if (key){
if (isdigit(key)) { // Verificar si la tecla presionada es un dígito
lcd.setCursor(1,1);
lcd.print(key); // Mostrar el dígito en la pantalla LCD
numeroIngresado = numeroIngresado * 10 + (key - '0'); // Convertir el dígito a entero y agregarlo al número ingresado
Serial.printf("# ingresado: %d", numeroIngresado);
delay(500);
}
if(numeroIngresado == 0 || numeroIngresado == 1 || numeroIngresado == 8 || numeroIngresado == 9){
lcd.setCursor(1,0);
lcd.print("numero invalido");
delay(500);
lcd.clear();
numeroIngresado=0;
}
}
}
delay(1000);
lcd.clear();
/////////////////////////// NUMERO DE INTENTOS //////////////////////////////////////
deslizar_texto(1, msg_a_intentos, 300);
while (numIntentos == 0) {
char key = teclado.getKey(); // Obtener la tecla presionada
if (key){
if (isdigit(key)) { // Verificar si la tecla presionada es un dígito
lcd.setCursor(position,1);
lcd.print(key); // Mostrar el dígito en la pantalla LCD
intento = intento * 10 + (key - '0'); // Convertir el dígito a entero y agregarlo al número ingresado
position++;
delay(500);
}else if (key == '#') {
numIntentos = intento;// Convertir el dígito a entero y agregarlo al número ingresado
Serial.printf("# ingresado: %d", numIntentos);
}
}
}
delay(500);
lcd.clear();
////////////////////////////// CRIFRA 2 /////////////////////////////////////////////////////////////////////////////////////
if(numeroIngresado == 2){
// Generar numero aleatorio
int digito1, digito2;
do {
digito1 = random(1, 10);
digito2 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
} while (digito1 == digito2);
// Formar el número
int numero = digito1 * 10 + digito2;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for (int i = 0; i < numIntentos; i++){
reinicio:
int num = 0;
int pica = 0;
int fija = 0;
numeroUsuario = 0;
intento = 0;
position = 0;
// ingresar numero
lcd.setCursor(0,1);
lcd.print("digite el numero");
delay(5000);
lcd.clear();
while (numeroUsuario == 0 || numeroUsuario < 10 || numeroUsuario > 99) {
char key = teclado.getKey(); // Obtener la tecla presionada
if (key){
if (isdigit(key)) { // Verificar si la tecla presionada es un dígito
lcd.setCursor(position,0);
lcd.print(key); // Mostrar el dígito en la pantalla LCD
intento = intento * 10 + (key - '0'); // Convertir el dígito a entero y agregarlo al número ingresado
position++;
delay(500);
}else if (key == '#') {
numeroUsuario = intento;// Convertir el dígito a entero y agregarlo al número ingresado
Serial.printf("# ingresado: %d", numeroUsuario);
if(numeroUsuario < 10 || numeroUsuario > 99){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(4000);
lcd.clear();
position = 0;
intento=0;
numeroUsuario = 0;
}
}
}
}
lcd.clear();
// Separar las cifras del número ingresado por el usuario
int cifra1 = numeroUsuario / 10;
Serial.print(cifra1);
int cifra2 = numeroUsuario % 10;
Serial.print(cifra2);
if (cifra1 == cifra2){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(4000);
lcd.clear();
goto reinicio;
}
// cifra 1
if (cifra1 == digito1) {
fija++;
}
if (cifra1 == digito2){
pica++;
}
//cifra 2
if (cifra2 == digito2) {
fija++;
}
if (cifra2 == digito1){
pica++;
}
if (fija == 2){
goto fin;
}
lcd.setCursor(6,0);
lcd.print(numeroUsuario);
lcd.setCursor(2,1);
lcd.print(fija);
lcd.setCursor(3,1);
lcd.print("F");
lcd.setCursor(9,1);
lcd.print(pica);
lcd.setCursor(10,1);
lcd.print("P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("intento: ");
lcd.setCursor(8,0);
lcd.print(i+1);
}
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
lcd.setCursor(0,1);
lcd.print("el numero es:");
lcd.setCursor(13,1);
lcd.print(numero);
delay(5000);
lcd.clear();
return;
fin:
lcd.setCursor(8,0);
lcd.print(numeroUsuario);
lcd.setCursor(2,1);
lcd.print("2F");
lcd.setCursor(6,1);
lcd.print("0P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ganaste");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
delay(5000);
lcd.clear();
return;
}
////////////////////////////// CIFRA 3 //////////////////////////////////////////////////////////////////////////////////////
if(numeroIngresado == 3){
// Generar numero aleatorio
int digito1, digito2, digito3;
do {
digito1 = random(1, 10);
digito2 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito3 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
} while (digito1 == digito2 || digito1 == digito3 || digito2 == digito3);
// Formar el número
int numero = digito1 * 100 + digito2 * 10 + digito3;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for (int i = 0; i < numIntentos; i++){
reinicio3:
int num = 0;
int pica = 0;
int fija = 0;
numeroUsuario = 0;
intento = 0;
position = 0;
// ingresar numero
lcd.setCursor(0,1);
lcd.print("digite el numero");
delay(5000);
lcd.clear();
while (numeroUsuario == 0 || numeroUsuario < 100 || numeroUsuario > 999) {
char key = teclado.getKey(); // Obtener la tecla presionada
if (key){
if (isdigit(key)) { // Verificar si la tecla presionada es un dígito
lcd.setCursor(position,0);
lcd.print(key); // Mostrar el dígito en la pantalla LCD
intento = intento * 10 + (key - '0'); // Convertir el dígito a entero y agregarlo al número ingresado
position++;
delay(500);
}else if (key == '#') {
numeroUsuario = intento;// Convertir el dígito a entero y agregarlo al número ingresado
Serial.printf("# ingresado: %d", numeroUsuario);
if(numeroUsuario < 100 || numeroUsuario > 999){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(4000);
lcd.clear();
position = 0;
intento=0;
numeroUsuario = 0;
}
}
}
}
lcd.clear();
// Separar las cifras del número ingresado por el usuario
int cifra1 = numeroUsuario / 100;
int cifra2 = (numeroUsuario / 10) % 10;
int cifra3 = numeroUsuario % 10;
if (cifra1 == cifra2 || cifra1 == cifra3 || cifra2 == cifra3){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(4000);
lcd.clear();
goto reinicio3;
}
// cifra 1
if (cifra1 == digito1) {
fija++;
}
if (cifra1 == digito2 || cifra1 == digito3){
pica++;
}
//cifra 2
if (cifra2 == digito2) {
fija++;
}
if (cifra2 == digito1 || cifra2 == digito3){
pica++;
}
//cifra 3
if (cifra3 == digito3) {
fija++;
}
if (cifra3 == digito1 || cifra3 == digito2){
pica++;
}
if (fija == 3){
goto fin3;
}
lcd.setCursor(6,0);
lcd.print(numeroUsuario);
lcd.setCursor(2,1);
lcd.print(fija);
lcd.setCursor(3,1);
lcd.print("F");
lcd.setCursor(9,1);
lcd.print(pica);
lcd.setCursor(10,1);
lcd.print("P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("intento: ");
lcd.setCursor(8,0);
lcd.print(i+1);
}
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
lcd.setCursor(0,1);
lcd.print("el numero es:");
lcd.setCursor(13,1);
lcd.print(numero);
delay(5000);
lcd.clear();
return;
fin3:
lcd.setCursor(8,0);
lcd.print(numeroUsuario);
lcd.setCursor(2,1);
lcd.print("3F");
lcd.setCursor(6,1);
lcd.print("0P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ganaste");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
delay(5000);
lcd.clear();
return;
}
//////////////////////////////////////// CIFRA 4 //////////////////////////////////////////////////////////////////////////////
if(numeroIngresado == 4){
// Generar numero aleatorio
int digito1, digito2, digito3, digito4;
do {
digito1 = random(1, 10);
digito2 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito3 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito4 = random(0, 10);
} while (digito1 == digito2 || digito1 == digito3 || digito1 == digito4 || digito2 == digito3 || digito2 == digito4 || digito3 == digito4);
// Formar el número
int numero = digito1 * 1000 + digito2 * 100 + digito3 * 10 + digito4;
Serial.print(numero);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for (int i = 0; i < numIntentos; i++){
reinicio4:
int num = 0;
int pica = 0;
int fija = 0;
numeroUsuario = 0;
intento = 0;
position = 0;
// ingresar numero
lcd.setCursor(0,1);
lcd.print("digite el numero");
delay(5000);
lcd.clear();
while (numeroUsuario == 0 || numeroUsuario < 1000 || numeroUsuario > 9999) {
char key = teclado.getKey(); // Obtener la tecla presionada
if (key){
if (isdigit(key)) { // Verificar si la tecla presionada es un dígito
lcd.setCursor(position,0);
lcd.print(key); // Mostrar el dígito en la pantalla LCD
intento = intento * 10 + (key - '0'); // Convertir el dígito a entero y agregarlo al número ingresado
position++;
delay(500);
}else if (key == '#') {
numeroUsuario = intento;// Convertir el dígito a entero y agregarlo al número ingresado
Serial.printf("# ingresado: %d", numeroUsuario);
if(numeroUsuario < 1000 || numeroUsuario > 9999){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(4000);
lcd.clear();
position = 0;
intento=0;
numeroUsuario = 0;
}
}
}
}
lcd.clear();
// Separar las cifras del número ingresado por el usuario
int cifra1 = numeroUsuario / 1000;
int cifra2 = (numeroUsuario / 100) % 10;
int cifra3 = (numeroUsuario / 10) % 10;
int cifra4 = numeroUsuario % 10;
int total = cifra1 * 1000 + cifra2 * 100 + cifra3 * 10 + cifra4;
Serial.print(total);
if (cifra1 == cifra2 || cifra1 == cifra3 || cifra1 == cifra4 || cifra2 == cifra3 || cifra2 == cifra4 || cifra3 == cifra4){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(4000);
lcd.clear();
goto reinicio4;
}
// cifra 1
if (cifra1 == digito1) {
fija++;
}
if (cifra1 == digito2 || cifra1 == digito3 || cifra1 == digito4){
pica++;
}
//cifra 2
if (cifra2 == digito2) {
fija++;
}
if (cifra2 == digito1 || cifra2 == digito3 || cifra2 == digito4){
pica++;
}
//cifra 3
if (cifra3 == digito3) {
fija++;
}
if (cifra3 == digito1 || cifra3 == digito2 || cifra3 == digito4){
pica++;
}
//cifra 4
if(cifra4 == digito4){
fija++;
}
if(cifra4 == digito1 || cifra4 == digito2 || cifra4 == digito3){
pica++;
}
if (fija == 4){
goto fin4;
}
lcd.setCursor(4,0);
lcd.print(numeroUsuario);
lcd.setCursor(2,1);
lcd.print(fija);
lcd.setCursor(3,1);
lcd.print("F");
lcd.setCursor(9,1);
lcd.print(pica);
lcd.setCursor(10,1);
lcd.print("P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("intento: ");
lcd.setCursor(8,0);
lcd.print(i+1);
}
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
lcd.setCursor(0,1);
lcd.print("el num es:");
lcd.setCursor(10,1);
lcd.print(numero);
delay(5000);
lcd.clear();
return;
fin4:
lcd.setCursor(4,0);
lcd.print(numeroUsuario);
lcd.setCursor(3,1);
lcd.print("4F");
lcd.setCursor(10,1);
lcd.print("0P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ganaste");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
delay(5000);
lcd.clear();
return;
}
//////////////////////////////////// CIFRA 5 /////////////////////////////////////////////////////////////////////////////////////
if(numeroIngresado == 5){
// Generar numero aleatorio
int digito1, digito2, digito3, digito4, digito5;
do {
digito1 = random(1, 10);
digito2 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito3 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito4 = random(0, 10);
digito5 = random(0, 10);
} while (digito1 == digito2 || digito1 == digito3 || digito1 == digito4 || digito1 == digito5 || digito2 == digito3 || digito2 == digito4 || digito2 == digito5 || digito3 == digito4 || digito3 == digito5 || digito4 == digito5);
// Formar el número
int numero = digito1 * 10000 + digito2 * 1000 + digito3 * 100 + digito4 * 10 + digito5;
Serial.print(numero);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for (int i = 0; i < numIntentos; i++){
reinicio5:
int num = 0;
int pica = 0;
int fija = 0;
numeroUsuario = 0;
intento = 0;
position = 0;
// ingresar numero
lcd.setCursor(0,1);
lcd.print("digite el numero");
delay(5000);
lcd.clear();
while (numeroUsuario == 0 || numeroUsuario < 10000 || numeroUsuario > 99999) {
char key = teclado.getKey(); // Obtener la tecla presionada
if (key){
if (isdigit(key)) { // Verificar si la tecla presionada es un dígito
lcd.setCursor(position,0);
lcd.print(key); // Mostrar el dígito en la pantalla LCD
intento = intento * 10 + (key - '0'); // Convertir el dígito a entero y agregarlo al número ingresado
position++;
delay(500);
}else if (key == '#') {
numeroUsuario = intento;// Convertir el dígito a entero y agregarlo al número ingresado
Serial.printf("# ingresado: %d", numeroUsuario);
if(numeroUsuario < 10000 || numeroUsuario > 99999){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(2000);
lcd.clear();
position = 0;
intento=0;
numeroUsuario = 0;
}
}
}
}
lcd.clear();
// Separar las cifras del número ingresado por el usuario
int cifra1 = numeroUsuario / 10000;
int cifra2 = (numeroUsuario / 1000) % 10;
int cifra3 = (numeroUsuario / 100) % 10;
int cifra4 = (numeroUsuario / 10) % 10;
int cifra5 = numeroUsuario % 10;
int total = cifra1 * 10000 + cifra2 * 1000 + cifra3 * 100 + cifra4 * 10 + cifra5;
Serial.print(total);
if (cifra1 == cifra2 || cifra1 == cifra3 || cifra1 == cifra4 || cifra1 == cifra5 || cifra2 == cifra3 || cifra2 == cifra4 || cifra2 == cifra5 || cifra3 == cifra4 || cifra3 == cifra5 || cifra4 == cifra5){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(2000);
lcd.clear();
goto reinicio5;
}
// cifra 1
if (cifra1 == digito1) {
fija++;
}
if (cifra1 == digito2 || cifra1 == digito3 || cifra1 == digito4 || cifra1 == digito5){
pica++;
}
//cifra 2
if (cifra2 == digito2) {
fija++;
}
if (cifra2 == digito1 || cifra2 == digito3 || cifra2 == digito4 || cifra2 == digito5){
pica++;
}
//cifra 3
if (cifra3 == digito3) {
fija++;
}
if (cifra3 == digito1 || cifra3 == digito2 || cifra3 == digito4 || cifra3 == digito5){
pica++;
}
//cifra 4
if(cifra4 == digito4){
fija++;
}
if(cifra4 == digito1 || cifra4 == digito2 || cifra4 == digito3 || cifra4 == digito5){
pica++;
}
//cifra 5
if(cifra5 == digito5){
fija++;
}
if (cifra5 == digito1 || cifra5 == digito2 || cifra5 == digito3 || cifra5 == digito4){
pica++;
}
if (fija == 5){
goto fin5;
}
lcd.setCursor(4,0);
lcd.print(numeroUsuario);
lcd.setCursor(2,1);
lcd.print(fija);
lcd.setCursor(3,1);
lcd.print("F");
lcd.setCursor(9,1);
lcd.print(pica);
lcd.setCursor(10,1);
lcd.print("P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("intento: ");
lcd.setCursor(8,0);
lcd.print(i+1);
}
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
lcd.setCursor(0,1);
lcd.print("el num es:");
lcd.setCursor(10,1);
lcd.print(numero);
delay(5000);
lcd.clear();
return;
fin5:
lcd.setCursor(4,0);
lcd.print(numeroUsuario);
lcd.setCursor(3,1);
lcd.print("5F");
lcd.setCursor(10,1);
lcd.print("0P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ganaste");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
delay(5000);
lcd.clear();
return;
}
/////////////////////////////////////////// CIFRA 6 ////////////////////////////////////////////////////////////////////////////
if(numeroIngresado == 6){
// Generar numero aleatorio
int digito1, digito2, digito3, digito4, digito5, digito6;
do {
digito1 = random(1, 10);
digito2 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito3 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito4 = random(0, 10);
digito5 = random(0, 10);
digito6 = random(0, 10);
} while (digito1 == digito2 || digito1 == digito3 || digito1 == digito4 || digito1 == digito5 || digito1 == digito6 || digito2 == digito3 || digito2 == digito4 || digito2 == digito5 || digito2 == digito6 || digito3 == digito4 || digito3 == digito5 || digito3 == digito6 || digito4 == digito5 || digito4 == digito6 || digito5 == digito6);
// Formar el número
int numero = digito1 * 100000 + digito2 * 10000 + digito3 * 1000 + digito4 * 100 + digito5 * 10 + digito6;
Serial.print(numero);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for (int i = 0; i < numIntentos; i++){
reinicio6:
int num = 0;
int pica = 0;
int fija = 0;
numeroUsuario = 0;
intento = 0;
position = 0;
// ingresar numero
lcd.setCursor(0,1);
lcd.print("digite el numero");
delay(5000);
lcd.clear();
while (numeroUsuario == 0 || numeroUsuario < 100000 || numeroUsuario > 999999) {
char key = teclado.getKey(); // Obtener la tecla presionada
if (key){
if (isdigit(key)) { // Verificar si la tecla presionada es un dígito
lcd.setCursor(position,0);
lcd.print(key); // Mostrar el dígito en la pantalla LCD
intento = intento * 10 + (key - '0'); // Convertir el dígito a entero y agregarlo al número ingresado
position++;
delay(500);
}else if (key == '#') {
numeroUsuario = intento;// Convertir el dígito a entero y agregarlo al número ingresado
Serial.printf("# ingresado: %d", numeroUsuario);
if(numeroUsuario < 100000 || numeroUsuario > 999999){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(2000);
lcd.clear();
position = 0;
intento=0;
numeroUsuario = 0;
}
}
}
}
lcd.clear();
// Separar las cifras del número ingresado por el usuario
int cifra1 = numeroUsuario / 100000;
int cifra2 = (numeroUsuario / 10000) % 10;
int cifra3 = (numeroUsuario / 1000) % 10;
int cifra4 = (numeroUsuario / 100) % 10;
int cifra5 = (numeroUsuario / 10) % 10;
int cifra6 = numeroUsuario % 10;
int total = cifra1 * 100000 + cifra2 * 10000 + cifra3 * 1000 + cifra4 * 100 + cifra5 * 10 + cifra6;
Serial.print(total);
if (cifra1 == cifra2 || cifra1 == cifra3 || cifra1 == cifra4 || cifra1 == cifra5 || cifra1 == cifra6 || cifra2 == cifra3 || cifra2 == cifra4 || cifra2 == cifra5 || cifra2 == cifra6 || cifra3 == cifra4 || cifra3 == cifra5 || cifra3 == cifra6 || cifra4 == cifra5 || cifra4 == cifra6 || cifra5 == cifra6){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(2000);
lcd.clear();
goto reinicio6;
}
// cifra 1
if (cifra1 == digito1) {
fija++;
}
if (cifra1 == digito2 || cifra1 == digito3 || cifra1 == digito4 || cifra1 == digito5 || cifra1 == digito6){
pica++;
}
//cifra 2
if (cifra2 == digito2) {
fija++;
}
if (cifra2 == digito1 || cifra2 == digito3 || cifra2 == digito4 || cifra2 == digito5 || cifra2 == digito6){
pica++;
}
//cifra 3
if (cifra3 == digito3) {
fija++;
}
if (cifra3 == digito1 || cifra3 == digito2 || cifra3 == digito4 || cifra3 == digito5 || cifra3 == digito6){
pica++;
}
//cifra 4
if(cifra4 == digito4){
fija++;
}
if(cifra4 == digito1 || cifra4 == digito2 || cifra4 == digito3 || cifra4 == digito5 || cifra4 == digito6){
pica++;
}
//cifra 5
if(cifra5 == digito5){
fija++;
}
if (cifra5 == digito1 || cifra5 == digito2 || cifra5 == digito3 || cifra5 == digito4 || cifra5 == cifra6){
pica++;
}
//Cifra 6
if(cifra6 == digito6){
fija++;
}
if(cifra6 == digito1 || cifra6 == digito2 || cifra6 == digito3 || cifra6 == digito4 || cifra6 == digito5){
pica++;
}
if (fija == 6){
goto fin6;
}
lcd.setCursor(4,0);
lcd.print(numeroUsuario);
lcd.setCursor(1,1);
lcd.print(fija);
lcd.setCursor(2,1);
lcd.print("F");
lcd.setCursor(10,1);
lcd.print(pica);
lcd.setCursor(11,1);
lcd.print("P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("intento: ");
lcd.setCursor(8,0);
lcd.print(i+1);
}
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
lcd.setCursor(0,1);
lcd.print("el num es:");
lcd.setCursor(10,1);
lcd.print(numero);
delay(5000);
lcd.clear();
return;
fin6:
lcd.setCursor(4,0);
lcd.print(numeroUsuario);
lcd.setCursor(1,1);
lcd.print("5F");
lcd.setCursor(11,1);
lcd.print("0P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ganaste");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
delay(5000);
lcd.clear();
return;
}
///////////////////////////////////////////// CIFRA 7 ////////////////////////////////////////////////////////////////////////////
if(numeroIngresado == 7){
// Generar numero aleatorio
int digito1, digito2, digito3, digito4, digito5, digito6, digito7;
do {
digito1 = random(1, 10);
digito2 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito3 = random(0, 10); // Permitir 0 como dígito para completar 10 posibilidades
digito4 = random(0, 10);
digito5 = random(0, 10);
digito6 = random(0, 10);
digito7 = random(0, 10);
} while (digito1 == digito2 || digito1 == digito3 || digito1 == digito4 || digito1 == digito5 || digito1 == digito6 || digito1 == digito7 || digito2 == digito3 || digito2 == digito4 || digito2 == digito5 || digito2 == digito6 || digito2 == digito7 || digito3 == digito4 || digito3 == digito5 || digito3 == digito6 || digito3 == digito7 || digito4 == digito5 || digito4 == digito6 || digito4 == digito7 || digito5 == digito6 || digito5 == digito7 || digito6 == digito7);
// Formar el número
int numero = digito1 * 1000000 + digito2 * 100000 + digito3 * 10000 + digito4 * 1000 + digito5 * 100 + digito6 * 10 + digito7;
Serial.print(numero);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for (int i = 0; i < numIntentos; i++){
reinicio7:
int num = 0;
int pica = 0;
int fija = 0;
numeroUsuario = 0;
intento = 0;
position = 0;
// ingresar numero
lcd.setCursor(0,1);
lcd.print("digite el numero");
delay(5000);
lcd.clear();
while (numeroUsuario == 0 || numeroUsuario < 1000000 || numeroUsuario > 9999999) {
char key = teclado.getKey(); // Obtener la tecla presionada
if (key){
if (isdigit(key)) { // Verificar si la tecla presionada es un dígito
lcd.setCursor(position,0);
lcd.print(key); // Mostrar el dígito en la pantalla LCD
intento = intento * 10 + (key - '0'); // Convertir el dígito a entero y agregarlo al número ingresado
position++;
delay(500);
}else if (key == '#') {
numeroUsuario = intento;// Convertir el dígito a entero y agregarlo al número ingresado
Serial.printf("# ingresado: %d", numeroUsuario);
if(numeroUsuario < 1000000 || numeroUsuario > 9999999){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(2000);
lcd.clear();
position = 0;
intento=0;
numeroUsuario = 0;
}
}
}
}
lcd.clear();
// Separar las cifras del número ingresado por el usuario
int cifra1 = numeroUsuario / 1000000;
int cifra2 = (numeroUsuario / 100000) % 10;
int cifra3 = (numeroUsuario / 10000) % 10;
int cifra4 = (numeroUsuario / 1000) % 10;
int cifra5 = (numeroUsuario / 100) % 10;
int cifra6 = (numeroUsuario / 10) % 10;
int cifra7 = numeroUsuario % 10;
int total = cifra1 * 1000000 + cifra2 * 100000 + cifra3 * 10000 + cifra4 * 1000 + cifra5 * 100 + cifra6 * 10 + cifra7;
Serial.print(total);
if (cifra1 == cifra2 || cifra1 == cifra3 || cifra1 == cifra4 || cifra1 == cifra5 || cifra1 == cifra6 || cifra1 == cifra7 || cifra2 == cifra3 || cifra2 == cifra4 || cifra2 == cifra5 || cifra2 == cifra6 || cifra2 == cifra7 || cifra3 == cifra4 || cifra3 == cifra5 || cifra3 == cifra6 || cifra3 == cifra7 || cifra4 == cifra5 || cifra4 == cifra6 || cifra4 == cifra7 || cifra5 == cifra6 || cifra5 == cifra7 || cifra6 == cifra7){
lcd.setCursor(0,0);
lcd.print("numero invalido");
delay(2000);
lcd.clear();
goto reinicio7;
}
// cifra 1
if (cifra1 == digito1) {
fija++;
}
if (cifra1 == digito2 || cifra1 == digito3 || cifra1 == digito4 || cifra1 == digito5 || cifra1 == digito6 || cifra1 == digito7){
pica++;
}
//cifra 2
if (cifra2 == digito2) {
fija++;
}
if (cifra2 == digito1 || cifra2 == digito3 || cifra2 == digito4 || cifra2 == digito5 || cifra2 == digito6 || cifra2 == digito7){
pica++;
}
//cifra 3
if (cifra3 == digito3) {
fija++;
}
if (cifra3 == digito1 || cifra3 == digito2 || cifra3 == digito4 || cifra3 == digito5 || cifra3 == digito6 || cifra3 == digito7){
pica++;
}
//cifra 4
if(cifra4 == digito4){
fija++;
}
if(cifra4 == digito1 || cifra4 == digito2 || cifra4 == digito3 || cifra4 == digito5 || cifra4 == digito6 || cifra4 == digito7){
pica++;
}
//cifra 5
if(cifra5 == digito5){
fija++;
}
if (cifra5 == digito1 || cifra5 == digito2 || cifra5 == digito3 || cifra5 == digito4 || cifra5 == cifra6 || cifra5 == digito7){
pica++;
}
//Cifra 6
if(cifra6 == digito6){
fija++;
}
if(cifra6 == digito1 || cifra6 == digito2 || cifra6 == digito3 || cifra6 == digito4 || cifra6 == digito5 || cifra6 == digito7){
pica++;
}
//cifra 7
if(cifra7 == digito7){
fija++;
}
if(cifra7 == digito1 || cifra7 == digito2 || cifra7 == digito3 || cifra7 == digito4 || cifra7 == digito5 || cifra7 == digito6){
pica++;
}
if (fija == 7){
goto fin7;
}
lcd.setCursor(4,0);
lcd.print(numeroUsuario);
lcd.setCursor(1,1);
lcd.print(fija);
lcd.setCursor(2,1);
lcd.print("F");
lcd.setCursor(11,1);
lcd.print(pica);
lcd.setCursor(12,1);
lcd.print("P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("intento: ");
lcd.setCursor(8,0);
lcd.print(i+1);
}
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
lcd.setCursor(0,1);
lcd.print("el nu es:");
lcd.setCursor(9,1);
lcd.print(numero);
delay(5000);
lcd.clear();
return;
fin7:
lcd.setCursor(4,0);
lcd.print(numeroUsuario);
lcd.setCursor(1,1);
lcd.print("5F");
lcd.setCursor(12,1);
lcd.print("0P");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ganaste");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fin del juego");
delay(5000);
lcd.clear();
return;
}
}
void deslizar_texto(int fila, String mensaje, int retardo){
for (int i = 0; i < columnas; i++){
mensaje = " " + mensaje;
}
mensaje = mensaje + " ";
for (int pos = 0; pos < mensaje.length(); pos++){
char key = teclado.getKey(); // Obtener la tecla presionada
if(key == '*'){
lcd.clear();
return;
}
lcd.setCursor(0, fila);
lcd.print(mensaje.substring(pos, pos + columnas));
delay(retardo);
}
}