PROCESSING CODE:                                                //: Bubbles!

void setup() {
int s = 500;
size(s, s);
float c = random(0, 255);
background(255-c, c-10, c+10);
frameRate(2.5);
}

void draw () {
float a = random(0, 255);
fill(255-a, a/10, a*2);
stroke(a/20, a*2, 255-a);
strokeWeight(width/200);
int s = 250;

///body
beginShape();
curveVertex(s, 400);
curveVertex(100, s+100);
curveVertex(s+100, 237);
curveVertex(455, 249);
curveVertex(345, s+50);
curveVertex(102, s+100);
curveVertex(s/5, 370);
endShape();

//fin
fill(a-50, a/5, 255-a);
stroke(a, a*2, 255-a);
strokeWeight(width/200);

triangle(273, 263, 327, s-5, s-5, 185);
triangle(325, 305, 380, 318, 365, 293);
triangle(s-50, s+30, s+30, s+40, 320, s+30);
triangle(170, 350, 190, 325, s-20, 320);
triangle(218, 328, 230, 335, 235, 325);
triangle(70, 290, 105, 345, 140, 320);
triangle(105, 349, 115, 400, 135, 344);

//eye
fill(0, 0, 0);
ellipse(width-100, width/2, width/100, width/100);
line(390, s-7, 405, s-5);

//mouth
noFill();
arc(410, 267, 40, s/25, PI+QUARTER_PI, TWO_PI);
arc(350, 264, s/25, 20, HALF_PI, PI);
arc(345, 264, s/25, 20, HALF_PI, PI);
arc(340, 265, s/25, 20, HALF_PI, PI);

//bubbles
float x = random(100, 400);
float y = random(50, 200);

ellipse(470, 230, width/100, width/100);
ellipse(450, 200, width/50, width/50);
ellipse(410, 170, width/25, width/25);
ellipse(x, y, width/10, width/10);
arc(x, y, s/25, 20, 0, HALF_PI);
translate(random(-2, 2), random(-20, 20));
}