Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
void setup(){
  size(400,400);
  ////////surface.setResizable(true);
  ////////hint(ENABLE_STROKE_PURE); //fixes some of the jitteryness with lines
}
void draw(){
  background(198,231,255);
  rectMode(CORNERS);
  noStroke();
  
  //moon
  fill(244,244,255);
  ellipse(200,140,200,200);
  
  //mountain 1
  fill(191,212,240);
  triangle(170,250,250,150,350,250);
  fill(91,84,103,60);//shadow
  triangle(170,250,250,150,220,250);//shadow
  
  //mountain 2
  fill(179,189,214);
  triangle(50,250,150,120,260,250);
  fill(91,84,103,60);//shadow
  triangle(50,250,150,120,110,250);//shadow
  
  //sea fog
  fill(255);
  rect(0,250,400,260);
  fill(255,255,255,150);
  rect(0,240,400,250);
  fill(255,255,255,80);
  rect(0,230,400,240);
  fill(255,255,255,40);
  rect(0,220,400,230);
  
  //waves
  fill(183,207,226);
  //wave 5
  rect(0,(float)(260+Math.sin(frameCount*.03-2.4)),400,400);
  fill(134,179,214);
  //wave 4
  rect(0,(float)(272+Math.sin(frameCount*.03-1.6)*2),400,400);

  //fish inside wave 3 and behind boat
  //they are just ellipses because they are small and far away
  fill(255,211,237);
    ellipse(-20+(mouseX-200)*0.4+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02+25))*50)-(4*0.4)+310, 5,3);
    ellipse(40+(mouseX-200)*0.5+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02+27))*50)-(4*0.4)+310, 5,3);
    ellipse(100+(mouseX-200)*0.4+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02+17))*30)-(4*0.4)+310, 5,3);
    ellipse(110+(mouseX-200)*0.5+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02+28))*40)-(4*0.4)+310, 5,3);
    ellipse(160+(mouseX-200)*0.4+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02-5))*55)-(4*0.4)+310, 5,3);
    ellipse(230+(mouseX-200)*0.4+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*30)-(4*0.4)+310, 5,3);
    ellipse(270+(mouseX-200)*0.3+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02-15))*35)-(4*0.4)+310, 5,3);
    ellipse(310+(mouseX-200)*0.4+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02+20))*40)-(4*0.4)+310, 5,3);
    ellipse(380+(mouseX-200)*0.4+(6.93*0.4),(float)(-Math.abs(Math.sin(mouseX*0.02-4))*50)-(4*0.4)+310, 5,3);
  
  //BOAT
  rectMode(CENTER);
  
  //fishingrod
  noFill();
  stroke(255,255,255);
  strokeWeight(1);
  arc((float)(195+Math.cos(frameCount*.03-.8)*6),
  (float)(260+Math.sin(frameCount*.03-.8)*6),45,60,0,(float)Math.PI/2); //the line
  stroke(90,71,53);
  strokeWeight(2.5);
  arc((float)(220+Math.cos(frameCount*.03-.8)*6),
  (float)(275+Math.sin(frameCount*.03-.8)*6),30,30,-(float)Math.PI+1.4,0); //the rod
  noStroke();
  
  //fisherman
  fill(123,164,165);
  rect(
  (float)(240+Math.cos(frameCount*.03-.8)*6),
  (float)(275+Math.sin(frameCount*.03-.8)*6),
  9,17,3);
  fill(122,114,95);
  ellipse((float)(240+Math.cos(frameCount*.03-.8)*6),
  (float)(263+Math.sin(frameCount*.03-.8)*6),8,8);
  
  //boxes
  fill(200,200,200);
  rect(
  (float)(282+Math.cos(frameCount*.03-.8)*6),
  (float)(281+Math.sin(frameCount*.03-.8)*6),
  14,10,2);
  rect(
  (float)(268+Math.cos(frameCount*.03-.8)*6),
  (float)(281+Math.sin(frameCount*.03-.8)*6),
  8,15,2);
  
  //hood
  fill(118,106,99);
  rect(
  (float)(280+Math.cos(frameCount*.03-.8)*6),
  (float)(281+Math.sin(frameCount*.03-.8)*6),
  3,32);
  rect(
  (float)(300+Math.cos(frameCount*.03-.8)*6),
  (float)(281+Math.sin(frameCount*.03-.8)*6),
  3,32);
  fill(232,185,98);
  rect(
  (float)(290+Math.cos(frameCount*.03-.8)*6),
  (float)(260+Math.sin(frameCount*.03-.8)*6),
  30,10);
  
  fill(108,96,89);
  //hull
  rect(
  (float)(275+Math.cos(frameCount*.03-.8)*6),
  (float)(286+Math.sin(frameCount*.03-.8)*6),
  60,10);
  
  //bow
  triangle(
  (float)(275+Math.cos(frameCount*.03-.8)*6),
  (float)(286+Math.sin(frameCount*.03-.8)*6),
  (float)(215+Math.cos(frameCount*.03-.8)*6),
  (float)(275+Math.sin(frameCount*.03-.8)*6),
  (float)(245+Math.cos(frameCount*.03-.8)*6),
  (float)(291+Math.sin(frameCount*.03-.8)*6)
  );
  
  
  //waves in front of boat
  rectMode(CORNERS);
  fill(87,153,191);
  //wave 3
  rect(0,(float)(290+Math.sin(frameCount*.03-.8)*6),400,400);
  
  //fish inside wave 2
  fill(255,201,227);
    //fish 1
    quad( //Don't worry, I didn't type this all. I wrote another program to produce this code using variables.
      (mouseX-200)*.7+(6.93*.7),(float)(-Math.abs(Math.sin(mouseX*0.02+30))*70)-(4*.7)+350,
      (mouseX-200)*.7+(2.5*.7) ,(float)(-Math.abs(Math.sin(mouseX*0.02+30))*70)+(4.3*.7)+350,
      (mouseX-200)*.7-(6.9*.7) ,(float)(-Math.abs(Math.sin(mouseX*0.02+30))*70)+(4*.7)+350,
      (mouseX-200)*.7-(2.5*.7) ,(float)(-Math.abs(Math.sin(mouseX*0.02+30))*70)-(4.3*.7)+350
    );
    triangle(
      (mouseX-200)*.7-(12*.7) ,(float)(-Math.abs(Math.sin(mouseX*0.02+30))*70)+4*.7+350,
      (mouseX-200)*.7-(6.9*.7),(float)(-Math.abs(Math.sin(mouseX*0.02+30))*70)+4*.7+350,
      (mouseX-200)*.7-(8.8*.7),(float)(-Math.abs(Math.sin(mouseX*0.02+30))*70)+9*.7+350
    );
    //fish 2
    quad( 
         125+(mouseX-200)*0.7+(6.93*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+25))*76)-(4*0.7)+350, 
         125+(mouseX-200)*0.7+(2.5*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+25))*76)+(4.3*0.7)+350, 
         125+(mouseX-200)*0.7-(6.9*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+25))*76)+(4*0.7)+350, 
         125+(mouseX-200)*0.7-(2.5*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+25))*76)-(4.3*0.7)+350); 
    triangle( 
         125+(mouseX-200)*0.7-(12*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+25))*76)+(4*0.7)+350, 
         125+(mouseX-200)*0.7-(6.9*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+25))*76)+(4*0.7)+350, 
         125+(mouseX-200)*0.7-(8.8*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+25))*76)+(9*0.7)+350);
    //fish 3
    quad( 
         275+(mouseX-200)*0.7+(6.93*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+35))*60)-(4*0.7)+350, 
         275+(mouseX-200)*0.7+(2.5*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+35))*60)+(4.3*0.7)+350, 
         275+(mouseX-200)*0.7-(6.9*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+35))*60)+(4*0.7)+350, 
         275+(mouseX-200)*0.7-(2.5*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+35))*60)-(4.3*0.7)+350); 
    triangle( 
         275+(mouseX-200)*0.7-(12*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+35))*60)+(4*0.7)+350, 
         275+(mouseX-200)*0.7-(6.9*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+35))*60)+(4*0.7)+350, 
         275+(mouseX-200)*0.7-(8.8*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+35))*60)+(9*0.7)+350);
    //fish 4
    quad( 
         370+(mouseX-200)*0.7+(6.93*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)-(4*0.7)+350, 
         370+(mouseX-200)*0.7+(2.5*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(4.3*0.7)+350, 
         370+(mouseX-200)*0.7-(6.9*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(4*0.7)+350, 
         370+(mouseX-200)*0.7-(2.5*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)-(4.3*0.7)+350); 
    triangle( 
         370+(mouseX-200)*0.7-(12*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(4*0.7)+350, 
         370+(mouseX-200)*0.7-(6.9*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(4*0.7)+350, 
         370+(mouseX-200)*0.7-(8.8*0.7),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(9*0.7)+350);
  
  //wave 2
  fill(55,127,158);
  rect(0,(float)(325+Math.sin(frameCount*.03)*12),400,400);
  
  //fish inside wave 1
    fill(255,201,227);
    //fish 1
    quad(200+(mouseX-200)*.8+6.93,(float)(-Math.abs(Math.sin(mouseX*0.02))*80 +400)-4,
    200+(mouseX-200)*.8+2.5,(float)(-Math.abs(Math.sin(mouseX*0.02))*80 +400)+4.3,
    200+(mouseX-200)*.8-6.9,(float)(-Math.abs(Math.sin(mouseX*0.02))*80 +400)+4,
    200+(mouseX-200)*.8-2.5,(float)(-Math.abs(Math.sin(mouseX*0.02))*80 +400)-4.3);
    triangle(200+(mouseX-200)*.8-12,(float)(-Math.abs(Math.sin(mouseX*0.02))*80 +400)+4,
    200+(mouseX-200)*.8-6.9,(float)(-Math.abs(Math.sin(mouseX*0.02))*80 +400)+4,
    200+(mouseX-200)*.8-8.8,(float)(-Math.abs(Math.sin(mouseX*0.02))*80 +400)+9);
    //fish2
    quad(80+(mouseX-200)*.8+6.93,(float)(-Math.abs(Math.sin(mouseX*0.02-40))*100 +400)-4,
    80+(mouseX-200)*.8+2.5,(float)(-Math.abs(Math.sin(mouseX*0.02-40))*100 +400)+4.3,
    80+(mouseX-200)*.8-6.9,(float)(-Math.abs(Math.sin(mouseX*0.02-40))*100 +400)+4,
    80+(mouseX-200)*.8-2.5,(float)(-Math.abs(Math.sin(mouseX*0.02-40))*100 +400)-4.3);
    triangle(80+(mouseX-200)*.8-12,(float)(-Math.abs(Math.sin(mouseX*0.02-40))*100 +400)+4,
    80+(mouseX-200)*.8-6.9,(float)(-Math.abs(Math.sin(mouseX*0.02-40))*100 +400)+4,
    80+(mouseX-200)*.8-8.8,(float)(-Math.abs(Math.sin(mouseX*0.02-40))*100 +400)+9);
    //fish3
    quad(400+(mouseX-200)*.8+6.93,(float)(-Math.abs(Math.sin(mouseX*0.02-60))*70 +400)-4,
    400+(mouseX-200)*.8+2.5,(float)(-Math.abs(Math.sin(mouseX*0.02-60))*70 +400)+4.3,
    400+(mouseX-200)*.8-6.9,(float)(-Math.abs(Math.sin(mouseX*0.02-60))*70 +400)+4,
    400+(mouseX-200)*.8-2.5,(float)(-Math.abs(Math.sin(mouseX*0.02-60))*70 +400)-4.3);
    triangle(400+(mouseX-200)*.8-12,(float)(-Math.abs(Math.sin(mouseX*0.02-60))*70 +400)+4,
    400+(mouseX-200)*.8-6.9,(float)(-Math.abs(Math.sin(mouseX*0.02-60))*70 +400)+4,
    400+(mouseX-200)*.8-8.8,(float)(-Math.abs(Math.sin(mouseX*0.02-60))*70 +400)+9);
    //fish4
    quad(
     -80+(mouseX-200)*0.7+(6.93*1),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)-(4*1)+400, 
     -80+(mouseX-200)*0.7+(2.5*1),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(4.3*1)+400, 
     -80+(mouseX-200)*0.7-(6.9*1),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(4*1)+400, 
     -80+(mouseX-200)*0.7-(2.5*1),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)-(4.3*1)+400); 
    triangle( 
     -80+(mouseX-200)*0.7-(12*1),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(4*1)+400, 
     -80+(mouseX-200)*0.7-(6.9*1),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(4*1)+400, 
     -80+(mouseX-200)*0.7-(8.8*1),(float)(-Math.abs(Math.sin(mouseX*0.02+15))*70)+(9*1)+400);

  //wave 1
  fill(29,96,117);
  rect(0,(float)(375+Math.sin(frameCount*.03+.8)*18),400,400);
}