Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/******************************************************
 Title: CREEPER 
 Date: 16/9/15
 By: Filink Cao
 ******************************************************/

//set up the size and print an instruction line 
void setup()
{
  size (400, 400);
  println ("CREEPER IS FOLLOWING YOU!");
  println ("CLICK MOUSE AND IT WILL EXPLODE");
}

void draw ()
{
  //set the framerate to 30 for draw void
  frameRate (30);

  //set the back ground color
  background (30);

  //draw a window which changes brightness based on your mouse position
  colorMode (HSB);
  fill(61, 21, (abs(mouseX-mouseY)*255/400+40));
  rect (165, 50, 70, 40);
 
  //draw the floor which changes brightness based on the brightness of the window
  fill (0, 0, (abs(mouseX-mouseY)*255/400)+50);
  noStroke();
  rect (0, 200, 600, 600);
  
  //reset the color mode
  colorMode (RGB);

  //the CREEPER
  rectMode (CENTER);
  fill (30);
  //the shadow of CREEPER, changes angles based on the creeper's position
  quad((mouseX-25)+0.06*abs(200-mouseX)-14, 234, (mouseX-25)+0.06*abs(200-mouseX)+14, 234, 200-1.1*(200-((mouseX-25)+0.06*abs(200-mouseX)+14)), 248, 200-1.1*(200-((mouseX-25)+0.06*abs(200-mouseX)-14)), 248);
  quad((mouseX+25)-0.06*abs(200-mouseX)-14, 234, (mouseX+25)-0.06*abs(200-mouseX)+14, 234, 200-1.1*(200-((mouseX+25)-0.06*abs(200-mouseX)+14)), 248, 200-1.1*(200-((mouseX+25)-0.06*abs(200-mouseX)-14)), 248);
  quad(200-1.1*(200-((mouseX-25)+0.06*abs(200-mouseX)+14))-7, 248, 200-1.1*(200-((mouseX+25)-0.06*abs(200-mouseX)+14))-24, 248, (mouseX+14)-0.8*(200-(mouseX+14)), 348, (mouseX-14)-0.8*(200-(mouseX-14)), 348);
  //the brightside of CREEPER, moves based on the position of creeper
  colorMode (HSB);
  fill (61, 21, 91+(abs(mouseX-mouseY)*255/400));
  rect (mouseX+0.06*(200-mouseX), 120, 40, 40);
  rect (mouseX+0.06*(200-mouseX), 160, 25, 100);
  rect (((mouseX-25)+0.06*(abs(200-mouseX)))+0.06*(200-mouseX), 220, 28, 28);
  rect (((mouseX+25)-0.06*(abs(200-mouseX)))+0.06*(200-mouseX), 220, 28, 28);

  //the body of CREEPER
  colorMode(RGB);
  fill (10, 50, 0);
  rect (mouseX, 120, 40, 40);
  rect (mouseX, 160, 25, 100);
  //the feet of creeper, the distance between the two feet of creeper decreases when you look at it from the side. 
  rect (((mouseX-25)+0.06*(abs(200-mouseX))), 220, 28, 28);
  rect (((mouseX+25)-0.06*(abs(200-mouseX))), 220, 28, 28);

  //the face of CREEPER, the distance between the eyes and the mouth decreases when it looks up or down.
  fill (0);
  rect ((mouseX-9)+0.015*(abs(200-mouseX)), 115-0.05*(200-mouseY), 8, 8);
  rect ((mouseX+9)-0.015*(abs(200-mouseX)), 115-0.05*(200-mouseY), 8, 8);
  rect (mouseX-0.015*(200-mouseX), 128-0.07*(200-mouseY)-0.02*(abs(190-mouseY)), 8, 12);
  rect  (mouseX-0.015*(200-mouseX)-5, 129-0.07*(200-mouseY)-0.02*(abs(190-mouseY))+3, 5, 12);
  rect  (mouseX-0.015*(200-mouseX)+5, 129-0.07*(200-mouseY)-0.02*(abs(190-mouseY))+3, 5, 12);

  //the fence and the shadow of the fence
  rectMode (CORNER);

  fill (2);
  noStroke ();
  rect (0, 0, 10, 250);
  fill (90);
  noStroke();
  rect (5, 4, 3, 246);
  fill (30);
  noStroke();
  quad (0, 250, 10, 250, -140.0, 400, -150.0, 400);
  fill (2);
  noStroke ();
  rect (50, 0, 10, 250);
  fill (90);
  noStroke();
  rect (55, 4, 3, 246);
  fill (30);
  noStroke();
  quad (50, 250, 60, 250, -55.0, 400, -65.0, 400);
  fill (2);
  noStroke ();
  rect (100, 0, 10, 250);
  fill (90);
  noStroke();
  rect (105, 4, 3, 246);
  fill (30);
  noStroke();
  quad (100, 250, 110, 250, 30.0, 400, 20.0, 400);
  fill (2);
  noStroke ();
  rect (150, 0, 10, 250);
  fill (90);
  noStroke();
  rect (155, 4, 3, 246);
  fill (30);
  noStroke();
  quad (150, 250, 160, 250, 115.0, 400, 105.0, 400);
  fill (2);
  noStroke ();
  rect (200, 0, 10, 250);
  fill (90);
  noStroke();
  rect (205, 4, 3, 246);
  fill (30);
  noStroke();
  quad (200, 250, 210, 250, 200.0, 400, 190.0, 400);
  fill (2);
  noStroke ();
  rect (250, 0, 10, 250);
  fill (90);
  noStroke();
  rect (255, 4, 3, 246);
  fill (30);
  noStroke();
  quad (250, 250, 260, 250, 285.0, 400, 275.0, 400);
  fill (2);
  noStroke ();
  rect (300, 0, 10, 250);
  fill (90);
  noStroke();
  rect (305, 4, 3, 246);
  fill (30);
  noStroke();
  quad (300, 250, 310, 250, 370.0, 400, 360.0, 400);
  fill (2);
  noStroke ();
  rect (350, 0, 10, 250);
  fill (90);
  noStroke();
  rect (355, 4, 3, 246);
  fill (30);
  noStroke();
  quad (350, 250, 360, 250, 455.0, 400, 445.0, 400);
  fill (2);
  noStroke ();
  rect (400, 0, 10, 250);
  fill (90);
  noStroke();
  rect (405, 4, 3, 246);
  fill (30);
  noStroke();
  quad (400, 250, 410, 250, 540.0, 400, 530.0, 400);
  fill (2);
  noStroke ();
  rect (450, 0, 10, 250);
  fill (90);
  noStroke();
  rect (455, 4, 3, 246);
  fill (30);
  noStroke();
  quad (450, 250, 460, 250, 625.0, 400, 615.0, 400);
  fill (2);
  noStroke ();
  rect (500, 0, 10, 250);
  fill (90);
  noStroke();
  rect (505, 4, 3, 246);
  fill (30);
  noStroke();
  quad (500, 250, 510, 250, 710.0, 400, 700.0, 400);
  fill (2);
  noStroke ();
  rect (550, 0, 10, 250);
  fill (90);
  noStroke();
  rect (555, 4, 3, 246);
  fill (30);
  noStroke();
  quad (550, 250, 560, 250, 795.0, 400, 785.0, 400);
  fill (2);
  noStroke ();
  rect (600, 0, 10, 250);
  fill (90);
  noStroke();
  rect (605, 4, 3, 246);
  fill (30);
  noStroke();
  quad (600, 250, 610, 250, 880.0, 400, 870.0, 400);
}

//the creeper explode when mouse pressed

void mousePressed ()
{
  //set the frame rate
  frameRate (1);
  //redraw the background
  background (30);
  colorMode (HSB);
  fill(61, 21, (abs(mouseX-mouseY)*255/400+40));
  rect (165, 50, 70, 40);

  //redraw the ground
  colorMode (HSB);
  fill (0, 0, (abs(mouseX-mouseY)*255/400)+50);
  noStroke();
  rect (0, 200, 600, 600);
  colorMode (RGB);

  //reset the rect mode
  rectMode (CORNER);

  //redraw the fence
  fill (2);
  noStroke ();
  rect (0, 0, 10, 250);
  fill (90);
  noStroke();
  rect (5, 4, 3, 246);
  fill (30);
  noStroke();
  quad (0, 250, 10, 250, -140.0, 400, -150.0, 400);
  fill (2);
  noStroke ();
  rect (50, 0, 10, 250);
  fill (90);
  noStroke();
  rect (55, 4, 3, 246);
  fill (30);
  noStroke();
  quad (50, 250, 60, 250, -55.0, 400, -65.0, 400);
  fill (2);
  noStroke ();
  rect (100, 0, 10, 250);
  fill (90);
  noStroke();
  rect (105, 4, 3, 246);
  fill (30);
  noStroke();
  quad (100, 250, 110, 250, 30.0, 400, 20.0, 400);
  fill (2);
  noStroke ();
  rect (150, 0, 10, 250);
  fill (90);
  noStroke();
  rect (155, 4, 3, 246);
  fill (30);
  noStroke();
  quad (150, 250, 160, 250, 115.0, 400, 105.0, 400);
  fill (2);
  noStroke ();
  rect (200, 0, 10, 250);
  fill (90);
  noStroke();
  rect (205, 4, 3, 246);
  fill (30);
  noStroke();
  quad (200, 250, 210, 250, 200.0, 400, 190.0, 400);
  fill (2);
  noStroke ();
  rect (250, 0, 10, 250);
  fill (90);
  noStroke();
  rect (255, 4, 3, 246);
  fill (30);
  noStroke();
  quad (250, 250, 260, 250, 285.0, 400, 275.0, 400);
  fill (2);
  noStroke ();
  rect (300, 0, 10, 250);
  fill (90);
  noStroke();
  rect (305, 4, 3, 246);
  fill (30);
  noStroke();
  quad (300, 250, 310, 250, 370.0, 400, 360.0, 400);
  fill (2);
  noStroke ();
  rect (350, 0, 10, 250);
  fill (90);
  noStroke();
  rect (355, 4, 3, 246);
  fill (30);
  noStroke();
  quad (350, 250, 360, 250, 455.0, 400, 445.0, 400);
  fill (2);
  noStroke ();
  rect (400, 0, 10, 250);
  fill (90);
  noStroke();
  rect (405, 4, 3, 246);
  fill (30);
  noStroke();
  quad (400, 250, 410, 250, 540.0, 400, 530.0, 400);
  fill (2);
  noStroke ();
  rect (450, 0, 10, 250);
  fill (90);
  noStroke();
  rect (455, 4, 3, 246);
  fill (30);
  noStroke();
  quad (450, 250, 460, 250, 625.0, 400, 615.0, 400);
  fill (2);
  noStroke ();
  rect (500, 0, 10, 250);
  fill (90);
  noStroke();
  rect (505, 4, 3, 246);
  fill (30);
  noStroke();
  quad (500, 250, 510, 250, 710.0, 400, 700.0, 400);
  fill (2);
  noStroke ();
  rect (550, 0, 10, 250);
  fill (90);
  noStroke();
  rect (555, 4, 3, 246);
  fill (30);
  noStroke();
  quad (550, 250, 560, 250, 795.0, 400, 785.0, 400);
  fill (2);
  noStroke ();
  rect (600, 0, 10, 250);
  fill (90);
  noStroke();
  rect (605, 4, 3, 246);
  fill (30);
  noStroke();
  quad (600, 250, 610, 250, 880.0, 400, 870.0, 400);

  //to make it looks like the fence is blown off by the explosion, I simply draw a rectangle on the top of fence and a quad on top of the ground.
  rectMode (CENTER);
  fill (30);
  rect (mouseX, 150, 120, 100);
  colorMode (HSB);
  fill (0, 0, (abs(mouseX-mouseY)*255/400)+50);
  rect (mouseX, 210, 120, 20);
  fill (0, 0, (abs(mouseX-mouseY)*255/400)+50);
  quad (mouseX-60, 300, mouseX+60, 300, (200 - 1.24*(200-(mouseX+60))), 370, (200 - 1.24*(200-(mouseX-60))), 370);

  colorMode (RGB);

  //the explosion
  fill (255);
  ellipse (mouseX-20, 120, 30, 30);
  fill (30);
  ellipse (mouseX-10, 115, 20, 20);
  fill (255);
  ellipse (mouseX+10, 150, 60, 60);
  fill (30);
  ellipse (mouseX-3, 167, 40, 40);
  fill (255);
  ellipse (mouseX-13, 200, 36, 36);
  ellipse (mouseX-40, 110, 20, 20);
  fill (30);
  ellipse (mouseX-43, 107, 15, 15);
  fill (255);
  ellipse (mouseX+30, 160, 40, 40);
  ellipse (mouseX-40, 178, 57, 57);
  ellipse (mouseX, 220, 34, 34);
  ellipse (mouseX+5, 190, 23, 23);
  fill (30);
  ellipse (mouseX+45, 160, 26, 26);
  ellipse (mouseX-50, 190, 30, 30);
}