> show canvas only <


/* built with Studio Sketchpad: 
 *   https://sketchpad.cc
 * 
 * observe the evolution of this sketch: 
 *   https://studio.sketchpad.cc/sp/pad/view/ro.mF$Lg7euJ1Z/rev.214
 * 
 * authors: 
 *   Sharnisha

 * license (unless otherwise specified): 
 *   creative commons attribution-share alike 3.0 license.
 *   https://creativecommons.org/licenses/by-sa/3.0/ 
 */ 



float headX;
 
float headY;
 
float speedX = 0.8;
 
float speedY = 0.8;
 
 
 
// for puff body
 
int cells = 500;
 
float[]px= new float[cells];
 
float[]py= new float[cells];
 
float[]radiiX = new float[cells];
 
float[]radiiY = new float[cells];
 
float[]angle = new float[cells];
 
float[]frequency = new float[cells];
 
float[]cellRadius = new float[cells];
 
// for puff number 2
float[]px2= new float[cells];
 
float[]py2= new float[cells];
 
float[]radiiX2 = new float[cells];
 
float[]radiiY2 = new float[cells];
 
float[]angle2 = new float[cells];
 
float[]frequency2 = new float[cells];
 
float[]cellRadius2 = new float[cells];
 
PImage bg;
 
void setup(){
 
  size(850, 458);
  
  bg = loadImage("static/uploaded_resources/p.13725/map3.png");
 
  headX = width/4;
 
  headY = height/4;
 
 
 
  //fill body arrays
 
  for (int i=0; i< cells; i++){
 
    radiiX[i] = random(-7, 7); 
 
    radiiY[i] = random(-4, 4);
 
    frequency[i]= random(-9, 9);
 
    cellRadius[i] = random(30, 70);
 
  }
  
  for (int i=0; i< cells; i++){
 
    radiiX2[i] = random(-3, 3); 
 
    radiiY2[i] = random(-5, 5);
 
    frequency2[i]= random(-7, 7);
 
    cellRadius2[i] = random(30, 50);
 
  }
 
  frameRate(5);
 
}
 
 
 
void draw(){
 
  noStroke();
 
background(bg);
 
  //follow the leader
 
  for (int i =0; i< cells-1; i++){
 
  fill(random(130,140),random(202,208),random(245,255),5);
    if (i==0){
 
      px[i] = headX+sin(radians(angle[i]))*radiiX[i];
 
      py[i] = headY+cos(radians(angle[i]))*radiiY[i];
 
    } 
 
    else{
 
      px[i] = px[i-1]+cos(radians(angle[i]))*radiiX[i];
 
      py[i] = py[i-1]+sin(radians(angle[i]))*radiiY[i];
 
 
 
      //check collision of body
 
      if (px[i] >= width-cellRadius[i]/2 || px[i] <= cellRadius[i]/2){
 
        radiiX[i]*=-1;
 
        cellRadius[i] = random(30, 70);
 
        frequency[i]= random(-13, 13);
 
      }
 
      if (py[i] >= height-cellRadius[i]/2 || py[i] <= cellRadius[i]/2){
 
        radiiY[i]*=-1;
 
        cellRadius[i] = random(30, 70);
 
        frequency[i]= random(-9, 9);
 
      }
 
    }
    px[cells-1] = px[1];
 
      py[cells-1] = py[1];
    // draw puff
 
    ellipse(px[i],  py[i],  cellRadius[i],  cellRadius[i]);
 
    // set speed of body
 
    angle[i]+=frequency[i];
 
  }
 
 
////////////////////2nd/////////////////////
 
for (int i =0; i< cells-1; i++){
 
  fill(random(250,255),random(100,108),random(175,185),5);
    if (i==0){
 
      px2[i] = headX/2 +cos(radians(angle[i]))*radiiX2[i];
 
      py2[i] = headY/2 +sin(radians(angle[i]))*radiiY2[i];
 
    } 
 
    else{
 
      px2[i] = px2[i-1]+sin(radians(angle[i]))*radiiX2[i];
 
      py2[i] = py2[i-1]+cos(radians(angle[i]))*radiiY2[i];
 
 
 
      //check collision of body
 
      if (px2[i] >= width-cellRadius2[i]/2 || px2[i] <= cellRadius2[i]/2){
 
        radiiX2[i]*=-1;
 
        cellRadius2[i] = random(30, 50);
 
        frequency2[i]= random(-11, 11);
 
      }
 
      if (py2[i] >= height-cellRadius2[i]/2 || py2[i] <= cellRadius2[i]/2){
 
        radiiY2[i]*=-1;
 
        cellRadius2[i] = random(30, 50);
 
        frequency2[i]= random(-7, 7);
 
      }
 
    }
    px2[cells-1] = px2[1];
 
      py2[cells-1] = py2[1];
    // draw puff
 
    ellipse(px2[i],  py2[i],  cellRadius2[i],  cellRadius2[i]);
 
    // set speed of body
 
    angle2[i]+=frequency2[i];
 
  }
 
//////////////////end of 2nd/////////////////

////////////////////3 rd /////////////////////
 
for (int i =0; i< cells-1; i++){

  fill(random(150,155),random(48,53),random(200,207),5);
    if (i==0){
 
      px2[i] = headX/2 +cos(radians(angle[i]))*radiiX2[i];
 
      py2[i] = headY/2 +sin(radians(angle[i]))*radiiY2[i];
 
    } 
 
    else{
 
      px2[i] = px2[i-1]+sin(radians(angle[i]))*radiiX2[i];
 
      py2[i] = py2[i-1]+cos(radians(angle[i]))*radiiY2[i];
 
 
 
      //check collision of body
 
      if (px2[i] >= width-cellRadius2[i]/2 || px2[i] <= cellRadius2[i]/2){
 
        radiiX2[i]*=-1;
 
        cellRadius2[i] = random(40, 75);
 
        frequency2[i]= random(-5, 5);
 
      }
 
      if (py2[i] >= height-cellRadius2[i]/2 || py2[i] <= cellRadius2[i]/2){
 
        radiiY2[i]*=-1;
 
        cellRadius2[i] = random(40, 75);
 
        frequency2[i]= random(-5, 5);
 
      }
 
    }
    px2[cells-1] = px2[1];
 
      py2[cells-1] = py2[1];
    // draw puff
 
    ellipse(px2[i],  py2[i],  cellRadius2[i],  cellRadius2[i]);
 
    // set speed of body
 
    angle2[i]+=frequency2[i];
 
  }
 
//////////////////end of 3/////////////////

///////////////////4 th/////////////////////
 
for (int i =0; i< cells-1; i++){
                            
  fill(random(132,132),random(112,112),random(255,255),5);
    if (i==0){
 
      px[i] = headX +sin(radians(angle[i]))*radiiX[i];
 
      py[i] = headY +cos(radians(angle[i]))*radiiY[i];
 
    } 
 
    else{
 
      px[i] = px[i-1]+cos(radians(angle[i]))*radiiX[i];
 
      py[i] = py[i-1]+sin(radians(angle[i]))*radiiY[i];
 
 
 
      //check collision of body
 
      if (px[i] >= width-cellRadius[i]/2 || px[i] <= cellRadius[i]/2){
 
        radiiX[i]*=-1;
 
        cellRadius[i] = random(20, 30);
 
        frequency[i]= random(-11, 11);
 
      }
 
      if (py[i] >= height-cellRadius[i]/2 || py[i] <= cellRadius[i]/2){
 
        radiiY[i]*=-1;
 
        cellRadius[i] = random(20, 30);
 
        frequency[i]= random(-7, 7);
 
      }
 
    }
    px[cells-1] = px[1];
 
      py[cells-1] = py[1];
    // draw puff
 
    ellipse(px[i],  py[i],  cellRadius[i]*0.75,  cellRadius[i]*0.75);
 
    // set speed of body
 
    angle[i]+=frequency[i];
 
  }
 
//////////////////end of 4/////////////////

  // set velocity of head
 
  headX+=speedX;
 
  headY+=speedY;
 
 
 
  //check boundary collision of head
 
  if (headX >= width-cellRadius[0]/2 || headX <=cellRadius[0]/2){
 
    speedX*=-1;
 
  }
 
  if (headY >= height-cellRadius[0]/2 || headY <= cellRadius[0]/2){
 
    speedY*=-1;
 
  }
 
}