/* 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;
}
}