#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int ledVoo = 8;
const int ledResultado = 10;
const int botaoPin = 7;
float multiplicador;
float aposta = 1.0;
float crashEm;
bool sacou = false;
unsigned long tempoAnterior = 0;
const int intervalo = 50; // Movimento rápido do avião
byte aviaoChar[8] = {
B00100,
B00110,
B11111,
B11111,
B11111,
B00110,
B00100,
B00000
};
int posicaoAviao = 0;
void setup() {
pinMode(ledVoo, OUTPUT);
pinMode(ledResultado, OUTPUT);
pinMode(botaoPin, INPUT_PULLUP);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.createChar(0, aviaoChar);
iniciarJogo();
}
void loop() {
unsigned long agora = millis();
if (!sacou && multiplicador < crashEm) {
if (agora - tempoAnterior >= intervalo) {
tempoAnterior = agora;
multiplicador += 0.1;
digitalWrite(ledVoo, !digitalRead(ledVoo));
posicaoAviao = map(multiplicador * 10, 10, crashEm * 10, 0, 15);
if (posicaoAviao > 15) posicaoAviao = 15;
lcd.clear();
lcd.setCursor(posicaoAviao, 0); // Avião na linha de cima
lcd.write(byte(0));
lcd.setCursor(0, 1); // Multiplicador na linha de baixo
lcd.print("Multi: ");
lcd.print(multiplicador, 2);
lcd.print("x");
}
if (digitalRead(botaoPin) == LOW) {
float ganho = aposta * multiplicador;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Voce sacou!");
lcd.setCursor(0, 1);
lcd.print("Multi: ");
lcd.print(multiplicador, 2);
lcd.print("x");
sacou = true;
digitalWrite(ledResultado, HIGH);
digitalWrite(ledVoo, LOW);
delay(1000);
iniciarJogo();
}
} else if (!sacou && multiplicador >= crashEm) {
for (int i = 0; i < 6; i++) {
lcd.clear();
if (i % 2 == 0) {
lcd.setCursor(0, 0);
lcd.print(" B U M M M !!! ");
lcd.setCursor(0, 1);
lcd.print(" B U M M M !!! ");
}
delay(250);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aviao caiu!");
lcd.setCursor(0, 1);
lcd.print("Multi: ");
lcd.print(multiplicador, 2);
lcd.print("x");
sacou = true;
digitalWrite(ledResultado, HIGH);
digitalWrite(ledVoo, LOW);
delay(1000);
iniciarJogo();
}
}
void iniciarJogo() {
lcd.clear();
digitalWrite(ledResultado, LOW);
digitalWrite(ledVoo, LOW);
sacou = false;
multiplicador = 1.0;
posicaoAviao = 0;
randomSeed(analogRead(0));
crashEm = random(150, 1000) / 100.0;
lcd.setCursor(0, 0);
lcd.print("Preparando voo...");
lcd.setCursor(0, 1);
lcd.print("Aposta: R$");
lcd.print(aposta, 2);
delay(2000);
lcd.clear();
tempoAnterior = millis();
}