La crescita si ferma quando l’aggregato raggiunge il bordo superiore.
- Mouse (tasto): ricomincia
- Applicazione Java
final float diametro=3; final float xx=0.5; final color cFondo=color(255); final float cMin=0, cMax=200; int Xmin, Ymin, Xmax, Ymax, X2, Y2, Xa, Ya; color cPianta, c; float rosso, verde, blu; boolean rossoUP, bluUP; void setup() { size(500, 500); smooth(); strokeWeight(4); // valori definitivi X2=width/2; Xmin=0; Ymin=0; Xmax=width-1; Ymax=height-1; inizia(); } void mousePressed() { inizia(); } void inizia() { background(cFondo); rosso=random(cMin, cMax); verde=125; blu=random(cMin, cMax); switch((int)random(4)) { case 0: bluUP=false; rossoUP=false; break; case 1: bluUP=false; rossoUP=true; break; case 2: bluUP=true; rossoUP=false; break; case 3: bluUP=true; rossoUP=true; break; } nuovoColore(); ellipse(X2, Ymax, 5*diametro, diametro); loop(); } void draw() { nuovoColore(); daCapo(); do { switch((int)random(5)) { case 0: Xa--; if(Xa < Xmin) daCapo(); break; case 1: Xa++; if(Xa > Xmax) daCapo(); break; case 2: Ya--; if(Ya < Ymin) daCapo(); break; case 3: case 4: Ya++; if(Ya > Ymax) daCapo(); break; } c=get(Xa, Ya); } while(c == cFondo); ellipse(Xa, Ya, diametro, diametro); if(Xa <= Xmin || Xa >= Xmax || Ya <= Ymin) noLoop(); } void daCapo() { Xa=(int)random(Xmin, Xmax+1); Ya=Ymin; } void nuovoColore() { switch((int)random(2)) { case 0: if(rossoUP) { rosso+=xx; if(rosso >= cMax) rossoUP=false; } else { rosso-=xx; if(rosso <= 0) rossoUP=true; } break; case 1: if( bluUP) { blu+=xx; if( blu >= cMax) bluUP=false; } else { blu-=xx; if( blu <= 0) bluUP=true; } break; } cPianta=color(rosso, verde, blu); stroke(cPianta, 50); fill(cPianta); }