#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define botao 2
byte bob[8] = {B01110, B11011, B11011, B01110, B11111, B01110, B01010, B01010};
byte alien[8] = {B11111, B10101, B11011, B01110, B11111, B01110, B01110, B01010};
byte cobra1[8] = {B00000, B11110, B10101, B00111, B10111, B11110, B00000, B00000};
byte cobra2[8] = {B00000, B10101, B11111, B11111, B11111, B01010, B00000, B00000};
byte cobra3[8] = {B00000, B10010, B11111, B11111, B11111, B10101, B00000, B00000};
byte cobra4[8] = {B00000, B10100, B11110, B11111, B11110, B01000, B00000, B00000};
byte vazio[8] = {B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000};
char buffer[10];
int vida = 7;
int n=0;
void setup()
{
pinMode(botao, INPUT_PULLUP);
lcd.init();
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
lcd.createChar(0, bob);
lcd.createChar(1, alien);
lcd.createChar(2, vazio);
lcd.createChar(3, cobra1);
lcd.createChar(4, cobra2);
lcd.createChar(5, cobra3);
lcd.createChar(6, cobra4);
lcd.backlight();
}
void loop()
{
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
contadorInicial();
vida = 7;
int aliens = 0;
while(!fimJogo()){
int ran = random(-1,2);
if(ran == 0){
andarAlienSimples(aliens);
} else{
andarAlienGrande(aliens);
}
delay(200);
aliens++;
}
mensagemFinal(aliens);
}
void cobra(int i, int ran){
lcd.setCursor(i-3,ran);
lcd.write(byte(3));
lcd.setCursor(i-2,ran);
lcd.write(byte(4));
lcd.setCursor(i-1,ran);
lcd.write(byte(5));
lcd.setCursor(i,ran);
lcd.write(byte(6));
}
int dificulta(int aliens){
if(aliens>5 && aliens<10){
return 20;
}
else if(aliens>=10 && aliens<20){
return 15;
}
else if(aliens>=20 && aliens<30){
return 10;
}
else if(aliens>=30 && aliens<35){
return 5;
}
else if(aliens>=35){
return 1;
}
else{
return 30;
}
}
boolean fimJogo(){
if(vida<=2){
return true;
}
return false;
}
void contadorInicial(){
for(int i=4;i>0;i--){
lcd.print(i);
delay(1000);
lcd.clear();
delay(500);
}
}
void dano(int ran, int i){
if(i == 2 && ran == n){
digitalWrite(vida, LOW);
vida--;
}
}
void andarAlienSimples(int aliens){
int ran = random(-1,2);
for(int i=16;i>(-2);i--){
n = movePersonagem();
lcd.setCursor(i,ran);
lcd.write(byte(1));
lcd.setCursor(i+1,ran);
lcd.write(byte(2));
dano(ran,i);
delay(dificulta(aliens));
}
}
void andarAlienGrande(int aliens){
int ran = random(-1,2);
for(int i=16;i>(-2);i--){
n = movePersonagem();
cobra(i,ran);
lcd.setCursor(i+1,ran);
lcd.write(byte(2));
dano(ran,i);
delay(dificulta(aliens));
}
}
int movePersonagem(){
lcd.setCursor(2,n);
lcd.write(byte(0));
if(digitalRead(botao) == LOW){
lcd.setCursor(2,0);
lcd.write(byte(2));
return 1;
}else{
lcd.setCursor(2,1);
lcd.write(byte(2));
return 0;
}
}
void mensagemFinal(int aliens){
lcd.setCursor(8,1);
lcd.print("Acabou");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Aliens");
lcd.setCursor(0,1);
lcd.print("derrotados: ");
lcd.setCursor(12,1);
lcd.print(aliens);
delay(5000);
}