Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
Title: Final Mission
By: Zhe Yue
Vertical mouse movement controls the UFO's movement vertically while the UFO's antenna stays in place, horizontal mouse
movement controls the spaceship's movement horizontally . Stars in the background brightens and dims when the mouse moves
around. When the mouse is pressed, the UFO's antenna glows and shoots a beam at the mouse. Text appears when the drawing is
launched and when the mouse is pressed.
*/

void setup() {
  
  size(400, 400); //set screen size
  smooth(); //enable anti-aliasing
  rectMode(CORNERS);
  ellipseMode(CORNERS); //set rect and ellipse modes
  frameRate(30); //set framerate
  println ("Final Mission"); //prints text when drawing launches
  
}

void draw() {
  
  //background color
  background(0, 8, 24); //dark blue
  
  //dim stars (round)
  noStroke(); //disable lines
  fill(220-mouseY/2, 220-mouseY/2, 200-mouseY/2); //vertical mouse movement changes brightness
  
  ellipse(50, 160, 60, 170);
  ellipse(105, 190, 110, 195);
  ellipse(20, 340, 25, 345);
  ellipse(50, 320, 60, 330);
  ellipse(135, 380, 140, 385);
  ellipse(285, 250, 290, 255);
  ellipse(300, 110, 305, 115);
  ellipse(320, 220, 330, 230);
  ellipse(340, 360, 345, 365);
  ellipse(350, 370, 360, 380);
  
  //bright stars (pointed)
  fill(220-mouseX/3, 220-mouseX/3, 200-mouseX/3); //horizontal mouse movement changes brightness, doesn't become as dim as round stars
  
  triangle(70, 120, 67, 140, 73, 140);
  triangle(70, 160, 67, 140, 73, 140);
  triangle(50, 140, 70, 137, 70, 143);
  triangle(90, 140, 70, 137, 70, 143);
  
  triangle(130, 240, 128, 250, 132, 250);
  triangle(130, 260, 128, 250, 132, 250);
  triangle(120, 250, 130, 248, 130, 252);
  triangle(140, 250, 130, 248, 130, 252);
  
  triangle(360, 150, 357, 170, 363, 170);
  triangle(360, 190, 357, 170, 363, 170);
  triangle(340, 170, 360, 167, 360, 173);
  triangle(380, 170, 360, 167, 360, 173);
  
  triangle(380, 130, 378, 140, 382, 140);
  triangle(380, 150, 378, 140, 382, 140);
  triangle(370, 140, 380, 138, 380, 142);
  triangle(390, 140, 380, 138, 380, 142);
  
  triangle(310, 300, 308, 310, 312, 310);
  triangle(310, 320, 308, 310, 312, 310);
  triangle(300, 310, 310, 308, 310, 312);
  triangle(320, 310, 310, 308, 310, 312);
  
  //UFO (top and bottom moves up when mouse moves down)
  
  //antenna (stationary)
  fill(130, 130, 115); //grey
  triangle(180, 60, 220, 60, 200, 165);
  ellipse(185, 135, 215, 165);
  
  //UFO top
  rect(80, 0-mouseY/15, 320, 90-mouseY/15);
  rect(0, 0-mouseY/15, 80, 60-mouseY/15);
  rect(320, 0-mouseY/15, 400, 60-mouseY/15);
  triangle(0, 60-mouseY/15, 80, 60-mouseY/15, 80, 90-mouseY/15);
  triangle(320, 60-mouseY/15, 400, 60-mouseY/15, 320, 90-mouseY/15);
  stroke(50, 50, 40); //enable lines, dark grey
  strokeWeight(2); //thicker lines
  line(0, 20-mouseY/15, 100, 80-mouseY/15);
  line(110, 0-mouseY/15, 145, 80-mouseY/15);
  line(200, 0-mouseY/15, 200, 80-mouseY/15);
  line(290, 0-mouseY/15, 255, 80-mouseY/15);
  line(400, 20-mouseY/15, 300, 80-mouseY/15);
  noStroke(); //disable lines
  fill(100, 100, 90); //slightly darker grey
  ellipse(80, 70-mouseY/15, 320, 105-mouseY/15);
  
  //UFO bottom
  fill(80, 80, 66); //dark grey
  ellipse(130, 80-mouseY/15, 270, 100-mouseY/15);
  triangle(130, 90-mouseY/15, 150, 90-mouseY/15, 150, 120-mouseY/15);
  triangle(270, 90-mouseY/15, 250, 90-mouseY/15, 250, 120-mouseY/15);
  rect(150, 90-mouseY/15, 250, 120-mouseY/15);
  
  //ship (moves horizontally with mouse)
  fill(250, 75, 0); //orange
  triangle(mouseX, 380, mouseX-10, 365, mouseX+10, 365); //exhaust flame
  fill(80, 80, 66); //grey
  triangle(mouseX, 350, mouseX-15, 370, mouseX+15, 370); //exhaust
  fill(160, 20, 0); //red
  triangle(mouseX-15, 330, mouseX-15, 360, mouseX-35, 360); //left fin
  triangle(mouseX+15, 330, mouseX+15, 360, mouseX+35, 360); //right fin
  fill(200, 195, 190); //white
  triangle(mouseX-15, 320, mouseX-15, 360, mouseX-25, 320); //ship bottom left
  triangle(mouseX+15, 320, mouseX+15, 360, mouseX+25, 320); //ship bottom right
  rect(mouseX-15, 320, mouseX+15, 360); //ship bottom middle
  ellipse(mouseX-27, 270, mouseX+27, 345); //ship middle
  triangle(mouseX-26, 295, mouseX+26, 295, mouseX, 250); //ship top
  fill(160, 20, 0); //red
  triangle(mouseX-18, 280, mouseX+18, 280, mouseX, 250); //ship cap
  fill(80, 80, 66); //grey
  ellipse(mouseX-15, 285, mouseX+15, 315); //window frame
  fill(145, 155, 155); //light blue
  ellipse(mouseX-12, 289, mouseX+12, 311); //window
  fill(160, 20, 0); //red
  rect(mouseX-2, 330, mouseX+2, 360); //middle fin
  
}

void mousePressed() {
  
  //when mouse is pressed, antenna glows and shoots a triangular beam at mouse
  
  //antenna glow
  fill(125, 175, 220); //blue
  ellipse(170, 120, 230, 180); //glow
  
  //beam
  fill(165, 230, 250); //lighter blue
  triangle(185, 150, 215, 150, mouseX, mouseY); //beam
  
  //redraw antenna
  fill(130, 130, 115); //grey
  triangle(180, 60, 220, 60, 200, 165);
  ellipse(185, 135, 215, 165);
  
  //redraw UFO
  
  //UFO top
  rect(80, 0-mouseY/15, 320, 90-mouseY/15);
  rect(0, 0-mouseY/15, 80, 60-mouseY/15);
  rect(320, 0-mouseY/15, 400, 60-mouseY/15);
  triangle(0, 60-mouseY/15, 80, 60-mouseY/15, 80, 90-mouseY/15);
  triangle(320, 60-mouseY/15, 400, 60-mouseY/15, 320, 90-mouseY/15);
  stroke(50, 50, 40); //enable lines, dark grey
  strokeWeight(2); //thicker lines
  line(0, 20-mouseY/15, 100, 80-mouseY/15);
  line(110, 0-mouseY/15, 145, 80-mouseY/15);
  line(200, 0-mouseY/15, 200, 80-mouseY/15);
  line(290, 0-mouseY/15, 255, 80-mouseY/15);
  line(400, 20-mouseY/15, 300, 80-mouseY/15);
  noStroke(); //disable lines
  fill(100, 100, 90); //slightly darker grey
  ellipse(80, 70-mouseY/15, 320, 105-mouseY/15);
  
  //UFO bottom
  fill(80, 80, 66); //dark grey
  ellipse(130, 80-mouseY/15, 270, 100-mouseY/15);
  triangle(130, 90-mouseY/15, 150, 90-mouseY/15, 150, 120-mouseY/15);
  triangle(270, 90-mouseY/15, 250, 90-mouseY/15, 250, 120-mouseY/15);
  rect(150, 90-mouseY/15, 250, 120-mouseY/15);
  
  println("Zap!"); //prints text when mouse is pressed
  
}