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);
}