Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/////////////////////////////////////////////////////////////////
//Author: Pamela Payad                                         //
//Ice Cream Scooper                                            // 
//1. Click on the ice cream flavour you want.                  //
//2. Click on the toppings you want.                           //
//3. Click on the cone that is faced down to restart your cone.// 
/////////////////////////////////////////////////////////////////

//set variables
int toppingsContainer=30;
int iceCreamBucket=30;
int iceCream=60;
int iceCreamBucket2 = 30;

float sprinklesR = random(200);
float sprinklesG = random(200);
float sprinklesB = random(200);

//set up the window
void setup() {
  size(400, 400);
  noStroke();
  fill(100);

  //run background drawing function
  drawBackground();
}

void draw() {

  //chocolate
  drawIceCreamCone();
  drawIceCream(118, 80, 4, 45);

  //vanilla
  drawIceCream(250, 244, 232, 165);

  //strawberry
  drawIceCream(255, 216, 216, 285);

  //draw the cone
  drawIceCreamCone();

  //draw the topping displays
  drawCherry(95, 60, 110, 60);
  drawCherry(115, 60, 130, 60);
  drawCherry(95, 80, 110, 80);
  drawCherry(115, 80, 130, 80);
  drawSprinkles();
  drawWafer();
  drawChocChips();

  //update functions
  chooseFlavour();
  chooseTopping();
  restartCone();
}

//draw the background with no updates
void drawBackground() {
  noStroke();

  //toppingsContainer counter//
  fill(220);
  rect(0, 0, 260, 240);
  fill(230);
  rect(10, 0, 260, 230);
  fill(190);
  rect(20, 20, 230, 200, 5);
  fill(203);
  rect(40, 130, 180, 80, 5);
  fill(234);
  rect(45, 130, 180, 80, 5);

  //make a loop for the background of each topping "container"
  for (toppingsContainer=30; toppingsContainer< 220; toppingsContainer=toppingsContainer+55) {
    fill(178);
    rect(toppingsContainer, 35, 40, 80, 5);
  }

  //ice cream counter//
  fill(200);
  rect(260, 0, 260, 400);
  fill(210);
  rect(270, 0, 270, 390);

  //make a loop for the background of each topping "bucket"
  for (iceCreamBucket=30; iceCreamBucket< 290; iceCreamBucket=iceCreamBucket+120) {
    fill(196);
    rect(285, iceCreamBucket, 100, 100, 5);
  }
  for (iceCreamBucket2=30; iceCreamBucket2< 290; iceCreamBucket2=iceCreamBucket2+120) {
    fill(196);
    rect(285, iceCreamBucket2, 100, 100, 5);
  }

  //table top//
  fill(100);
  rect(0, 240, 260, 180);
  fill(150);
  rect(10, 250, 240, 180, 5);
  fill(180);
  rect(15, 255, 235, 175, 5);

  //cones display
  fill(191, 161, 100);
  triangle(30, 400, 70, 400, 50, 340);
  fill(222, 187, 116);
  triangle(35, 400, 70, 400, 54, 350);
  
  noStroke();
  fill(0, 101, 162);
  rect(230, 370, 15, 60);
  ellipse(237, 370, 35, 35);
  fill(0, 74, 118);
  ellipse(235, 370, 20, 27);
}

// draw regular ice cream cone without ice cream
void drawIceCreamCone() {
  //ice cream cone//
  fill(191, 161, 100);
  triangle(60, 200, 140, 460, 200, 200);
  fill(222, 187, 116);
  triangle(70, 200, 150, 470, 200, 200);
}

//draw an ice cream scooper that follows that mouse 
void drawIceCreamScoop(int iceR, int iceG, int iceB) {
  noStroke();
  fill(iceR, iceG, iceB);
  ellipse(132, 170, 140, 140);
  for (iceCream=60; iceCream< 240; iceCream=iceCream+140) {
    fill(iceR, iceG, iceB);
    ellipse(iceCream, 180, 40, 40);
  }

  //ice cream cone//
  fill(191, 161, 100);
  triangle(60, 200, 140, 460, 200, 200);
  fill(222, 187, 116);
  triangle(70, 200, 150, 470, 200, 200);
}

//makes the squares for the ice cream
//parameters needed are the colour and y position
void drawIceCream(int flavourR, int flavourG, int flavourB, int iceY) {
  noStroke();
  fill(flavourR, flavourG, flavourB);
  rect(300, iceY, 75, 75, 5);
}

//draw the cherry display with the parameters of the positions of the cherries
void drawCherry(int cherryX, int cherryY, int stemX, int stemY) {
  stroke(85, 0, 21);
  fill(185, 0, 15);
  ellipse(cherryX, cherryY, 12, 12);
  noFill();
  arc(stemX, stemY, 30, 30, PI, PI+QUARTER_PI);
}

//draw the display for the wafer 
void drawWafer() {
  noStroke();
  fill(216, 195, 109);
  rect(145, 50, 12, 40);
  fill(216, 195, 109);
  rect(160, 35, 12, 40);
  fill(255, 226, 147);
  rect(147, 50, 10, 40);
  fill(255, 226, 147);
  rect(162, 35, 10, 40);
}

//draw the diplay of the chocolate chips
void drawChocChips() {
  stroke(96, 68, 0);
  fill(116, 83, 0);
  triangle(220, 65, 225, 60, 230, 65);
  triangle(210, 55, 215, 50, 220, 55);
  triangle(200, 45, 205, 40, 210, 45);
  triangle(220, 85, 225, 80, 230, 85);
  triangle(210, 75, 215, 70, 220, 75);
  triangle(200, 65, 205, 60, 210, 65);
  triangle(220, 105, 225, 100, 230, 105);
  triangle(210, 95, 215, 90, 220, 95);
  triangle(200, 85, 205, 80, 210, 85);
}

//draw the diplay of the chocolate sprinkles
void drawSprinkles() {
  stroke(sprinklesR, sprinklesG, sprinklesB);
  line(40, 50, 50, 53);
  stroke(sprinklesR+90, sprinklesG-8, sprinklesB);
  line(60, 63, 65, 70);
  stroke(sprinklesR+23, sprinklesG-55, sprinklesB);
  line(30, 70, 40, 60);
  stroke(sprinklesR+3, sprinklesG+55, sprinklesB+90);
  line(40, 100, 30, 90);
  stroke(sprinklesR+32, sprinklesG+57, sprinklesB-90);
  line(45, 80, 35, 90);
  stroke(sprinklesR+50, sprinklesG+5, sprinklesB-26);
  line(55, 90, 60, 80);
}

//draw topping functions for when they are chosen//
void sprinkles() {
  stroke(sprinklesR, sprinklesG, sprinklesB);
  line(100, 140, 110, 130);
  stroke(sprinklesR+100, sprinklesG-90, sprinklesB);
  line(120, 110, 130, 120);
  stroke(sprinklesR-100, sprinklesG-90, sprinklesB);
  line(150, 150, 160, 140);
  stroke(sprinklesR+10, sprinklesG-90, sprinklesB);
  line(140, 130, 150, 125);
  stroke(sprinklesR+130, sprinklesG+90, sprinklesB);
  line(110, 150, 120, 145);
}

void chocChips() {
  stroke(96, 68, 0);
  fill(116, 83, 0);
  triangle(115, 120, 120, 110, 130, 120);
  triangle(90, 140, 100, 130, 110, 140);
  triangle(160, 130, 170, 120, 175, 130);
  triangle(140, 140, 150, 130, 160, 140);
  triangle(135, 110, 140, 100, 145, 110);
}

void cherry() {
  noStroke();
  fill(124, 1, 11);
  ellipse(130, 100, 30, 30);
  fill(185, 0, 15);
  ellipse(130, 100, 27, 27);
  stroke(85, 0, 21);
  noFill();
  arc(160, 90, 60, 60, PI, PI+QUARTER_PI);
}

void wafer() {
  noStroke();
  fill(216, 195, 109);
  quad(165, 75, 190, 100, 160, 150, 135, 135);
  fill(255, 226, 147);
  quad(170, 80, 190, 100, 160, 150, 140, 140);
}

//choose the topping here
void chooseTopping() {
  noStroke();
  if (mousePressed) {
    if (mouseX  > 80 && mouseX < 130 && mouseY > 40 && mouseY < 120) {
      cherry();
    } else if (mouseX  > 130 && mouseX < 170 && mouseY > 40 && mouseY < 120) {
      wafer();
    } else if (mouseX  > 30 && mouseX < 170 && mouseY > 40 && mouseY < 120) {
      sprinkles();
    } else if (mouseX  > 180 && mouseX < 230 && mouseY > 40 && mouseY < 120) {
      chocChips();
    }
  }
}

//detects when the chosen flavour is clicked 
void chooseFlavour() {
  noStroke();
  if (mousePressed) {
    //detect when the mouse is over the ice cream and run the ice cream function and colours in the parameters specified in the parameters
    if (mouseX> 300 && mouseX < 380 && mouseY > 40 && mouseY < 120) {
      drawIceCreamScoop(118, 80, 4);
    } else if (mouseX> 300 && mouseX < 380 && mouseY > 140 && mouseY < 240) {
      drawIceCreamScoop(250, 244, 232);
    } else if (mouseX> 300 && mouseX < 380 && mouseY > 270 && mouseY <360) {
      drawIceCreamScoop(255, 216, 216);
    }
  }
} 

//when user clicks on the cone, the background properties are redrawn
void restartCone() {
  if (mousePressed) {
    //detect when the mouse is over the ice cream and run the ice cream function and colours in the parameters specified in the parameters
    if (mouseX> 40 && mouseX < 80 && mouseY > 340 && mouseY < 400) {
      drawBackground();
      //run background drawing function
      drawBackground();

      //chocolate
      drawIceCreamCone();
      drawIceCream(118, 80, 4, 45);

      //vanilla
      drawIceCream(250, 244, 232, 165);

      //strawberry
      drawIceCream(255, 216, 216, 285);

      //draw the cone
      drawIceCreamCone();

      //draw the topping displays
      drawCherry(95, 60, 110, 60);
      drawCherry(115, 60, 130, 60);
      drawCherry(95, 80, 110, 80);
      drawCherry(115, 80, 130, 80);
      drawSprinkles();
      drawWafer();
      drawChocChips();
    }
  }
}