Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
Growing Old - by Suraj Sirohi
Moving the mouse on Y-axis moves the character's head up and down. Moving the mouse on X-axis 'ages'
the character, making him older as the mose moves from left to right, the idea of aging is also being
represented by the number of candles on the cake and fading of colors here.
Pressing mouse button present a dialogue by the character.
*/

void setup(){
  
  //Set the size of the canvas, 400x400 as instructed.
  size(400,400);
  
}

void draw(){
  //Fading the background color as the character grows old.
  background(115,209 - mouseX * 0.1,224 - mouseX * 0.1);
  
  noStroke();
  
  
  //Lower body - Fade the color of the shirt and make the body grow wider as the character grows old.
  fill(250 - mouseX * 0.1,104,96);
  ellipse(200,350 - mouseX * 0.02,200 + mouseX * 0.05,250);
 
  
  //Table - Fade the color of the table as mouse moves to the right.
  fill(188 - mouseX * 0.1 ,140,91);
  rectMode(CENTER);
  rect(200,408,400,100);
  
  
  //Hair====================
  
  //Hair Back - slightly move the hair ball at the back of the head at the back up and down 
  //            following the mouse on Y-axis.
  //          - Fade the color of hair and pull the hair line back as the character grows old.
  fill(121 + mouseX * 0.25,66 + mouseX * 0.25,29+ mouseX * 0.25);
  ellipse(200 + mouseX * 0.02,120 + mouseY * 0.01,150,100);
  
  //Hair small - Slightly move the hair ball according to  the mouse's movements.
  ellipse(160 + mouseX * 0.005,140 + mouseY * 0.01,100,100);
  
  
  
  //Ears=====================
  // -Change the color of the ear as the character grows old
  fill(234 + mouseX * 0.05,192 + mouseX * 0.05,156 - mouseX*0.1);
  
  //- move the ear to the left when mouse goes to the right,
  //and move the ear to right when the mouse goes to the left,
  //to reveal more of the ear.
  
  //Ear Left 
  ellipse(120 - mouseX * 0.01,200 + mouseY * 0.02,45 - mouseX * 0.04,40 - mouseY * 0.02);
  
   //Ear Right 
  ellipse(285 - mouseX * 0.02,200 + mouseY * 0.02,45 - mouseX * 0.04,40 - mouseY * 0.02);
  
  
  //HeadDark
  fill(245,219, 163);
  ellipse(200,200,180 - mouseX * 0.07,200 - mouseY * 0.02);
  
  
  //Wide Beard
  fill(121 + mouseX * 0.25,66 + mouseX * 0.25,29+ mouseX * 0.25, - 80 + mouseX * 0.5);
  ellipse(200,200,180 - mouseX * 0.07,200 - mouseY * 0.02);
  

 //Head Light
  fill(245,219, 163);
  ellipse(200,190 - mouseY * 0.01,161 - mouseX * 0.07,178 - mouseY * 0.02);
  
  //Circular Beard
  fill(121 + mouseX * 0.25,66 + mouseX * 0.25,29+ mouseX * 0.25, - 80 + mouseX * 0.5);
  ellipse(200 + mouseX * 0.02,260 + mouseY * 0.01,90,60);
  
  //Hair Front
  fill(121+ mouseX * 0.25,66+ mouseX * 0.25,29+ mouseX * 0.25);
  ellipse(200 + mouseX * 0.02,120 + mouseY * 0.01 - mouseX * 0.04,110 - mouseX * 0.1,80 - mouseX * 0.1);
  
  
 
  //Eyebrows=================
  //Fades as the character grows old.
  noFill();
  stroke(72+ mouseX * 0.3,37 + mouseX * 0.3,14 + mouseX * 0.3);
  strokeWeight(11 + mouseY * 0.005 - mouseX * 0.01);
 
  //Left eyebrows
  arc(162 + mouseX * 0.03,162 + mouseY * 0.05,50,50, PI + 0.5 , 2*PI - 1 + mouseX * 0.001);
  
  //Right eyebrows
  arc(234 + mouseX * 0.03,162 + mouseY * 0.05,50,50, PI + 0.5 + 0.5 - mouseX * 0.001, 2*PI - 0.5);
  
  
  
  //Mouth - gets wider as the character grows old.
  stroke(211,132,79);
  strokeWeight(4);
  arc(200 + mouseX * 0.03,230 + mouseY * 0.03 + mouseX * 0.03, 40 + mouseX * 0.1,20, 2*PI + 0.5, 3 * PI - 0.5);
 
 
 //Eyes follow the mouse
 //Eyes======================
  fill(255);
  noStroke();
  //Left Eye
  ellipse(160 + mouseX * 0.04, 180 + mouseY * 0.05,30 - mouseX * 0.01,40 - mouseY * 0.02 - mouseX * 0.07);
  
  //Right Eye
  ellipse(235 + mouseX * 0.04, 180 + mouseY * 0.05,30 - mouseX * 0.01,40 - mouseY * 0.02 - mouseX * 0.07);
  
  //Pupils
  fill(0);
  
  //Pupil Left
  ellipse(155 + mouseX * 0.06,180 + mouseY * 0.05,15 - mouseX * 0.01,15 - mouseX * 0.02);
  
  //Pupil Right
  ellipse(230 + mouseX * 0.06,180 + mouseY * 0.05,15 - mouseX * 0.01,15 - mouseX * 0.02);
  
  //Reflection - fades away as the character grows old.
  fill(255);
  
  //Left Reflection 
  ellipse(152 + mouseX * 0.06,175 + mouseY * 0.06,7 - mouseX * 0.02,7 -mouseX * 0.02);
  
  //Right Reflection 
  ellipse(228 + mouseX * 0.06,175 + mouseY * 0.06,7 - mouseX * 0.02,7 - mouseX * 0.02);
  
  //Nose======================
  fill(245,170,141);
  ellipse(200 + mouseX * 0.04,200 + mouseY * 0.04, 25,30 - mouseY * 0.02);
  
  //Nose Shadow 
  fill(219, 137, 104, 180);
  ellipse(200 + mouseX * 0.04,209 + mouseY * 0.04, 15,10 - mouseY * 0.02);
  
  //Cheeks are just slightly pink ellipses with low opacity which decreases further as the mouse mvoes to the left.
  //Cheeks====================
  fill(240,169,143, 100 + mouseY * 0.1 - mouseX * 0.25);
  
  //Left Cheek
  ellipse(150 + mouseX * 0.02,220 + mouseY * 0.04,35,35 - mouseY * 0.02);
  
  //Right Cheek
  ellipse(245 + mouseX * 0.02,220 + mouseY * 0.04,35,35 - mouseY * 0.02);
  
  //wrinkles -  wrinkles appear as the character grows old, by increasing the opacity.
  stroke(0,0,0, -14 + mouseX * 0.11);
  strokeWeight(2);
  noFill();
  
  //Right Eye Wrinkle
  arc(235 + mouseX * 0.04,190 + mouseY * 0.04,30,25, PI + 16, 2*PI + 16);
  
   //Left Eye Wrinkle
  arc(160 + mouseX * 0.04,190 + mouseY * 0.04,30,25, PI + 15.5, 2*PI + 15.5);
  
  
 
//Cake========================
rectMode(CORNER);
noStroke();

fill(206,139,203);

rect(128,342 ,145,30);
ellipse(200,375 ,160,40);

fill(229,188,227);
ellipse(200,340,160,45);


//Candle and Flames's opacity is driven by mouseX position, so as the mouse moves to the right, more candles appear on
//the cake

//Candles====================
fill(247,137,52);
rect(135,310, 8,30);

fill(247,137,52, mouseX);
rect(155,310,8,30);

fill(247,137,52, -50 + mouseX * 1);
rect(175,310, 8,30);

fill(247,137,52, -100 + mouseX * 1);
rect(195,310, 8,30);

fill(247,137,52, -150 + mouseX * 1);
rect(215,310, 8,30);

fill(247,137,52, -200 + mouseX * 1);
rect(235,310, 8,30);

fill(247,137,52, -240 + mouseX * 1);
rect(255,310, 8,30);



//Flames consist of two ellipses - outer(lighter) flame and inner (stronger) flame, their height changes with time.
//Flames===================
fill(255,200,0,120);
ellipse(139,292,14,30 + 4*sin(frameCount * 0.2));
fill(255,200,0);
ellipse(139,298,10,20 + 4*sin(frameCount * 0.2));

fill(255,200,0, -200 + mouseX);
ellipse(159,292,14,30 + 4*sin(frameCount * 0.2));
fill(255,200,0, mouseX);
ellipse(159,298,10,20 + 4*sin(frameCount * 0.2));

fill(255,200,0, -240  + mouseX);
ellipse(179,292,14,30 + 4*sin(frameCount * 0.2));
fill(255,200,0, -50 + mouseX);
ellipse(179,298,10,20 + 4*sin(frameCount * 0.2));

fill(255,200,0, -260  + mouseX);
ellipse(199,292,14,30 + 4*sin(frameCount * 0.2));
fill(255,200,0, -100 + mouseX);
ellipse(199,298,10,20 + 4*sin(frameCount * 0.2));

fill(255,200,0, -280  + mouseX);
ellipse(219,292,14,30 + 4*sin(frameCount * 0.2));
fill(255,200,0, -150 + mouseX);
ellipse(219,298,10,20 + 4*sin(frameCount * 0.2));

fill(255,200,0, -300  + mouseX);
ellipse(239,292,14,30 + 4*sin(frameCount * 0.2));
fill(255,200,0, -200 + mouseX);
ellipse(239,298,10,20 + 4*sin(frameCount * 0.2));

fill(255,200,0,-320  + mouseX);
ellipse(259,292,14,30 + 4*sin(frameCount * 0.2));
fill(255,200,0, -240 + mouseX);
ellipse(259,298,10,20 + 4*sin(frameCount * 0.2));

}

//Print a dialogue when mouse button is pressed
void mousePressed(){
 println("");
 println("I am " +(mouseX/5 + 3) + " years old and I love watching cartoons.");
}