Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/**
 * Cutting cake 
 * by Daniel Smith
 * 
 * A knife moves up and down the y-axis (controlled by mouseY).
 * When the user clicks, a slice of cake is 'drawn' onto the plate.
 * The program terminates there..
 */

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

void draw(){
  /*Background*/
  
  //The wall
  fill(255, 222, 159);
  stroke(0);
  rect(0, 0, 400, 270);
  
  //Lamp and Light
  fill(245, 253, 25, 31);
  noStroke();
  quad(150, 40, 250, 40, 400, 270, 0, 270); //Light
  fill(255);
  noStroke();
  ellipse(200, 40, 33, 33); //bulb
  fill(255, 245, 205);
  stroke(255, 226, 149);
  arc(200, 40, 100, 100, 3.14, 6.28); // Lamp Shade                       (ellipse, start (radians), end(radians))
  
  //The table / surface
  fill(131, 165, 175);
  stroke(0);
  rect(0, 270, 400, 130);
  
  //The plate
  fill(227);
  rect(270, 370, 80, 5);
  fill(255);
  quad(240, 350, 380, 350, 360, 370, 260, 370);
  fill(218);
  ellipseMode(CORNER); //Remember: ellipse's default mode is CENTER, unlike rect..
  ellipse(240, 340, 140, 20);
  
  ellipseMode(CENTER); //Since I rather use CENTER for the remainder of the program)
  
  /*I divide the cake and knife into several layers*/
  
  //Layer 0 (Icing):
  fill(161, 255, 252); //Light blue
  stroke(111, 223, 255); //Slightly darker light blue
  triangle(130, 210, 20, 260, 240, 260);
  
  //Layer 1 (Sprinkles):
  noStroke();
  fill(255, 173, 239); //Pink
  ellipse(130, 220, 10, 5);
  ellipse(90, 240, 10, 5);
  ellipse(50, 260, 10, 5);
  ellipse(130, 240, 10, 5);
  ellipse(90, 260, 10, 5);
  ellipse(170, 240, 10, 5);
  ellipse(130, 260, 10, 5);
  ellipse(170, 260, 10, 5);
  ellipse(210, 260, 10, 5);
  
  fill(244, 255, 173); //Yellow
  ellipse(110, 230, 10, 5);
  ellipse(70, 250, 10, 5);
  ellipse(150, 230, 10, 5);
  ellipse(110, 250, 10, 5);
  ellipse(150, 250, 10, 5);
  ellipse(190, 250, 10, 5);
  
  //Layer 2 (Knife):
  //Blade
  stroke(153);
  fill(173);
  triangle(130, mouseY-90, 155, mouseY-70, 260, mouseY-110);
  fill(195);
  quad(155, mouseY-70, 230, mouseY-70, 265, mouseY-101, 265, mouseY-111); //Something's messed up about the coordinates here, and on my graph...
  //Handle
  fill(67); //almost black
  rect(265, mouseY-111, 60, 10);
  rect(305, mouseY-111, 20, 20);
  fill(255, 25, 41); //red basically
  rect(275, mouseY-111, 10, 5);
  fill(173);
  rect(285, mouseY-111, 10, 5);
  
  //Layer 3 (Cake[Base]):
  fill(255, 243, 195); //I like vanilla cake
  stroke(255, 226, 149);
  
  quad(20, 260, 20, 320, 130, 380, 130, 320);
  quad(240, 260, 240, 320, 130, 380, 130, 320);
  
  //Layer 4 (Icing[Sides]):
  fill(161, 255, 252); //Light blue
  stroke(111, 223, 255); //Slightly darker light blue
  
  ellipse(30, 280, 20, 40);
  ellipse(50, 290, 20, 40);
  ellipse(70, 300, 20, 40);
  ellipse(90, 310, 20, 40);
  ellipse(110, 320, 20, 40);
  ellipse(130, 330, 20, 40);
  ellipse(150, 320, 20, 40);
  ellipse(170, 310, 20, 40);
  ellipse(190, 300, 20, 40);
  ellipse(210, 290, 20, 40);
  ellipse(230, 280, 20, 40);
  
  //Layer 5 (Icing[Top]):
  noStroke();
  rect(20, 260, 221, 15);
  triangle(20, 275, 130, 330, 240, 270);
  
  //Layer 6 (More Sprinkles on Top):
  fill(255, 173, 239); //Pink
  ellipse(90, 280, 10, 5);
  ellipse(130, 280, 10, 5);
  ellipse(170, 280, 10, 5);
  ellipse(130, 300, 10, 5);
  
  fill(244, 255, 173); //Yellow
  ellipse(70, 270, 10, 5);
  ellipse(110, 270, 10, 5);
  ellipse(110, 290, 10, 5);
  ellipse(150, 270, 10, 5);
  ellipse(150, 290, 10, 5);
  ellipse(190, 270, 10, 5);
  
}

void mousePressed(){
  /*When the mouse is clicked, a piece of cake appears on the cake*/
  
  frameRate(2); //The program will appear to stop once you've 'cut' the cake.
  
  fill(255, 243, 195); //I like vanilla cake
  stroke(255, 226, 149);
  rect(260, 310, 100, 40);
  
  fill(255);
  rect(260, 327, 100, 5);
  
  //Icing
  fill(161, 255, 252);
  noStroke();
  //stroke(111, 223, 255);
  rect(260, 310, 100, 5);
  rect(357, 310, 5, 40);
  
  triangle(260, 310, 330, 280, 362, 310);
  
  //Sprinkles
  fill(255, 173, 239);
  ellipse(320, 290, 10, 5);
  ellipse(340, 300, 10, 5);
  
  fill(244, 255, 173);
  ellipse(300, 300, 10, 5); 
}
//Build Successful