BUILD YOUR OWN!

The products used were purchased on Amazon

CODE ARDUINO

#include <'Wire.h'>
#include <'LiquidCrystal_I2C.h'>
// Inizializza l'oggetto LiquidCrystal_I2C. Assicurati di utilizzare gli indirizzi corretti.
LiquidCrystal_I2C lcd(0x27, 20, 4); // Indirizzo I2C 0x27, display 20x4

// Dichiarazioni delle parole disordinate e ordinate per ogni livello
const char* paroleDisordinate[] = {"hnic", "gnith", "itnra", "otbso", "diltaig", "mrnstoe", "igoncearn", "etsuarrqahed", "otictbnnurio", "aatciechsrctri"};
const char* paroleOrdinate[] = {"chin", "night", "train", "boost", "digital", "monster", "ignorance", "headquarters", "contribution", "characteristic"};

// Variabile per tenere traccia del livello attuale
int livelloAttuale = 0;

// Variabile per tenere traccia del tempo trascorso
unsigned long tempoInizio;
const unsigned long tempoLimite = 13000; // 13 secondi
bool visualizzataParolaOrdinata = false;
unsigned long TempoSecondi = tempoLimite / 1000;

bool giocoIniziato = false;

void mostraParolaOrdinata() {
lcd.clear();

// Mostra la parola ordinata corrispondente alla parola disordinata
lcd.setCursor(0, 0);
lcd.print("ORDERLY WORD:");
lcd.setCursor(0, 1);
lcd.print(paroleOrdinate[livelloAttuale]);
}

void setup() {
// Inizia la comunicazione seriale a 9600 baud
Serial.begin(9600);

// Inizializza il display LCD
lcd.init();
// Accendi la retroilluminazione del display (se supportato dal display)
lcd.backlight();
// Mostra "IL GIOCO STA PER COMINCIARE"
lcd.setCursor(4, 1);
lcd.print("THE GAME IS");
lcd.setCursor(3, 2);
lcd.print("ABOUT TO BEGIN");
delay(3000); // Attendere 3 secondi
lcd.clear(); // Pulisce il display
giocoIniziato = true; // Segna che il gioco è iniziato
// Mostra il livello corrente
lcd.setCursor(7, 0);
lcd.print("_______");
lcd.setCursor(7, 1);
lcd.print("LEVEL ");
lcd.print(livelloAttuale + 1); // Aggiungi 1 poiché gli array iniziano da zero
lcd.setCursor(7, 2);
lcd.print("_______");
delay(2500); // Attendi un secondo prima di mostrare la parola disordinata
// Mostra il primo livello
mostraParolaDisordinata();
}

void loop() {
if (giocoIniziato) {
// Calcola il tempo trascorso
unsigned long tempoTrascorso = millis() - tempoInizio;
unsigned long tempoTrascorsoSecondi = tempoTrascorso / 1000;
// Calcola il tempo rimanente
unsigned long tempoRimanente = TempoSecondi - tempoTrascorsoSecondi;

// Controlla se sono passati 13 secondi
if (tempoTrascorso >= tempoLimite) {
if (!visualizzataParolaOrdinata) {
// Se non è stata ancora visualizzata la parola ordinata, mostra quella ordinata
visualizzataParolaOrdinata = true;
mostraParolaOrdinata();
} else {
// Passa al prossimo livello dopo un ritardo di 3 secondi
delay(3000);
livelloAttuale++;
if (livelloAttuale >= sizeof(paroleDisordinate) / sizeof(paroleDisordinate[0])) {
// Se abbiamo superato l'ultimo livello, mostriamo "GIOCO TERMINATO"
lcd.clear();
lcd.setCursor(5, 1);
lcd.print("GAME OVER");
delay(3000); // Attendi 3 secondi
// Spegni il display
lcd.clear();
while (true); // Loop infinito per mantenere il display spento
}

// Reimposta visualizzataParolaOrdinata a false per il nuovo livello
visualizzataParolaOrdinata = false;

// Mostra il livello corrente
lcd.clear();
lcd.setCursor(4, 1);
lcd.print("NEXT WORD !");
delay(2000);
lcd.clear();
lcd.setCursor(7, 0);
lcd.print("_______");
lcd.setCursor(7, 1);
lcd.print("LEVEL ");
lcd.print(livelloAttuale + 1); // Aggiungi 1 poiché gli array iniziano da zero
lcd.setCursor(7, 2);
lcd.print("_______");
delay(2500); // Attendi un secondo prima di mostrare la parola disordinata
// Mostra la prossima parola disordinata
mostraParolaDisordinata();
}
}

// Aggiorna il tempo rimanente lcd.setCursor(0, 3);
lcd.print("REMAINING TIME: ");
lcd.print(tempoRimanente); // Visualizza il tempo rimanente lcd.print("s"); // Aggiunge "s" per indicare i secondi
}
}
// Funzione per mostrare la parola disordinata corrente void mostraParolaDisordinata() {
lcd.clear();

// Mostra la parola disordinata per il livello corrente lcd.setCursor(0, 0);
lcd.print("DISCORDERED WORD:");
lcd.setCursor(0, 1);
lcd.print(paroleDisordinate[livelloAttuale]);

// Registra il tempo di inizio per il livello corrente tempoInizio = millis();
}