Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//Nick Battista
//2016/09/22
//Ye Olde Pirate Ship
//Uses mouseX and mouseY with sinusoisal functions in order  
//to simulate perspective and to change from day to night

void setup() {
  size(400, 400);
  frameRate(30);
}
void draw() {
  //Reset to white
  colorMode(HSB, 360, 100, 100);
  background(180, 100, 100-mouseY/5);

  colorMode(RGB, 255, 255, 255);

  //Sun
  fill(255, 220, 0);
  ellipseMode(CENTER);
  ellipse(200+355*cos(mouseY*PI/400-PI/2), 400+355*sin(mouseY*PI/400-PI/2), 50, 50);

  //Moon
  fill(230, 230, 230);
  ellipse(200+355*cos(mouseY*PI/400+PI/2), 400+355*sin(mouseY*PI/400+PI/2), 50, 50);
  colorMode(HSB, 360, 100, 100);
  fill(180, 100, 100-mouseY/5);
  ellipse(200+355*cos(mouseY*PI/400+PI/2+PI/80), 400+355*sin(mouseY*PI/400+PI/2+PI/80), 50, 50);
  colorMode(RGB, 255, 255, 255);

  //Clouds
  fill(255, 255, 255);
  ellipse(80+(mouseX-200)/8, 60, 55, 55);
  ellipse(50+(mouseX-200)/8, 60, 30, 30);
  ellipse(110+(mouseX-200)/8, 70, 30, 30);

  ellipse(300+(mouseX-200)/8, 40, 45, 45);
  ellipse(280+(mouseX-200)/8, 50, 30, 30);

  //Sails
  stroke(1, 75);
  fill(255, 255, 255);
  quad(180+(mouseX-200)/6+5*cos(frameCount*PI/30), 90+10*sin(frameCount*PI/30), 160+(mouseX-200)/6+5*cos(frameCount*PI/30), 130+10*sin(frameCount*PI/30), 210+(mouseX-200)/6+5*cos(frameCount*PI/30), 145+10*sin(frameCount*PI/30), 240+(mouseX-200)/6+5*cos(frameCount*PI/30), 85+10*sin(frameCount*PI/30));
  quad(100+(mouseX-200)/6+5*cos(frameCount*PI/30), 110+10*sin(frameCount*PI/30), 35+(mouseX-200)/6+5*cos(frameCount*PI/30), 215+10*sin(frameCount*PI/30), 200+(mouseX-200)/6+5*cos(frameCount*PI/30), 220+10*sin(frameCount*PI/30), 200+(mouseX-200)/6+5*cos(frameCount*PI/30), 125+10*sin(frameCount*PI/30));

  //Rope
  line(210+(mouseX-200)/6+5*cos(frameCount*PI/30), 110+10*sin(frameCount*PI/30), 380+(mouseX-200)/6+5*cos(frameCount*PI/30), 240+10*sin(frameCount*PI/30));
  line(375+(mouseX-200)/6+5*cos(frameCount*PI/30), 235+10*sin(frameCount*PI/30), 250+(mouseX-200)/6+5*cos(frameCount*PI/30), 260+10*sin(frameCount*PI/30));
  line (250+(mouseX-200)/6+5*cos(frameCount*PI/30), 260+10*sin(frameCount*PI/30), 210+(mouseX-200)/6+5*cos(frameCount*PI/30), 110+10*sin(frameCount*PI/30));
  triangle(215+(mouseX-200)/6+5*cos(frameCount*PI/30), 130+10*sin(frameCount*PI/30), 250+(mouseX-200)/6+5*cos(frameCount*PI/30), 260+10*sin(frameCount*PI/30), 360+(mouseX-200)/6+5*cos(frameCount*PI/30), 237+10*sin(frameCount*PI/30));

  //Hull
  fill(155, 100, 50);
  noStroke();
  quad(260+(mouseX-200)/6+5*cos(frameCount*PI/30), 320+10*sin(frameCount*PI/30), 310+(mouseX-200)/6+5*cos(frameCount*PI/30), 320+10*sin(frameCount*PI/30), 380+(mouseX-200)/6+5*cos(frameCount*PI/30), 240+10*sin(frameCount*PI/30), 340+(mouseX-200)/6+5*cos(frameCount*PI/30), 240+10*sin(frameCount*PI/30));
  quad(320+(mouseX-200)/6+5*cos(frameCount*PI/30), 260+10*sin(frameCount*PI/30), 310+(mouseX-200)/6+5*cos(frameCount*PI/30), 320+10*sin(frameCount*PI/30), 180+(mouseX-200)/6+5*cos(frameCount*PI/30), 320+10*sin(frameCount*PI/30), 180+(mouseX-200)/6+5*cos(frameCount*PI/30), 260+10*sin(frameCount*PI/30)); 
  quad(80+(mouseX-200)/6+5*cos(frameCount*PI/30), 250+10*sin(frameCount*PI/30), 120+(mouseX-200)/6+5*cos(frameCount*PI/30), 320+10*sin(frameCount*PI/30), 210+(mouseX-200)/6+5*cos(frameCount*PI/30), 320+10*sin(frameCount*PI/30), 175+(mouseX-200)/6+5*cos(frameCount*PI/30), 250+10*sin(frameCount*PI/30));
  quad(60+(mouseX-200)/6+5*cos(frameCount*PI/30), 230+10*sin(frameCount*PI/30), 65+(mouseX-200)/6+5*cos(frameCount*PI/30), 250+10*sin(frameCount*PI/30), 175+(mouseX-200)/6+5*cos(frameCount*PI/30), 250+10*sin(frameCount*PI/30), 165+(mouseX-200)/6+5*cos(frameCount*PI/30), 230+10*sin(frameCount*PI/30));

  //Mast
  fill(175, 100, 50);
  stroke(1, 5);
  quad(200+(mouseX-200)/6+5*cos(frameCount*PI/30), 40+10*sin(frameCount*PI/30), 210+(mouseX-200)/6+5*cos(frameCount*PI/30), 40+10*sin(frameCount*PI/30), 220+(mouseX-200)/6+5*cos(frameCount*PI/30), 260+10*sin(frameCount*PI/30), 200+(mouseX-200)/6+5*cos(frameCount*PI/30), 260+10*sin(frameCount*PI/30));
  quad(180+(mouseX-200)/6+5*cos(frameCount*PI/30), 90+10*sin(frameCount*PI/30), 175+(mouseX-200)/6+5*cos(frameCount*PI/30), 80+10*sin(frameCount*PI/30), 235+(mouseX-200)/6+5*cos(frameCount*PI/30), 75+10*sin(frameCount*PI/30), 240+(mouseX-200)/6+5*cos(frameCount*PI/30), 85+10*sin(frameCount*PI/30));
  quad(100+(mouseX-200)/6+5*cos(frameCount*PI/30), 100+10*sin(frameCount*PI/30), 95+(mouseX-200)/6+5*cos(frameCount*PI/30), 110+10*sin(frameCount*PI/30), 200+(mouseX-200)/6+5*cos(frameCount*PI/30), 125+10*sin(frameCount*PI/30), 200+(mouseX-200)/6+5*cos(frameCount*PI/30), 115+10*sin(frameCount*PI/30));
  quad(200+(mouseX-200)/6+5*cos(frameCount*PI/30), 215+10*sin(frameCount*PI/30), 200+(mouseX-200)/6+5*cos(frameCount*PI/30), 225+10*sin(frameCount*PI/30), 25+(mouseX-200)/6+5*cos(frameCount*PI/30), 220+10*sin(frameCount*PI/30), 30+(mouseX-200)/6+5*cos(frameCount*PI/30), 210+10*sin(frameCount*PI/30));

  //Water
  fill(0, 0, 255);
  beginShape();
  vertex(500+(mouseX-200)/4, 400);
  vertex(0+(mouseX-200)/4, 400);
  curveVertex(-100+(mouseX-200)/4, 300+10*sin(frameCount*PI/30));
  curveVertex(-100+(mouseX-200)/4, 300+10*sin(frameCount*PI/30));

  curveVertex(-70+(mouseX-200)/4, 300+10*sin(frameCount*PI/30));
  curveVertex(-40+(mouseX-200)/4, 300+10*sin((frameCount+6)*PI/30));
  curveVertex(-10+(mouseX-200)/4, 300+10*sin((frameCount+12)*PI/30));
  curveVertex(20+(mouseX-200)/4, 300+10*sin((frameCount+18)*PI/30));

  curveVertex(50+(mouseX-200)/4, 300+10*sin((frameCount+24)*PI/30));
  curveVertex(80+(mouseX-200)/4, 300+10*sin((frameCount+30)*PI/30));
  curveVertex(110+(mouseX-200)/4, 300+10*sin((frameCount+36)*PI/30));
  curveVertex(140+(mouseX-200)/4, 300+10*sin((frameCount+42)*PI/30));

  curveVertex(170+(mouseX-200)/4, 300+10*sin((frameCount+48)*PI/30));
  curveVertex(200+(mouseX-200)/4, 300+10*sin((frameCount+54)*PI/30));
  curveVertex(230+(mouseX-200)/4, 300+10*sin(frameCount*PI/30));
  curveVertex(260+(mouseX-200)/4, 300+10*sin((frameCount+6)*PI/30));

  curveVertex(290+(mouseX-200)/4, 300+10*sin((frameCount+12)*PI/30));
  curveVertex(320+(mouseX-200)/4, 300+10*sin((frameCount+18)*PI/30));
  curveVertex(350+(mouseX-200)/4, 300+10*sin((frameCount+24)*PI/30));
  curveVertex(380+(mouseX-200)/4, 300+10*sin((frameCount+30)*PI/30));

  curveVertex(410+(mouseX-200)/4, 300+10*sin((frameCount+36)*PI/30));
  curveVertex(440+(mouseX-200)/4, 300+10*sin((frameCount+42)*PI/30));
  curveVertex(470+(mouseX-200)/4, 300+10*sin((frameCount+48)*PI/30));
  curveVertex(500+(mouseX-200)/4, 300+10*sin((frameCount+54)*PI/30));
  curveVertex(500+(mouseX-200)/4, 300+10*sin(frameCount*PI/30));
  curveVertex(500+(mouseX-200)/4, 300+10*sin((frameCount+6)*PI/30));
  vertex(500+(mouseX-200)/4, 300);
  vertex(500+(mouseX-200)/4, 400);
  endShape();

  //Foreground Water
  fill(0, 0, 191);
  beginShape();
  vertex(500, 400);
  vertex(0, 400);
  curveVertex(-100+(mouseX-200)/3, 325+20*sin(frameCount*PI/50));
  curveVertex(-100+(mouseX-200)/3, 325+20*sin(frameCount*PI/50));

  curveVertex(-70+(mouseX-200)/3, 325+20*sin(frameCount*PI/50));
  curveVertex(-40+(mouseX-200)/3, 325+20*sin((frameCount+10)*PI/50));
  curveVertex(-10+(mouseX-200)/3, 325+20*sin((frameCount+20)*PI/50));
  curveVertex(20+(mouseX-200)/3, 325+20*sin((frameCount+30)*PI/50));

  curveVertex(50+(mouseX-200)/3, 325+20*sin((frameCount+40)*PI/50));
  curveVertex(80+(mouseX-200)/3, 325+20*sin((frameCount+50)*PI/50));
  curveVertex(110+(mouseX-200)/3, 325+20*sin((frameCount+60)*PI/50));
  curveVertex(140+(mouseX-200)/3, 325+20*sin((frameCount+70)*PI/50));

  curveVertex(170+(mouseX-200)/3, 325+20*sin((frameCount+80)*PI/50));
  curveVertex(200+(mouseX-200)/3, 325+20*sin((frameCount+90)*PI/50));
  curveVertex(230+(mouseX-200)/3, 325+20*sin(frameCount*PI/50));
  curveVertex(260+(mouseX-200)/3, 325+20*sin((frameCount+10)*PI/50));

  curveVertex(290+(mouseX-200)/3, 325+20*sin((frameCount+20)*PI/50));
  curveVertex(320+(mouseX-200)/3, 325+20*sin((frameCount+30)*PI/50));
  curveVertex(350+(mouseX-200)/3, 325+20*sin((frameCount+40)*PI/50));
  curveVertex(380+(mouseX-200)/3, 325+20*sin((frameCount+50)*PI/50));

  curveVertex(410+(mouseX-200)/3, 325+20*sin((frameCount+60)*PI/50));
  curveVertex(440+(mouseX-200)/3, 325+20*sin((frameCount+70)*PI/50));
  curveVertex(470+(mouseX-200)/3, 325+20*sin((frameCount+80)*PI/50));
  curveVertex(500+(mouseX-200)/3, 325+20*sin((frameCount+90)*PI/50));
  curveVertex(500+(mouseX-200)/3, 325+20*sin(frameCount*PI/50));
  curveVertex(500+(mouseX-200)/3, 325+20*sin((frameCount+10)*PI/50));
  vertex(500, 300);
  vertex(500, 400);
  endShape();
}

//Added this just to prove I know how it works
void mouseClicked() {
println("Do what you want, 'cause a pirate is free,");
println("You are a pirate!");

println("Yar har, fiddle di dee,");
println("Being a pirate is all right with me,");
println("Do what you want 'cause a pirate is free,");
println("You are a pirate!");
println("Yo Ho, ahoy and avast,");
println("Being a pirate is really badass!");
println("Hang the black flag at the end of the mast!");
println("You are a pirate!");

println("You are a pirate! - Yay!");

println("We've got us a map, (a map!)");
println("To lead us to a hidden box,");
println("That's all locked up with locks! (with locks!)");
println("And buried deep away!");

println("We'll dig up the box, (the box!)");
println("We know it's full of precious booty!");
println("Burst open the locks!");
println("And then we'll say hooray!");

println("Yar har, fiddle di dee,");
println("Being a pirate is all right with me!");
println("Do what you want 'cause a pirate is free,");
println("You are a pirate!");
println("Yo Ho, ahoy and avast,");
println("Being a Pirate is really badass!");
println("Hang the black flag");
println("At the end of the mast!");
println("You are a pirate!");

println("Hahaha!");

println("We're sailing away (set sail!),");
println("Adventure awaits on every shore!");
println("We set sail and explore (ya-har!)");
println("And run and jump all day (Yay!)");
println("We float on our boat (the boat!)");
println("Until it's time to drop the anchor,");
println("Then hang up our coats (aye-aye!)");
println("Until we sail again!");

println("Yar har, fiddle di dee,");
println("Being a pirate is all right with me!");
println("Do what you want 'cause a pirate is free,");
println("You are a pirate!");
}