boolean chase; float midX, midY; int i; final static int SIZE=300; final static int HOWMANY=20; final static int DARK = 32; final static int LIGHT = 222; int bg = DARK; fairysnake fs[] = new fairysnake[HOWMANY]; void setup(){ size(300,300); //SIZE midX = SIZE/2; midY = SIZE / 2; for(int i = 1; i < HOWMANY; i++){ fs[i] = new fairysnake(i,random(SIZE/6, SIZE*5/6),random(SIZE/6, SIZE*5/6),i - 1);//(int)random(HOWMANY) } fs[0] = new fairysnake(-1,random(SIZE/6, SIZE*5/6),random(SIZE/6, SIZE*5/6),HOWMANY-1); } void loop(){ background(64); for(int i = 0; i < HOWMANY; i++){ fs[i].move(); fs[i].show(); } } void mousePressed(){ midX = mouseX; midY = mouseY; chase = true; } void mouseReleased(){ chase = false; } void mouseDragged(){ if(mousePressed) { midX = mouseX; midY = mouseY; } } class fairysnake { final static int SEGCOUNT = 30; final static float SPEEDVAL = .3; float x[] = new float[SEGCOUNT]; float y[] = new float[SEGCOUNT]; float xspeed, yspeed; float mR,mG,mB; public float getPointX(){ return x[SEGCOUNT-1]; } public float getPointY(){ return y[SEGCOUNT-1]; } int loverid; int id; fairysnake(int inid, float inx, float iny, int inloverid){ id = inid; loverid = inloverid; for(int i = 0; i < SEGCOUNT; i++){ x[i] = inx; y[i] = iny; mR = random(128,255); mG = random(128,255); mB = random(128,255); } } void move(){ for(i = SEGCOUNT - 1; i >= 1; i--){ x[i] = x[i-1]; y[i] = y[i-1]; } // xspeed += random(-SPEEDVAL,SPEEDVAL); // yspeed += random(-SPEEDVAL,SPEEDVAL); if(x[0] < midX){ xspeed += SPEEDVAL; } else{ xspeed -= SPEEDVAL; } if(y[0] < midY){ yspeed += SPEEDVAL; } else{ yspeed -= SPEEDVAL; } if(! chase){ if(x[0] < fs[loverid].getPointX()){ xspeed += SPEEDVAL; } else{ xspeed -= SPEEDVAL; } if(y[0] < fs[loverid].getPointY()){ yspeed += SPEEDVAL; } else{ yspeed -= SPEEDVAL; } } x[0] += xspeed; y[0] += yspeed; if(x[0] < 0){ x[0] = 0; xspeed *= -.5; } if(y[0] < 0){ y[0] = 0; yspeed *= -.5; } if(x[0] > SIZE-1){ x[0] = SIZE-1; xspeed *= -.5; } if(y[0] > SIZE-1){ y[0] = SIZE-1; yspeed *= -.5; } } void show(){ for(i = 0; i < SEGCOUNT - 1; i++){ //stroke(255 - (i * (255/SEGCOUNT))); strokeWeight(SEGCOUNT - i); //not stroke( mR - (i * (mR/SEGCOUNT)), mG - (i * (mG/SEGCOUNT)), mB - (i * (mB/SEGCOUNT)) ); // println(i+"::"+x[i] +"," + y[i]+"---" + x[i+1] +"," + y[i+1]); line(x[i],y[i],x[i+1],y[i+1]); } // println("----"); } }