Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
// Rick Sanchez's 1st Portal Jump
// Click & hold your mouse button and quickly make circular motions to create Rick's portal
// Press any key to see Rick's legendary catch phrase


void setup() {
  // set the size of the window
  size(400, 400);
  // take out black outlines
  noStroke();
  // set 60 fps
  frameRate(60);
  // set anti-aliasing
  smooth();
}

void draw() {
  // set drawing modes
  rectMode(CORNERS);
  ellipseMode(CENTER);

  // as the cursor trails down vertically, sky gets darker
  background(240-mouseY/3, 142-mouseY/3, 76-mouseY/3);
  // draw an orange background gradient getting lighter as you go down
  fill(240-mouseY/3, 151-mouseY/3, 92-mouseY/3);
  rect(0, 80, 400, 160);
  fill(240-mouseY/3, 161-mouseY/3, 108-mouseY/3);
  rect(0, 160, 400, 240);
  fill(240-mouseY/3, 170-mouseY/3, 123-mouseY/3);
  rect(0, 240, 400, 320);

  // draw sun
  fill(mouseX/2, 50, mouseY/2);
  ellipse(200+mouseX/100, 320, 450, 400);

  // draw clouds moving left
  fill(255-mouseY/3, 255-mouseY/3, 255-mouseY/3, 100);
  rect(320-frameCount/5, 75, 390-frameCount/5, 100, 7);
  rect(220-frameCount/5, 55, 300-frameCount/5, 100, 7);
  rect(20-frameCount/5, 60, 80-frameCount/5, 90, 7);
  rect(140-frameCount/5, 55, 190-frameCount/5, 75, 7);

  // draw same clouds moving left after the first set
  rect(700-frameCount/5, 75, 770-frameCount/5, 100, 7);
  rect(600-frameCount/5, 55, 680-frameCount/5, 100, 7);
  rect(400-frameCount/5, 60, 460-frameCount/5, 90, 7);
  rect(520-frameCount/5, 55, 570-frameCount/5, 75, 7);

  // draw mountain (back)
  fill(mouseX/2, 129, mouseY/2);
  triangle(85+mouseX/30, 320+mouseY/30, 200+mouseX/30, 60+mouseY/30, 320+mouseX/30, 320+mouseY/30);
  fill(mouseX/2, 102, mouseY/2);
  triangle(85+mouseX/30, 320+mouseY/30, 200+mouseX/30, 60+mouseY/30, 255+mouseX/30, 320+mouseY/30);

  // draw ground
  fill(255, 110, 110-mouseY/7);
  rect(-10+mouseX/100, 320+mouseY/100, 400, 400);

  // draw mountains (front)
  fill(255, 110, 110-mouseY/7);
  triangle(-15+mouseX/100, 320+mouseY/100, 30+mouseX/100, 220+mouseY/100, 60+mouseX/100, 320+mouseY/100);
  triangle(30+mouseX/100, 320+mouseY/100, 90+mouseX/100, 260+mouseY/100, 120+mouseX/100, 320+mouseY/100);
  triangle(90+mouseX/100, 300+mouseY/100, 110+mouseX/100, 270+mouseY/100, 120+mouseX/100, 290+mouseY/100);
  triangle(90+mouseX/100, 320+mouseY/100, 140+mouseX/100, 240+mouseY/100, 180+mouseX/100, 320+mouseY/100);
  triangle(160+mouseX/100, 320+mouseY/100, 200+mouseX/100, 260+mouseY/100, 240+mouseX/100, 320+mouseY/100);
  triangle(200+mouseX/100, 320+mouseY/100, 220+mouseX/100, 290+mouseY/100, 260+mouseX/100, 320+mouseY/100);
  triangle(240+mouseX/100, 320+mouseY/100, 260+mouseX/100, 280+mouseY/100, 300+mouseX/100, 320+mouseY/100);
  triangle(280+mouseX/100, 320+mouseY/100, 310+mouseX/100, 240+mouseY/100, 340+mouseX/100, 320+mouseY/100);
  triangle(310+mouseX/100, 320+mouseY/100, 370+mouseX/100, 220+mouseY/100, 410+mouseX/100, 320+mouseY/100);

  // draw rick's shadow
  fill(210, 88, 88-mouseY/7);
  ellipse(120+mouseX/100, 320+mouseY/100, 150, 9);

  // draw rick's hair base
  fill(188, 228, 247-mouseY/5);
  rect(65+mouseX/100, 125+mouseY/100, 100+mouseX/100, 165+mouseY/100);

  // draw rick's hair spikes
  rect(75+mouseX/100, 115+mouseY/100, 85+mouseX/100, 125+mouseY/100);
  rect(75+mouseX/100, 110+mouseY/100, 80+mouseX/100, 115+mouseY/100);
  rect(90+mouseX/100, 120+mouseY/100, 100+mouseX/100, 125+mouseY/100);
  rect(95+mouseX/100, 115+mouseY/100, 100+mouseX/100, 120+mouseY/100);
  rect(100+mouseX/100, 130+mouseY/100, 105+mouseX/100, 135+mouseY/100);
  rect(100+mouseX/100, 140+mouseY/100, 105+mouseX/100, 145+mouseY/100);
  rect(60+mouseX/100, 125+mouseY/100, 65+mouseX/100, 130+mouseY/100);
  rect(60+mouseX/100, 135+mouseY/100, 65+mouseX/100, 145+mouseY/100);
  rect(55+mouseX/100, 140+mouseY/100, 60+mouseX/100, 145+mouseY/100);
  rect(60+mouseX/100, 150+mouseY/100, 65+mouseX/100, 155+mouseY/100);
  rect(65+mouseX/100, 160+mouseY/100, 70+mouseX/100, 165+mouseY/100);

  // draw rick's head base
  fill(255, 229, 204-mouseY/5);
  rect(75+mouseX/100, 130+mouseY/100, 95+mouseX/100, 170+mouseY/100);
  rect(70+mouseX/100, 135+mouseY/100, 75+mouseX/100, 165+mouseY/100);

  // draw rick's ears
  rect(65+mouseX/100, 155+mouseY/100, 70+mouseX/100, 160+mouseY/100);
  rect(95+mouseX/100, 155+mouseY/100, 100+mouseX/100, 160+mouseY/100);

  // draw rick's eyes
  fill(255, 255, 255-mouseY/5);
  rect(75+mouseX/100, 140+mouseY/100, 85+mouseX/100, 155+mouseY/100);
  rect(85+mouseX/100, 140+mouseY/100, 95+mouseX/100, 155+mouseY/100);

  // draw rick's nose  
  fill(208, 189, 171-mouseY/5);
  rect(85+mouseX/100, 145+mouseY/100, 90+mouseX/100, 157+mouseY/100);

  // draw rick's mouth
  fill(0, 0, 0);
  rect(80+mouseX/100, 160+mouseY/100, 90+mouseX/100, 163+mouseY/100);
  rect(77+mouseX/100, 157+mouseY/100, 80+mouseX/100, 160+mouseY/100);

  // draw rick's pupils
  fill(0, 0, 0);
  rect(80+mouseX/100, 140+mouseY/100, 85+mouseX/100, 150+mouseY/100);
  rect(92+mouseX/100, 140+mouseY/100, 95+mouseX/100, 150+mouseY/100);

  // draw rick's eyebrows
  fill(188, 228, 247-mouseY/5);
  rect(75+mouseX/100, 135+mouseY/100, 95+mouseX/100, 140+mouseY/100);

  // draw rick's neck
  fill(208, 189, 171-mouseY/5);
  rect(80+mouseX/100, 170+mouseY/100, 90+mouseX/100, 175+mouseY/100);

  // draw rick's lab coat
  fill(255, 255, 255-mouseY/5);
  rect(60+mouseX/100, 180+mouseY/100, 105+mouseX/100, 275+mouseY/100);
  rect(67+mouseX/100, 175+mouseY/100, 80+mouseX/100, 180+mouseY/100);
  rect(65+mouseX/100, 280+mouseY/100, 70+mouseX/100, 260+mouseY/100);
  rect(95+mouseX/100, 275+mouseY/100, 105+mouseX/100, 280+mouseY/100);
  rect(90+mouseX/100, 275+mouseY/100, 100+mouseX/100, 280+mouseY/100);

  // draw rick's shirt
  fill(128, 228, 247-mouseY/5);
  rect(80+mouseX/100, 175+mouseY/100, 95+mouseX/100, 245+mouseY/100);

  // draw rick's arms
  fill(255, 255, 255-mouseY/5);
  rect(105+mouseX/100, 180+mouseY/100, 155+mouseX/100, 190+mouseY/100);
  rect(105+mouseX/100, 190+mouseY/100, 110+mouseX/100, 195+mouseY/100);
  rect(55+mouseX/100, 185+mouseY/100, 65+mouseX/100, 248+mouseY/100);

  // draw rick's hands
  fill(255, 229, 204-mouseY/5);
  rect(55+mouseX/100, 248+mouseY/100, 65+mouseX/100, 260+mouseY/100);
  rect(155+mouseX/100, 180+mouseY/100, 170+mouseX/100, 185+mouseY/100);
  rect(155+mouseX/100, 185+mouseY/100, 165+mouseX/100, 190+mouseY/100);

  // draw rick's belt
  fill(0, 0, 0);
  rect(75+mouseX/100, 230+mouseY/100, 95+mouseX/100, 235+mouseY/100);
  fill(255, 255, 0-mouseY/5);
  rect(85+mouseX/100, 230+mouseY/100, 90+mouseX/100, 235+mouseY/100);

  // draw rick's pants
  fill(148, 114, 63-mouseY/5);
  rect(70+mouseX/100, 260+mouseY/100, 80+mouseX/100, 305+mouseY/100);
  rect(75+mouseX/100, 235+mouseY/100, 80+mouseX/100, 260+mouseY/100);
  rect(75+mouseX/100, 235+mouseY/100, 95+mouseX/100, 245+mouseY/100);
  rect(90+mouseX/100, 260+mouseY/100, 100+mouseX/100, 305+mouseY/100);
  rect(90+mouseX/100, 235+mouseY/100, 95+mouseX/100, 260+mouseY/100);

  // draw rick's shoes
  fill(255, 255, 255-mouseY/5);
  rect(70+mouseX/100, 305+mouseY/100, 80+mouseX/100, 310+mouseY/100);
  rect(90+mouseX/100, 305+mouseY/100, 100+mouseX/100, 310+mouseY/100);
  fill(73, 73, 73-mouseY/5);
  rect(65+mouseX/100, 310+mouseY/100, 80+mouseX/100, 315+mouseY/100);
  rect(90+mouseX/100, 310+mouseY/100, 105+mouseX/100, 315+mouseY/100);
  fill(51, 51, 51-mouseY/5);
  rect(60+mouseX/100, 315+mouseY/100, 80+mouseX/100, 320+mouseY/100);
  rect(90+mouseX/100, 315+mouseY/100, 110+mouseX/100, 320+mouseY/100);

  // draw rick's portal gun
  fill(200, 200, 200-mouseY/5);
  rect(150+mouseX/100, 170+mouseY/100, 190+mouseX/100, 180+mouseY/100);
  rect(145+mouseX/100, 190+mouseY/100, 160+mouseX/100, 195+mouseY/100);
  fill(128, 255, 0-mouseY/5);
  rect(160+mouseX/100, 160+mouseY/100, 165+mouseX/100, 170+mouseY/100);
}

void mouseDragged() {
  // draw rick's portal
  fill(128, 255, 0);
  ellipse(320+mouseX/100, 180+mouseY/100, 40+mouseX/100, 200);
  fill(255, 255, 255);
  ellipse(320+mouseX/100, 180+mouseY/100, 30+mouseX/100, 160);
  fill(102, 204, 0);
  ellipse(320+mouseX/100, 180+mouseY/100, 25+mouseX/100, 150);
  fill(76, 153, 0);
  ellipse(320+mouseX/100, 180+mouseY/100, 10+mouseX/100, 100);

  // draw shadow of rick's portal
  fill(210, 88, 88-mouseY/7);
  ellipse(320+mouseX/100, 320+mouseY/100, 40+mouseX/100, 8);

  // draw portal transmission beam
  stroke(128, 255, 0);
  strokeWeight(3);
  line(190+mouseX/100, 175+mouseY/100, 319+mouseX/100, 174+mouseY/100);
  noStroke();
}

// say catch phrase when a key is pressed
void keyPressed() {
  println("WUBALUBADUBDUB!!!");
}