/*
* Date: 22/02/2023
* Title: LCD 16x2 ESP32
* Author: urish's projects
* MOD Edit: RELL9030
* References: https://arduino-spain.site/juego-arduino/
*
*/
/*
*****************************************************
*
* LIBRERIAS
*
*****************************************************
*/
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
/*
*****************************************************
*
* VARIABLES & DEFINES
*
*****************************************************
*/
#define boton A1 // Deficion del pin pulsador
#define speaker 10 // Deficion del pin parlante
LiquidCrystal_I2C LCD(0x27, 20, 2); //VARIABLE LCD
int level = 1;
int pause = 400;
byte p = 0;
byte dragon[8] = {
0b01110, 0b11011, 0b11111, 0b11100, 0b11111, 0b01100, 0b10010, 0b11011
};
byte arbre[8] = {
0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b11011, 0b01100, 0b01100
};
byte pierre[8] = {
0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b01110, 0b11111
};
byte oiseau[8] = {
0b00100, 0b00101, 0b01111, 0b11111, 0b10100, 0b00100, 0b00000, 0b00000
};
// dino left leg char
byte dino_l[8] = {
B00000111, B00000101, B00000111, B00010110, B00011111, B00011110, B00001110, B00000100
};
// dino right leg char
byte dino_r[8] = {
B00000111, B00000101, B00000111, B00010110, B00011111, B00011110, B00001110, B00000010
};
// small cactus
byte cactus_small[8] = {
B00000000, B00000000, B00000100, B00000101, B00010101, B00010110, B00001100, B00000100
};
// big cactus
byte cactus_big[8] = {
B00000000, B00000100, B00000101, B00010101, B00010110, B00001100, B00000100, B00000100
};
/*
*****************************************************
*
* SETUP
*
*****************************************************
*/
void setup() {
Serial.begin(9600);
pinMode (speaker, OUTPUT); //SPEAKER
pinMode (boton, INPUT);
analogWrite(boton, LOW);
LCD.init();
LCD.backlight();
Serial.println(boton);
/* //OTROS PERSONAJES
LCD.createChar(0, dragon); // creamos caracter de dinosaurio
LCD.createChar(1, arbre); // creamos caracter de arbusto pequeño
LCD.createChar(2, pierre); // creamos caracter de piedra
LCD.createChar(3, oiseau); // creamos caracter de ave
*/
LCD.createChar(0, dino_r); // creamos caracter de dinosaurio
LCD.createChar(1, cactus_big); // creamos caracter de arbusto grande
LCD.createChar(2, cactus_small); // creamos caracter de arbusto pequeño
LCD.createChar(3, oiseau); // creamos caracter de ave
LCD.setCursor(7, 0);
LCD.print("GO!");
delay(400);
tone(speaker, 600); //Priner tono (pin, frec, tiempo)
delay(100);
noTone(speaker);
LCD.clear();
}
void loop() {
byte d = 1;
byte x = 15;
byte y = 1;
byte i = random (1, 4);
if (i == 3) y = 0;
else y = 1;
while (x > 0) {
LCD.clear();
LCD.setCursor(0, 0);
LCD.print(level);
if (digitalRead(boton) == LOW) d = 1;
if (digitalRead(boton) == HIGH) d = 0;
if (p > 3) d = 1;
LCD.setCursor(4, d);
LCD.print(char(0));
LCD.setCursor(x, y);
tone(speaker, 50);
LCD.print(char(i));
noTone(speaker);
if (x == 4 && y == d) {
delay(400);
tone(speaker, 50);
delay(100);
noTone(speaker);
delay(100);
tone(speaker, 20);
delay(300);
noTone(speaker);
LCD.clear();
delay(200);
LCD.setCursor(3, 0);
LCD.print("GAME OVER!");
delay(600);
LCD.clear();
delay(400);
LCD.setCursor(3, 0);
LCD.print("GAME OVER!");
delay(600);
LCD.clear();
LCD.setCursor(3, 1);
LCD.print("LEVEL: ");
LCD.print(level);
delay(400);
LCD.setCursor(3, 0);
LCD.print("GAME OVER!");
delay(3000);
LCD.clear();
LCD.setCursor(7, 0);
LCD.print("GO!");
delay(400);
tone(speaker, 600);
delay(100);
noTone(speaker);
LCD.clear();
level = 0;
pause = 400;
p = 0;
y = 1;
x = 0;
break;
}
if (d == 0) { tone(speaker, 200); delay(100); noTone(speaker); }
else { delay(100); }
delay(pause);
x = x - 1;
p = p + 1;
if (p > 4) p = 0;
}
tone(speaker, 800);
delay(20);
level = level + 1;
pause = pause - 20;
if (pause < 0) pause = 0;
}