Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/* Author: Riley Jckson
   Date: Sept. 14, 2018
   Discription: This is an interactive drawing. This drawing consists of a rabbit in the snow
                that is following the light that is being held by the mouse with it's eyes. When 
                the mouse is clicked the scene turns to a storm and the rabbit is laying down 
                with it's eyes closed. Another part of the interactivity is when a key is pressed 
                the scene turns to day and the snow appears to be melting, while th rabbit looks 
                a lot happier.
*/


//sets the window up and only runs once
void setup() {

  //set the size of the window
  size(400, 400);
  //set the colour of the background white
  background(255);
}

//draws the shapes, and is always repeating as if to create the frames of the animation
void draw() {

  //sets the frame rate 60 per second
  frameRate(60);

  //set it so no stokes/lines appear on the outside of the shape
  noStroke();

  //Fill the background with lighter blue
  fill(1, 36, 73);
  //set the location and size of the rectangle
  rect(0, 0, 400, 400);

  //fill the background with the darker blue
  fill(0, 14, 58, mouseY / 2);
  rect(0, 0, 400, 400);

  //change the input mode of the ellipse to center, so the corrdinates used will be the center of the ellipse
  ellipseMode(CENTER);

  /*MOON*/
  fill(255, 255, 255, 75);
  ellipse(350, 50 + mouseY / 70, 100, 100);

  fill(242, 242, 242);
  ellipse(350, 50 + mouseY / 70, 80, 80);

  /*BACKGROUND GROUND SNOW*/
  fill(229, 241, 255);
  ellipse(200, 340, 400, 160);

  /*BACKGROUND FALLING SNOW*/
  ellipseMode(CORNER);

  //creates an ellipse for wach piece of snow on screen
  ellipse(0, 40 + mouseY / 15, 5, 5);
  ellipse(40, 0 + mouseY / 15, 5, 5);
  ellipse(50, 120 + mouseY / 15, 5, 5);
  ellipse(180, 20 + mouseY / 15, 5, 5);
  ellipse(380, 0 + mouseY / 15, 5, 5);
  ellipse(110, 100 + mouseY / 15, 5, 5);
  ellipse(330, 100 + mouseY / 15, 5, 5);
  ellipse(320, 40 + mouseY / 15, 5, 5);
  ellipse(170, 140 + mouseY / 15, 5, 5);
  ellipse(260, 150 + mouseY / 15, 5, 5);
  ellipse(340, 140 + mouseY / 15, 5, 5);
  ellipse(130, 160 + mouseY / 15, 5, 5);
  ellipse(40, 200 + mouseY / 15, 5, 5);
  ellipse(280, 200 + mouseY / 15, 5, 5);
  ellipse(360, 190 + mouseY / 15, 5, 5);
  ellipse(0, 220 + mouseY / 15, 5, 5);
  ellipse(90, 220 + mouseY / 15, 5, 5);
  ellipse(180, 200 + mouseY / 15, 5, 5);
  ellipse(240, 260 + mouseY / 15, 5, 5);
  ellipse(350, 280 + mouseY / 15, 5, 5);
  ellipse(250, 60 + mouseY / 15, 5, 5);
  ellipse(240, -10 + mouseY / 15, 5, 5);
  ellipse(130, -10 + mouseY / 15, 5, 5);


  ellipseMode(CENTER);

  /*FOREGROUND GROUND SNOW*/
  
  //sets the colour to white
  fill(255);
  //creates a rectangle on screen
  rect(0, 340, 400, 70);
  //creates an ellipse on screen
  ellipse(30, 330, 160, 100);
  ellipse(370, 330, 160, 100);

  /*RABBIT'S BODY AND EARS*/
  
  //colour of the rabbit
  fill(255, 246, 229);
  //body of the rabbit
  ellipse(200, 280, 160, 160);
  //head of the rabbit
  ellipse(200, 180, 100, 100);
  //ears of the rabbit
  arc(175, 150, 20, 120, -PI, 0);
  arc(225, 150, 20, 120, -PI, 0);

  /*RABBIT'S EYES AND NOSE*/
  
  //sets the colour of the shapes to black
  fill(0);
  //rabbit's eyes and how they move with the mouse
  ellipse(175 + pmouseX / 50, 170 + pmouseY / 50, 20, 20);
  ellipse(215 + pmouseX / 50, 170 + pmouseY / 50, 20, 20);
  //rabbit's nose
  triangle(190, 190, 200, 200, 210, 190);

  /*BLUSH*/
  
  //set the colour to a light pink
  fill(255, 226, 224);
  //creates the shapes for the blush
  ellipse(170, 190, 20, 10);
  ellipse(230, 190, 20, 10);

  /*RABBIT'S EYES HIGHLIGHT*/
  
  //sets the colour to white
  fill(255);
  //creates the circles inside the previous eyes and lets them move with them.
  ellipse(170 + pmouseX / 50, 165 + pmouseY / 50, 5, 5);
  ellipse(210 + pmouseX / 50, 165 + pmouseY / 50, 5, 5);

  ellipseMode(CORNER);

  /*FOREGROUND FALLING SNOW*/
  
  //sets the colour to white
  fill(255);
  //creates the circles of falling snow
  ellipse(40, 40 + mouseY / 7, 10, 10);
  ellipse(110, 0+ mouseY / 7, 10, 10);
  ellipse(270, 0+ mouseY / 7, 10, 10);
  ellipse(200, 50+ mouseY / 7, 10, 10);
  ellipse(370, 30+ mouseY / 7, 10, 10);
  ellipse(310, 120+ mouseY / 7, 10, 10);
  ellipse(70, 160+ mouseY / 7, 10, 10);
  ellipse(350, 220+ mouseY / 7, 10, 10);
  ellipse(160, 240+ mouseY / 7, 10, 10);
  ellipse(40, 270+ mouseY / 7, 10, 10);
  ellipse(220, 200+ mouseY / 7, 10, 10);
  ellipse(200, 290+ mouseY / 7, 10, 10);
  ellipse(250, 260+ mouseY / 7, 10, 10);
  ellipse(220, -30+ mouseY / 7, 10, 10);

  ellipseMode(CENTER);
  
  /*YELLOW FIREFLY LIGHT THAT FOLLOWS MOUSE*/
  
  
  //sets the colour to yellow and lowers opacity to 75%
  fill(255, 255, 0, 75);
  //creates the glow of the small ellipse that follow the mouse
  ellipse(mouseX, mouseY, 25, 25);
  ellipse(mouseX + 20, mouseY, 10, 10);
  ellipse(mouseX, mouseY + 20, 10, 10);
  ellipse(mouseX, mouseY- 20, 10, 10);
  ellipse(mouseX - 20, mouseY, 10, 10);

  //sets the colour to a more orange yellow
  fill(255, 233, 0);
  //creates the saller ellipse that follow the mouse
  ellipse(mouseX, mouseY, 15, 15);
  ellipse(mouseX + 20, mouseY, 5, 5);
  ellipse(mouseX, mouseY + 20, 5, 5);
  ellipse(mouseX, mouseY- 20, 5, 5);
  ellipse(mouseX - 20, mouseY, 5, 5);
}

//this is activated when one of the mouse buttons gets pressed
void mousePressed() {

  //lowers the frame rate to 1, so the image is seen for a full second rather then a flash 
  frameRate(1);

  //colour of background (sky)
  fill(0, 10, 40);
  rect(0, 0, 400, 400);

  ellipseMode(CENTER);

  /*BACKGROUND GROUND SNOW*/
  fill(229, 241, 255);
  ellipse(200, 340, 400, 160);

  /*MOON*/
  fill(242, 242, 242);
  ellipse(380, 100, 80, 80);
  
  fill(255, 255, 255, 75);
  ellipse(380, 100, 100, 100);

  /*BACKGROUND FALLING SNOW*/
  
  ellipseMode(CORNER);

  ellipse(0, 40, 5, 5);
  ellipse(40, 0, 5, 5);
  ellipse(50, 120, 5, 5);
  ellipse(180, 20, 5, 5);
  ellipse(380, 0, 5, 5);
  ellipse(110, 100, 5, 5);
  ellipse(330, 100, 5, 5);
  ellipse(320, 40, 5, 5);
  ellipse(170, 140, 5, 5);
  ellipse(260, 150, 5, 5);
  ellipse(340, 140, 5, 5);
  ellipse(130, 160, 5, 5);
  ellipse(40, 200, 5, 5);
  ellipse(280, 200, 5, 5);
  ellipse(360, 190, 5, 5);
  ellipse(0, 220, 5, 5);
  ellipse(90, 220, 5, 5);
  ellipse(180, 200, 5, 5);
  ellipse(240, 260, 5, 5);
  ellipse(350, 280, 5, 5);
  ellipse(250, 60, 5, 5);
  ellipse(240, -5, 5, 5);
  ellipse(20, 20, 5, 5);
  ellipse(14, 118, 5, 5);
  ellipse(80, 60, 5, 5);
  ellipse(300, 300, 5, 5);
  ellipse(200, 180, 5, 5);
  ellipse(220, 100, 5, 5);
  ellipse(95, 140, 5, 5);
  ellipse(335, 15, 5, 5);
  ellipse(95, 310, 5, 5);
  ellipse(140, 140, 5, 5);
  ellipse(130, 75, 5, 5);
  ellipse(311, 68, 5, 5);
  ellipse(307, 265, 5, 5);
  ellipse(383, 116, 5, 5);
  ellipse(135, 225, 5, 5);

  ellipseMode(CENTER);

  /*FOREGROUND GROUND SNOW*/
  fill(255, 255, 255);
  rect(0, 340, 400, 70);
  ellipse(30, 330, 160, 100);
  ellipse(370, 330, 160, 100);

  /*RABBIT'S BODY*/
  fill(255, 246, 229);
  ellipse(200, 280, 160, 160);

  /*FOREGROUND EXTRA SNOW*/
  fill(255);
  stroke(240);
  ellipse(120, 330, 100, 50);
  ellipse(280, 330, 100, 50);

  /*RABBIT'S HEAD AND EARS*/
  fill(255, 246, 229);
  stroke(232, 216, 187);
  ellipse(200, 320, 100, 100);
  arc(175, 290, 20, 120, -PI, 0);
  arc(225, 290, 20, 120, -PI, 0);

  noStroke();

  /*RABBIT'S EYES AND NOSE*/
  fill(0);
  ellipse(180, 335, 20, 5);
  ellipse(220, 335, 20, 5);
  triangle(190, 345, 200, 355, 210, 345);

  /*BLUSH*/
  fill(255, 226, 224);
  ellipse(170, 345, 20, 10);
  ellipse(230, 345, 20, 10);

  ellipseMode(CORNER);

  /*FOREGROUND FALLING SNOW*/
  fill(255);
  ellipse(40, 40, 10, 10);
  ellipse(110, 0, 10, 10);
  ellipse(270, 0, 10, 10);
  ellipse(200, 50, 10, 10);
  ellipse(370, 30, 10, 10);
  ellipse(310, 120, 10, 10);
  ellipse(70, 160, 10, 10);
  ellipse(350, 220, 10, 10);
  ellipse(160, 240, 10, 10);
  ellipse(40, 270, 10, 10);
  ellipse(220, 200, 10, 10);
  ellipse(200, 290, 10, 10);
  ellipse(250, 260, 10, 10);
  ellipse(210, 165, 10, 10);
  ellipse(133, 195, 10, 10);
  ellipse(300, 200, 10, 10);
  
  //this will print a line of text the the console
  println("So Cold!");
}

void keyPressed() {

  //lowers the frame rate to 1, so the image is seen for a full second rather then a flash 
  frameRate(1);

  /*FOREGROUND GROUND SNOW*/
  fill(255);
  rect(0, 340, 400, 70);

  ellipseMode(CENTER);

  /*GRASS*/
  fill(9, 135, 13);
  ellipse(200, 340, 400, 70);

  /*SKY*/
  fill(137, 182, 255);
  rect(0, 0, 400, 340);

  /*CLOUDS*/
  
  //sets the colour to white
  fill(255);
  //creates the ellipse
  ellipse(40, 40, 250, 40);
  ellipse(100, 70, 300, 40);
  ellipse(400, 140, 250, 20);
  ellipse(140, 200, 300, 15);

  /*RABBIT'S BODY AND EARS*/
  
  //sets the colour to a beige
  fill(255, 246, 229);
  //creates an ellipse
  ellipse(200, 280, 160, 160);
  ellipse(200, 180, 100, 100);
  //creates an arc for the ears
  arc(175, 150, 20, 120, -PI, 0);
  arc(225, 150, 20, 120, -PI, 0);

  /*RABBIT'S EYES AND NOSE*/
  
  //sets the colour to black
  fill(0);
  //creates the ellipse for the eyes
  ellipse(180, 175, 20, 20);
  ellipse(220, 175, 20, 20);
  //creates the triangle for the nose
  triangle(190, 190, 200, 200, 210, 190);

  /*RABBIT'S EYE SQUINT*/
  
  //sets the colour to the same colour as the rabbit's body and head
  fill(255, 246, 229);
  //creates the ellipse
  ellipse(180, 190, 20, 20);
  ellipse(220, 190, 20, 20);

  /*BLUSH*/
  
  //sets the colour to light pink
  fill(255, 226, 224);
  //creates the ellipse fot the blush
  ellipse(170, 190, 20, 10);
  ellipse(230, 190, 20, 10);

  /*RABBIT'S EYES HIGHLIGHT*/
  
  //sets colour to white
  fill(255);
  //creates the ellipse for the highlight
  ellipse(175, 170, 5, 5);
  ellipse(215, 170, 5, 5);
  
  //this will print a line of text to the console
  println("The snow is melting!");
}