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