#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 20, 4);
 int i;
 int j;
 int k;
 int me =80;
byte pacman [] 
 
{ B01110,
  B11111,
  B11101,
  B11111,
  B11111,
  B11000,
  B11111,
  B01110
};

byte pacmanhungry [] 

{ B01110,
  B11101,
  B11111,
  B11100,
  B11000,
  B11000,
  B11100,
  B01111
};    

byte food [] 
 
{ B00000,
  B00000,
  B00000,
  B00100,
  B01110,
  B11111,
  B01110,
  B00100
};    

byte ghostfront [] 
 
{ B01110,
  B10101,
  B10101,
  B11111,
  B11111,
  B11111,
  B11111,
  B10101
};    

byte ghostleft [] 
 
{ B01110,
  B11111,
  B01011,
  B01011,
  B11111,
  B10011,
  B11111,
  B10101
};    

byte ghostright [] 
 
{ B01110,
  B11111,
  B11010,
  B11010,
  B11111,
  B11100,
  B11111,
  B10101
};    

void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.clear();
  delay(me);
  
  lcd.createChar(1, pacman );
  lcd.createChar(2, pacmanhungry);
  lcd.createChar(3, food);
  lcd.createChar(4, ghostfront);
  lcd.createChar(5, ghostleft);
  lcd.createChar(6, ghostright);
  
}

void loop()
{
  for(i=0;i<16;i++)
  {
    
    lcd.setCursor(4,1); // create ghost character
    lcd.write(4);
    lcd.setCursor(i,0);// make pacman move left to right
    lcd.write(1);
    delay(me);
    //lcd.clear();

    lcd.setCursor(i,0);
    lcd.write(2);
    delay(me);
    lcd.clear();
    
    if (i<3)
    {

    lcd.setCursor(3,0); //create food character
    lcd.write(3);
    lcd.setCursor(7,0); //create food character
    lcd.write(3);
    lcd.setCursor(11,0); //create food character
    lcd.write(3);
    }

    else if (i<7)
    {
    lcd.setCursor(7,0); //create food character
    lcd.write(3);
    lcd.setCursor(11,0); //create food character
    lcd.write(3);
    }

    else if (i<11)
    {

    lcd.setCursor(11,0); //create food character
    lcd.write(3);
    }

  }

  for(i=0;i<16;i++)
  {
    if (i<4)
    { 
      lcd.setCursor(i+3,1); // create ghost character
      lcd.write(5);
      lcd.setCursor(i,1);// make pacman move left to right
      lcd.write(1);
      delay(me);
      //lcd.clear();

      lcd.setCursor(i,1);
      lcd.write(2);
      delay(me);
      lcd.clear();

    }

    else if (i>=4 && i<=8)
    { j=i+2;
      lcd.setCursor(j,1); // create ghost character
      lcd.write(4);

      lcd.setCursor(i,1);// make pacman move left to right
      lcd.write(1);
      delay(me);
      //lcd.clear();

      lcd.setCursor(i,1);
      lcd.write(2);
      delay(me);
      lcd.clear();
    
    }

    else if (i>8 && i<=13)
    { k=i+1;
      lcd.setCursor(k,1); // create ghost character
      lcd.write(6);

      lcd.setCursor(i,1);// make pacman move left to right
      lcd.write(1);
      delay(me);
      //lcd.clear();

      lcd.setCursor(i,1);
      lcd.write(2);
      delay(me);
      lcd.clear();
    
    }

    else if (i>13)
    {
      lcd.setCursor(i,1);// make pacman move left to right
      lcd.write(1);
      delay(me);
      //lcd.clear();

      lcd.setCursor(i,1);
      lcd.write(2);
      delay(me);
      lcd.clear();

    }

  }

}