Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//Revenge on Cheese! Fly attack!  //<>//
//Interactive toy by Gabriel Holtschlag
//
//command your worm squad and take control of operation "Revenge by Chomp". 
//Avoid the pesky flies and chomp as much cheese as you can.
//
//CONTROLS: 
//worm1 - "1" key
//worm2 - "2" key
//worm3 - "3" key

boolean gameStart;
//individual worm y values
float worm1Y;
float worm2Y;
float worm3Y;
//individual fly values
//a function for all flies could not be used
float fly1Y;
float fly2Y;
float fly3Y;
float fly4Y;
float fly1XPos= 0;
float fly2XPos= 0;
float fly3XPos= 0;
float fly4XPos= 0;
float flyBounce;// used to create a wave flying pattern

float yGenerator1;
float yGenerator2;
float yGenerator3;
float yGenerator4;

float xGenerator1;
float xGenerator2;
float xGenerator3;
float xGenerator4;

float stop1;
float stop2;
float stop3;
float stop4;
float speed;

//used to stop worm input individually
boolean worm1Dead;
boolean worm2Dead;
boolean worm3Dead;

//loading bar
float loading;// used as a visual timer 
int score;
//individual checks to increase loading speed per worm
int worm1Eating;
int worm2Eating;
int worm3Eating;
//values used for animating the mouth(controls the wave size)
float chew1;
float chew2;
float chew3;

float endTimer;
float a;//timer
boolean isGameOver;
float b;//timer
int highScore;

void setup()
{
  size(400, 400);
}

void draw()
{ 
  //scoring system
  eatAndScore();
  towel();
  grass();
  drawCheese();
  stroke(0);
  //xposition,yposition,biteSize
  drawWorm(80, worm1Y, chew1);
  drawWorm(200, worm2Y, chew2);
  drawWorm(320, worm3Y, chew3);
  //turn off worm
  wormDeath();
  fill(0);
  noStroke();
  //score board
  rect(0, 352, 400, 200);
  //controlls, 1,2, & 3
  wormInput();
  //y axis movement
  fliesXMov();
  ////draw flies////
  fly1(0);
  if (score >=1)
  {
    fly2(0);
  }
  if (score >=4)
  {
    fly3(0);
  }
  if (score >=8)
  {
    fly4(0);
  }

  //loading bar
  stroke(0);
  fill(0, 0, 0, 100);
  rect(20, 10, 360, 20);
  fill(250);
  rect (20, 10, loading, 20);
  //score visual
  textSize(30);
  text("Score: "+score, 20, 385);
  //transition
  endScreen();
  //endScreen + reset condition
  gameOver();
  startingScreen();
}

/////////////////////
//Functions////
///////////////////
void startingScreen()
{
  if (!gameStart)
  {
     fill(0);
     rect(0,0,400,400);
     fill(250);
     textSize(34);
     text("Revenge on Cheese!",30,140);
     textSize(24);
     text ("Fly attack!",140,185);
     textSize(18);
     text ("click the screen to start!",94,300);
     text ("check source for game controls",60,340);
     
     if (mousePressed)
     {
       gameStart= true;
     }
  }
}
void eatAndScore()
{
  //highscore update
  if (score>= highScore)
  {
    highScore = score;
  }
  //individual worm position check
  if (worm1Y+340 <= 170)
  {
    worm1Eating = 1;
    chew1=15;
  } 
  else if (worm1Y+340 >=170)
  {
    worm1Eating = 0;
    chew1 =0;
  }
  
  if (worm2Y+340 <= 170)
  {
    worm2Eating =1;
    chew2 =15;
  } 
  else if (worm2Y+340 >=170)
  {
    worm2Eating =0;
    chew2 = 0;
  }
  
  if (worm3Y+340 <= 170)
  {
    worm3Eating = 1;
    chew3 = 15;
  }
  else if (worm3Y+340 >=170)
  {
    worm3Eating = 0;
    chew3 = 0;
  }
  //score count
  if (worm1Eating + worm2Eating + worm3Eating >= 1)
  {
    if (loading <=360)
    {
      loading = loading + worm1Eating +worm2Eating +worm3Eating;
    } 
    else if (loading >=360)
    {
      loading =0;
      score = score +1;
      println("Chomp!");
    }
  }
}
void towel()
{
  //towel
  background(230, 65, 40);
  noStroke();
  fill(220);
  rect(40,140,20,100);
  rect(340,140,20,100);
  rect(140,140,20,100);
  rect(240,140,20,100);
  fill(0,0,0,80);
  rect(0,140,400,30);
    fill(0,0,0,40);
  rect(0,140,400,40);
}
void grass()
{
  noStroke();
  fill(90, 200, 60);
  rect(0, 200, 400, 200);
  fill(0, 0, 0, 10);
  rect(0, 210, 400, 200);
  rect(0, 220, 400, 200);
  rect(0, 230, 400, 200);
  rect(0, 240, 400, 200);
  rect(0, 250, 400, 200);
  rect(0, 260, 400, 200);
  rect(0, 270, 400, 200);
  rect(0, 280, 400, 200);
  rect(0, 290, 400, 200);
  rect(0, 300, 400, 200);
  rect(0, 310, 400, 200);
  rect(0, 320, 400, 200);
  rect(0, 330, 400, 200);
  rect(0, 340, 400, 200);
  rect(0, 350, 400, 200);
  rect(0, 360, 400, 200);
  //dirt
  fill(180,115,90);
  ellipse(200,350,400,70);
  fill(175,105,85);
  ellipse(200,360,400,70);
  //holes
  fill(30, 20, 10);
  ellipse(80, 350, 80, 40);
  ellipse(200, 350, 80, 40);
  ellipse(320, 350, 80, 40);
}
void fliesXMov()
{
  //movement and accelaration based on score
  speed = 1 + (score/4);
  //move only if random "stop" is under n 
  if (stop1 <= 120)  // used to randomly delay flies
  {
    fly1XPos = fly1XPos+ speed;
  }
  if (stop2 <= 120)
  {
    fly2XPos= fly2XPos+ speed;
  }
  if (stop3 <= 120)
  {
    fly3XPos= fly3XPos+ speed;
  }
  if (stop4 <= 120)
  {
    fly4XPos= fly4XPos+ speed;
  }
}
void endScreen()
{
  if (isGameOver)
  {
    //use timer to create order with delays
    a = a+0.05;
    
    //repeat the same statement with delay, adding more lines each time
    if (int(a) >=1)
    {
      for (int i =0; i<400; i= i+20)
      {
        line(0, i, 400, i);
      }
    }
    if (int(a) >=1.5)
    {
      for (int i =0; i<400; i= i+15)
      {
        line(0, i, 400, i);
      }
    }
    if (int(a) >=2)
    {
      for (int i =0; i<400; i= i+10)
      {
        line(0, i, 400, i);
      }
    }
    if (int(a) >=2.5)
    {
      for (int i =0; i<400; i= i+5)
      {
        line(0, i, 400, i);
      }
    }
    if (int(a) >=3)
    {
      for (int i =0; i<400; i= i+3)
      {
        line(0, i, 400, i);
      }
    }
    if (int(a) >=3.5)
    {
      for (int i =0; i<400; i= i+1)
      {
        line(0, i, 400, i);
      }
    }
  }
}

void wormInput()
{
  if (keyPressed)
  {
    // worm goes up on players input + conditions
    if (key == '1' && !worm1Dead && (worm1Y+340) > 20)
    {
      worm1Y = worm1Y -3;
    } 
    if (key == '2' && !worm2Dead && (worm2Y+340) > 20)
    {
      worm2Y = worm2Y -3;
    } 
    if (key == '3' && !worm3Dead && (worm3Y+340) > 20)
    {
      worm3Y = worm3Y -3;
    } 
  }
  //Worm gravity
  if ( worm1Y <=0)
  {
    worm1Y++;
  }
  if (worm2Y <=0)
  {
    worm2Y++;
  }
  if (worm3Y <=0)
  {
    worm3Y++;
  }
}
void wormDeath()
{
  //draw dead face
  if (worm1Dead)
  {
    stroke(0);
    fill(250);
    ellipse(80, worm1Y+337, 60, 60);
    //left eye
    line(80-25, worm1Y+335, 80-15, worm1Y+325);
    line(80-15, worm1Y+335, 80-25, worm1Y+325);  
    //right eye
    line(80+25, worm1Y+335, 80+15, worm1Y+325);
    line(80+15, worm1Y+335, 80+25, worm1Y+325);
    fill(0);
    //mouth
    ellipse(80, worm1Y+340, 20, 8);
  }
  //draw dead face
  if (worm2Dead)
  {
    stroke(0);
    fill(250);
    ellipse(200, worm2Y+337, 60, 60);
    //left eye
    line(200-25, worm2Y+335, 200-15, worm2Y+325);
    line(200-15, worm2Y+335, 200-25, worm2Y+325);  
    //right eye
    line(200+25, worm2Y+335, 200+15, worm2Y+325);
    line(200+15, worm2Y+335, 200+25, worm2Y+325);
    fill(0);
    //mouth
    ellipse(200, worm2Y+340, 20, 8);
  }
  //draw dead face
  if (worm3Dead)
  {
    stroke(0);
    fill(250);
    ellipse(320, worm3Y+337, 60, 60);
    //left eye
    line(320-25, worm3Y+335, 320-15, worm3Y+325);
    line(320-15, worm3Y+335, 320-25, worm3Y+325);  
    //right eye
    line(320+25, worm3Y+335, 320+15, worm3Y+325);
    line(320+15, worm3Y+335, 320+25, worm3Y+325);
    fill(0);
    //mouth
    ellipse(320, worm3Y+340, 20, 8);
  }
  // gameOver
  if (worm1Dead && worm2Dead && worm3Dead)
  {
    isGameOver = true;
  }
}
void gameOver()
{
  if (isGameOver)
  {
    //timer used for text timed drawing
    b= b+0.05;
    //endScreen text
    fill(250);
    textSize(60);
    if (b>=5)
      text("G", 20+30, 200);
    if (b>=6)
      text("a", 60+30, 200);
    if (b>=7)
      text("m", 90+30, 200);
    if (b>=8)
      text("e", 142+30, 200);
    if (b>=9)
      text("o", 190+30, 200);
    if (b>=10)
      text("v", 225+30, 200);
    if (b>=11)
      text("e", 255+30, 200);
    if (b>=12)
      text("r", 285+30, 200);
    if (b>=13)
    {
      textSize(20);
      text("Press any key to restart", 80, 260);
      text("score: "+ score, 160, 60);
      text("Highscore: "+ highScore, 136, 35);
    }
    if (b>=15)
    {
      textSize(12);
      text("(except \"esc\")", 155, 280);
    }
    // restart game
    if (keyPressed && b>= 6)
    {
      
      worm1Y =0;
      worm2Y =0;
      worm3Y =0;
      fly1Y =0;
      fly2Y =0;
      fly3Y =0;
      fly4Y =0;
      fly1XPos= 0;
      fly2XPos= 0;
      fly3XPos= 0;
      fly4XPos= 0;
      flyBounce= 0;
      yGenerator1= 0;
      yGenerator2= 0;
      yGenerator3= 0;
      yGenerator4= 0;     
      xGenerator1= 0;
      xGenerator2= 0;
      xGenerator3= 0;
      xGenerator4= 0;      
      stop1= 0;
      stop2= 0;
      stop3= 0;
      stop4= 0;
      speed= 0;      
      worm1Dead= false;
      worm2Dead= false;
      worm3Dead= false;
      loading= 0;
      score= 0;
      worm1Eating= 0;
      worm2Eating =0;
      worm3Eating= 0;
      chew1= 0;
      chew2= 0;
      chew3= 0;
      endTimer= 0;
      a= 0;
      isGameOver = false;
      b= 0;
    }
  }
}

void fly1(float fly1X)
{
  flyBounce = 80*sin(frameCount *0.007);
  //set random y value, and delay xposition
  if ((fly1XPos+fly1X)%500 == 450%500)
  {
    yGenerator1 = random(100, 160);
    xGenerator1 = random(100, 2000);
  }
  fly1Y =  yGenerator1;
  stop1 = xGenerator1 ;
  stop1 --;//used on draw as a condition for xmovement
  ////draw fly//////////
  stroke(0);
  //wing
  fill(250, 250, 250, 180);
  ellipse(((fly1XPos+fly1X)%500), fly1Y+flyBounce-15-5*sin(frameCount * 0.1), 10+3*sin(frameCount * 0.1), 25+10*sin(frameCount * 0.1));
  fill(0);
  //body
  fill(240);
  ellipse(((fly1XPos+fly1X)%500)+15, fly1Y+flyBounce, 5, 5);
  fill(220);
  ellipse((fly1XPos+fly1X)%500, fly1Y+flyBounce, 30, 20);
  fill(240);
  ellipse(((fly1XPos+fly1X)%500)+8, fly1Y+flyBounce, 5, 5);
  //wing
  fill(250, 250, 250, 180);
  ellipse(((fly1XPos+fly1X)%500)-7, fly1Y+flyBounce-17-5*sin(frameCount * 0.1), 13+3*sin(frameCount * 0.1), 25+10*sin(frameCount * 0.1));

  //set collision boxes
  if ((fly1XPos+fly1X)%500 >= 80-25 && (fly1XPos+fly1X)%500 <= 80+25 && fly1Y+flyBounce >= worm1Y+340-25 && fly1Y+flyBounce <= worm1Y+340+25)
  {
    if (!worm1Dead)//stop interactions with dead worms;
    {
      worm1Dead = true;
    }
  }
  if ((fly1XPos+fly1X)%500 >= 200-25 && (fly1XPos+fly1X)%500 <= 200+25 && fly1Y+flyBounce >= worm2Y+340-25 && fly1Y+flyBounce <= worm2Y+340+25)
  {
    if (!worm2Dead)//stop interactions with dead worms;
    {
      worm2Dead = true;
    }
  }
  if ((fly1XPos+fly1X)%500 >= 320-25 && (fly1XPos+fly1X)%500 <= 320+25 && fly1Y+flyBounce >= worm3Y+340-25 && fly1Y+flyBounce <= worm3Y+340+25)
  {
    if (!worm3Dead)//stop interactions with dead worms;
    {
      worm3Dead = true;
    }
  }
}
void fly2(float fly2X)
{
  flyBounce = 80*sin(frameCount *0.007);
  //set random y value, and delay xposition
  if ((fly2XPos+fly2X)%500 == 450%500)
  {
    yGenerator2 = random(170, 210);
    xGenerator2 = random(100, 2000);
  }
  fly2Y =  yGenerator2;
  stop2 = xGenerator2 ;
  stop2 --;//used on draw as a condition for xmovement
  ////draw fly//////////
  stroke(0);
  //wing
  fill(250, 250, 250, 180);
  ellipse(((fly2XPos+fly2X)%500), fly2Y+flyBounce-15-5*sin(frameCount * 0.1), 10+3*sin(frameCount * 0.1), 25+10*sin(frameCount * 0.1));
  fill(0);
  //body
  fill(240);
  ellipse(((fly2XPos+fly2X)%500)+15, fly2Y+flyBounce, 5, 5);
  fill(50);
  ellipse((fly2XPos+fly2X)%500, fly2Y+flyBounce, 30, 20);
  fill(240);
  ellipse(((fly2XPos+fly2X)%500)+8, fly2Y+flyBounce, 5, 5);
  //wing
  fill(250, 250, 250, 180);
  ellipse(((fly2XPos+fly2X)%500)-7, fly2Y+flyBounce-17-5*sin(frameCount * 0.1), 13+3*sin(frameCount * 0.1), 25+10*sin(frameCount * 0.1));

  //set collision boxes
  if ((fly2XPos+fly2X)%500 >= 80-25 && (fly2XPos+fly2X)%500 <= 80+25 && fly2Y+flyBounce >= worm1Y+340-25 && fly2Y+flyBounce <= worm1Y+340+25)
  {
    if (!worm1Dead)//stop interactions with dead worms;
    {
      worm1Dead = true;
    }
  }
  if ((fly2XPos+fly2X)%500 >= 200-25 && (fly2XPos+fly2X)%500 <= 200+25 && fly2Y+flyBounce >= worm2Y+340-25 && fly2Y+flyBounce <= worm2Y+340+25)
  {
    if (!worm2Dead)//stop interactions with dead worms;
    {
      worm2Dead = true;
    }
  }
  if ((fly2XPos+fly2X)%500 >= 320-25 && (fly2XPos+fly2X)%500 <= 320+25 && fly2Y+flyBounce >= worm3Y+340-25 && fly2Y+flyBounce <= worm3Y+340+25)
  {
    if (!worm3Dead)//stop interactions with dead worms;
    {
      worm3Dead = true;
    }
  }
}
void fly3(float fly3X)
{
  flyBounce = 80*sin(frameCount *0.007);
  //set random y value, and delay xposition
  if ((fly3XPos+fly3X)%500 == 450%500)
  {
    yGenerator3 = random(220, 290);
    xGenerator3 = random(100, 2000);
  }
  fly3Y =  yGenerator3;
  stop3 = xGenerator3 ;
  stop3 --;//used on draw as a condition for xmovement
  ////draw fly//////////
  stroke(0);
  //wing
  fill(250, 250, 250, 180);
  ellipse(((fly3XPos+fly3X)%500), fly3Y+flyBounce-15-5*sin(frameCount * 0.1), 10+3*sin(frameCount * 0.1), 25+10*sin(frameCount * 0.1));
  fill(0);
  //body
  fill(240);
  ellipse(((fly3XPos+fly3X)%500)+15, fly3Y+flyBounce, 5, 5);
  fill(90);
  ellipse((fly3XPos+fly3X)%500, fly3Y+flyBounce, 30, 20);
  fill(240);
  ellipse(((fly3XPos+fly3X)%500)+8, fly3Y+flyBounce, 5, 5);
  //wing
  fill(250, 250, 250, 180);
  ellipse(((fly3XPos+fly3X)%500)-7, fly3Y+flyBounce-17-5*sin(frameCount * 0.1), 13+3*sin(frameCount * 0.1), 25+10*sin(frameCount * 0.1));

  //set collision boxes
  if ((fly3XPos+fly3X)%500 >= 80-25 && (fly3XPos+fly3X)%500 <= 80+25 && fly3Y+flyBounce >= worm1Y+340-25 && fly3Y+flyBounce <= worm1Y+340+25)
  {
    if (!worm1Dead)//stop interactions with dead worms;
    {
      worm1Dead = true;
    }
  }
  if ((fly3XPos+fly3X)%500 >= 200-25 && (fly3XPos+fly3X)%500 <= 200+25 && fly3Y+flyBounce >= worm2Y+340-25 && fly3Y+flyBounce <= worm2Y+340+25)
  {
    if (!worm2Dead)//stop interactions with dead worms;
    {
      worm2Dead = true;
    }
  }
  if ((fly3XPos+fly3X)%500 >= 320-25 && (fly3XPos+fly3X)%500 <= 320+25 && fly3Y+flyBounce >= worm3Y+340-25 && fly3Y+flyBounce <= worm3Y+340+25)
  {
    if (!worm3Dead)//stop interactions with dead worms;
    {
      worm3Dead = true;
    }
  }
}
void fly4(float fly4X)
{
  flyBounce = 80*sin(frameCount *0.007);
  //set random y value, and delay xposition
  if ((fly4XPos+fly4X)%500 == 450%500)
  {
    yGenerator4 = random(60, 180);
    xGenerator4 = random(100, 2000);
  }
  fly4Y =  yGenerator4;
  stop4 = xGenerator4;
  stop4 --;//used on draw as a condition for xmovement
  ////draw fly//////////
  stroke(0);
  //wing
  fill(250, 250, 250, 180);
  ellipse(((fly4XPos+fly4X)%500), fly4Y+flyBounce-15-5*sin(frameCount * 0.1), 10+3*sin(frameCount * 0.1), 25+10*sin(frameCount * 0.1));
  fill(0);
  //body
  fill(240);
  ellipse(((fly4XPos+fly4X)%500)+15, fly4Y+flyBounce, 5, 5);
  fill(170);
  ellipse((fly4XPos+fly4X)%500, fly4Y+flyBounce, 30, 20);
  fill(240);
  ellipse(((fly4XPos+fly4X)%500)+8, fly4Y+flyBounce, 5, 5);
  //wing
  fill(250, 250, 250, 180);
  ellipse(((fly4XPos+fly4X)%500)-7, fly4Y+flyBounce-17-5*sin(frameCount * 0.1), 13+3*sin(frameCount * 0.1), 25+10*sin(frameCount * 0.1));

  //set collision boxes
  if ((fly4XPos+fly4X)%500 >= 80-25 && (fly4XPos+fly4X)%500 <= 80+25 && fly4Y+flyBounce >= worm1Y+340-25 && fly4Y+flyBounce <= worm1Y+340+25)
  {
    if (!worm1Dead)//stop interactions with dead worms;
    {
      worm1Dead = true;
    }
  }
  if ((fly4XPos+fly4X)%500 >= 200-25 && (fly4XPos+fly4X)%500 <= 200+25 && fly4Y+flyBounce >= worm2Y+340-25 && fly4Y+flyBounce <= worm2Y+340+25)
  {
    if (!worm2Dead)//stop interactions with dead worms;
    {
      worm2Dead = true;
    }
  }
  if ((fly4XPos+fly4X)%500 >= 320-25 && (fly4XPos+fly4X)%500 <= 320+25 && fly4Y+flyBounce >= worm3Y+340-25 && fly4Y+flyBounce <= worm3Y+340+25)
  {
    if (!worm3Dead)//stop interactions with dead worms;
    {
      worm3Dead = true;
    }
  }
}

void drawCheese()
{
  fill(250, 200, 50);
  rect(0, 0, 400, 160);
  //holes
  fill(0, 0, 0, 80);
  ellipse (47, 130, 40, 40);
  ellipse (40, 40, 60, 60);
  ellipse (110, 80, 50, 50);
  ellipse (300, 60, 90, 90);
  ellipse (180, 30, 70, 70);
  ellipse (370, 120, 54, 54);
  ellipse (380, 30, 30, 30);
  ellipse (210, 120, 55, 55);
}

void drawWorm(float xPos, float yPos, float chew)
{
  //worm body
  fill(174);
  ellipse(xPos-4*sin(frameCount * 0.05), yPos+710, 50, 50);
  fill(176);
  ellipse(xPos-4*sin(frameCount * 0.05), yPos+710, 50, 50);
  fill(178);
  ellipse(xPos-3*sin(frameCount * 0.05), yPos+700, 50, 50);
  fill(180);
  ellipse(xPos-2*sin(frameCount * 0.05), yPos+690, 50, 50);
  fill(182);
  ellipse(xPos, yPos+680, 50, 50);
  fill(184);
  ellipse(xPos+2*sin(frameCount * 0.05), yPos+670, 50, 50);
  fill(186);
  ellipse(xPos+3*sin(frameCount * 0.05), yPos+660, 50, 50);
  fill(188);
  ellipse(xPos+4*sin(frameCount * 0.05), yPos+650, 50, 50);
  fill(190);
  ellipse(xPos+3*sin(frameCount * 0.05), yPos+640, 50, 50);
  fill(192);
  ellipse(xPos+2*sin(frameCount * 0.05), yPos+630, 50, 50);
  fill(194);
  ellipse(xPos, yPos+620, 50, 50);
  fill(196);
  ellipse(xPos-2*sin(frameCount * 0.05), yPos+610, 50, 50);
  fill(198);
  ellipse(xPos-3*sin(frameCount * 0.05), yPos+600, 50, 50);
  fill(200);
  ellipse(xPos-4*sin(frameCount * 0.05), yPos+590, 50, 50);
  fill(202);
  ellipse(xPos-4*sin(frameCount * 0.05), yPos+580, 50, 50);
  fill(204);
  ellipse(xPos-3*sin(frameCount * 0.05), yPos+570, 50, 50);
  fill(206);
  ellipse(xPos-2*sin(frameCount * 0.05), yPos+560, 50, 50);
  fill(208);
  ellipse(xPos, yPos+550, 50, 50);
  fill(210);
  ellipse(xPos+2*sin(frameCount * 0.05), yPos+540, 50, 50);
  fill(212);
  ellipse(xPos+3*sin(frameCount * 0.05), yPos+530, 50, 50);
  fill(214);
  ellipse(xPos+4*sin(frameCount * 0.05), yPos+520, 50, 50);
  fill(216);
  ellipse(xPos+4*sin(frameCount * 0.05), yPos+510, 50, 50);
  fill(218);
  ellipse(xPos+3*sin(frameCount * 0.05), yPos+500, 50, 50);
  fill(220);
  ellipse(xPos+2*sin(frameCount * 0.05), yPos+490, 50, 50);
  fill(222);
  ellipse(xPos, yPos+480, 50, 50);
  fill(224);
  ellipse(xPos-2*sin(frameCount * 0.05), yPos+470, 50, 50);
  fill(226);
  ellipse(xPos-3*sin(frameCount * 0.05), yPos+460, 50, 50);
  fill(228);
  ellipse(xPos-4*sin(frameCount * 0.05), yPos+450, 50, 50);
  fill(230);
  ellipse(xPos-4*sin(frameCount * 0.05), yPos+440, 50, 50);
  fill(232);
  ellipse(xPos-3*sin(frameCount * 0.05), yPos+430, 50, 50);
  fill(234);
  ellipse(xPos-2*sin(frameCount * 0.05), yPos+420, 50, 50);
  fill(236);
  ellipse(xPos, yPos+410, 50, 50);
  fill(238);
  ellipse(xPos+2*sin(frameCount * 0.05), yPos+400, 50, 50);
  fill(240);
  ellipse(xPos+3*sin(frameCount * 0.05), yPos+390, 50, 50);
  fill(242);
  ellipse(xPos+4*sin(frameCount * 0.05), yPos+380, 50, 50);
  fill(244);
  ellipse(xPos+4*sin(frameCount * 0.05), yPos+370, 50, 50);
  fill(246);
  ellipse(xPos+3*sin(frameCount * 0.05), yPos+360, 50, 50);
  fill(248);
  ellipse(xPos+2*sin(frameCount * 0.05), yPos+350, 50, 50);
  fill(250);
  ellipse(xPos, yPos+340, 60, 60);
  //left eye
  line(xPos-25, yPos+330, xPos-20, yPos+325);
  line(xPos-15, yPos+330, xPos-20, yPos+325);
  //Right eye
  line(xPos+25, yPos+330, xPos+20, yPos+325);
  line(xPos+15, yPos+330, xPos+20, yPos+325);
  //mouth
  fill(0);
  ellipse(xPos, yPos+340, 30, 15+chew*sin(frameCount* 0.05));
}