float x,y,dir,speed; float dirD,speedD; int state,stateCnt; int SPEEDUP=0,STOP=1,TURNING=2; void setup() { size(300,300); x=width/2; y=height/2; dir=random(360); speed=0; rectMode(CENTER_DIAMETER); state=STOP; stateCnt=30; framerate(30); } void loop() { // background(200); stateCnt--; if(stateCnt==0) { dirD=0; speedD=0; if(state==STOP) { state=SPEEDUP; stateCnt=(int)random(50,100); speedD=random(2,5); speedD=(speedD-speed)/(float)stateCnt; dirD=random(-2,2); } else if(state==SPEEDUP) { if(random(100)>50) { state=TURNING; } else { state=STOP; speed=0; } stateCnt=(int)random(20,40); } else if(state==TURNING) { state=STOP; speed=0; stateCnt=(int)random(20,40); } } if(state==TURNING) { dirD+=random(-1,1); if(dirD>6) dirD=6; else if(dirD<-6) dirD=-6; } dir+=dirD; speed+=speedD; float mult=mouseX; mult=mult/(float)width; mult*=2+0.1; // mult=mult*2; x+=cos(radians(dir))*speed*mult; y+=sin(radians(dir))*speed*mult; rect(x,y, 10,10); rect(width-x,height-y, 10,10); if(x<0) x=width; else if(x>width) x=0; if(y<0) y=height; else if(y>height) y=0; }