#include<LiquidCrystal_I2C.h>

const byte PIN_CLK = 2;   
const byte PIN_DIO = 3;
const byte PIN_CLK2 = 4;   
const byte PIN_DIO2 = 5;   

const int led1 = 14;
const int led2 = 15;

const int pb1 = 6;
const int pb2 = 7;
const int pb3 = 8;
const int pb4 = 9;
const int pb5 = 10;

const int pb6 = 5;
const int pb7 = 4;
const int pb8 = 3;
const int pb9 = 2;
const int pb10 = 11;

int hpP1 = 8000;
int hpP2 = 8000;
float delExecute1, delExecute2;
int damageP1, damageP2;
int statepb1, statepb2;
int menu;

LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
  lcd.init();
  lcd.backlight();
  pinSet();
  Serial.begin(9600);        
  lcd.setCursor(0,0);
  lcd.print("Setting Up . . .");    
  delay(1000);
  lcd.clear();     
}

void loop() {
  inputButton();

  if(hpP1<0 || hpP1==0){
    hpP1=0;
    menu=4;
  }
  if(hpP2<0|| hpP2==0){
    hpP2=0;
    menu=3;
  }

  if(damageP1<0) damageP1=0;
  if(damageP2<0) damageP2=0; 

  panel();
}

void panel(){
  if(menu==0){
    lcd.setCursor(0,0);
    lcd.print("Player1");
    lcd.setCursor(1,1);
    lcd.print(hpP1);
    lcd.setCursor(9,0);
    lcd.print("Player2");
    lcd.setCursor(11,1);
    lcd.print(hpP2);
  }
  else if(menu==1){
    lcd.setCursor(0,0);
    lcd.print("Player 1 deals");
    lcd.setCursor(0,1);
    lcd.print(damageP1);
    lcd.print(" damage!");
  }
  else if(menu==2){
    lcd.setCursor(0,0);
    lcd.print("Player 2 deals");
    lcd.setCursor(0,1);
    lcd.print(damageP2);
    lcd.print(" damage!");
  }
  else if(menu==3){
    lcd.setCursor(0,0);
    lcd.print("  PLAYER 1 WINS ");
    lcd.setCursor(0,1);
    lcd.print("CONGRATULATIONS!");
    delay(5000);
    lcd.clear();
    hpP1 = 8000;
    hpP2 = 8000;
    menu=0;
  }
  else if(menu==4){
    lcd.setCursor(0,0);
    lcd.print("  PLAYER 2 WINS ");
    lcd.setCursor(0,1);
    lcd.print("CONGRATULATIONS!");
    delay(5000);
    lcd.clear();
    hpP1 = 8000;
    hpP2 = 8000;
    menu=0;
  }
}
void execute(int player){
  delExecute1 = damageP2*5;
  delExecute2 = damageP1*5;
  
  if(delExecute1>8000)delExecute1=8000;
  if(delExecute2>8000)delExecute2=8000;
  
  
  if(player==1){
    lcd.setCursor(0,0);
    lcd.print("ELECTROCUTING P1!");
    lcd.setCursor(1,1);
    lcd.print(delExecute1/1000); lcd.print(" seconds");
    digitalWrite(led1, HIGH);
    delay(delExecute1);
    digitalWrite(led1, LOW);
    lcd.clear();
  }
  else if(player==2){
    lcd.setCursor(0,0);
    lcd.print("ELECTROCUTING P2!");
    lcd.setCursor(1,1);
    lcd.print(delExecute2/1000); lcd.print(" seconds");
    digitalWrite(led2, HIGH);
    delay(delExecute2);
    digitalWrite(led2, LOW);
    lcd.clear();
  }
}

void inputButton(){
  if(digitalRead(pb1)==1){
    if(statepb1==0){
      lcd.clear();
      menu=1;
      damageP1+=100;
      //hpP1=hpP1+100;
      statepb1=1;
    }
  }
  else if(digitalRead(pb2)==1){
    if(statepb1==0){
      lcd.clear();
      menu=1;
      damageP1-=100;
      //hpP1=hpP1-100;
      statepb1=1;
    }
  }
  else if(digitalRead(pb3)==1){
    if(statepb1==0){
      lcd.clear();
      menu=1;
      damageP1+=50;
      //hpP1=hpP1+50;
      statepb1=1;
    }
  }
  else if(digitalRead(pb4)==1){
    if(statepb1==0){
      lcd.clear();
      menu=1;
      damageP1-=50;
      //hpP1=hpP1-50;
      statepb1=1;
    }
  }
  else if(digitalRead(pb5)==1){
    if(statepb1==0){
      lcd.clear();
      menu=0;
      hpP2-=damageP1;
      execute(2);
      damageP1=0;
      statepb1=1;
    }
  }
  else statepb1=0;
//=============================
  if(digitalRead(pb6)==1){
    if(statepb2==0){
      lcd.clear();
      menu=2;
      damageP2+=100;
      // hpP2=hpP2+100;
      statepb2=1;
    }
  }
  else if(digitalRead(pb7)==1){
    if(statepb2==0){
      lcd.clear();
      menu=2;
      damageP2-=100;
      // hpP2=hpP2-100;
      statepb2=1;
    }
  }
  else if(digitalRead(pb8)==1){
    if(statepb2==0){
      lcd.clear();
      menu=2;
      damageP2+=50;
      // hpP2=hpP2+50;
      statepb2=1;
    }
  }
  else if(digitalRead(pb9)==1){
    if(statepb2==0){
      lcd.clear();
      menu=2;
      damageP2-=50;
      // hpP2=hpP2-50;
      statepb2=1;
    }
  }
  else if(digitalRead(pb10)==1){
    if(statepb2==0){
      lcd.clear();
      menu=0;
      hpP1-=damageP2;
      execute(1);
      damageP2=0;
      statepb2=1;
    }
  }
  else statepb2=0;
}

void pinSet(){
  pinMode(pb1, INPUT);
  pinMode(pb2, INPUT);
  pinMode(pb3, INPUT);
  pinMode(pb4, INPUT);
  pinMode(pb5, INPUT);
  pinMode(pb6, INPUT);
  pinMode(pb7, INPUT);
  pinMode(pb8, INPUT);
  pinMode(pb9, INPUT);
  pinMode(pb10, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);  
}