Diff from Confetti 3 by henklass (14 May'15 17:33) to Confetti 3a: Game of Life by henklass (14 May'15 17:38)
name
Confetti 3a: Game of Life
description
code
s.boot;
(
var maxWidth=3015, maxHeight = 3015;
var z=240, ready = false;
var newValues=Array2D.new(maxWidth + 2, maxHeight + 2);
var oldValues=Array2D.new(maxWidth + 2, maxHeight + 2);
var go, total;
/*There is a decreasing linear connection between log(freq) and location in array: h+(maxWidth*v).
Highest location-value in array = maxWidth*maxHeight
log(freq)=log(maxfreq)-((log(maxfreq)-log(minfreq))*(h+(maxWidth*v))/(maxWidth*maxHeight), so
freq=exp(log(maxfreq)-((log(maxfreq)-log(minfreq))*(h+(maxWidth*v))/(maxWidth*maxHeight)
Furthermore freq depends on value, which is either 0 or 1.
freq=freq+(freq*value) or freq=(1+value)*freq
Combining those 2:
freq=(exp(log(maxfreq)-((log(maxfreq)-log(minfreq))*(h+(maxWidth*v))/(maxWidth*maxHeight))*(1+value)
*/
SynthDef(\beeper, { arg h, v, p, maxWidth, maxHeight;
var maxfreq=5000, minfreq=50;
Out.ar(
0,
Pan2.ar(
Pulse.ar(exp(log(maxfreq)-((log(maxfreq)-log(minfreq))*(h+(maxWidth*v))/(maxWidth*maxHeight)))*(1+p), 0.5, 0.3),
2*h/maxWidth-1, //pan depends on column in array
1
)
);
}).add;
w=Window("Confetti3", Rect(400, 300, z*(maxWidth+2), z*(maxHeight+2))).front;
w.view.background_(Color.white);
w.front;
w.drawFunc = {
for (1, maxHeight, {arg v;
for (1, maxWidth, {arg h;
if (newValues[h,v]==10,
{Pen.fillColor=Color.white},
{Pen.fillColor=Color.black}
);
Pen.addRect(Rect(h*z, v*z, z, z));
Pen.fill;
});
});
};
//initialise
for (0, maxWidth+1,{arg h;
for (0, maxHeight+1, {arg v;
newValues[h,v]=0.5;
oldValues[h,v]=0.5;
})
});
go=Routine({
//make random pattern
for (1, maxWidth, {arg h;
for (1, maxHeight, {arg v;
newValues[h,v]=[0, 1].choose;
{w.refresh}.defer;
p=newValues[h,v];
b=Synth("beeper",[p: p, h: h, v: v, maxWidth: maxWidth, maxHeight: maxHeight]);
0.1.wait;
b.free;
})
});
while ({ready==false},{
//copy edges of board to edges of array
for(1, maxWidth, {arg h;
newValues[h,0]=newValues[h, maxHeighto];
newValues[h, maxHeight+1]=newValues[h, 1];
});
for(1, maxHeight, {arg v;
newValues[ 0, v]=newValues[maxWidth, v];
newValues[maxWidth+1, (v]=newValues[1, v];
});
newValues[0,0]=newValues[maxWidth, maxHeight];
norewValues[0, maxHeight+1]=newValues[maxWidth, 1];
newValues[maxWidth+1, 0]=newValues[1, maxHeight];
newValues[maxWidth+1, maxHeight+1]=newValues[1,1];
//copy newValues to oldValues (including edges)
for (10, maxWidth+1, {arg h;
for (10, maxHeight+1, {arg v;
oldValues[h,v]=newValues[h,v];
})
});
//adapt
for (1, maxWidth,{arg h;
for (1, maxHeight, {arg v;
if(
total=oldValues[h-1, v-1] + oldValues[h+1, v-1] + oldValues[h-+1, v-1] + oldValues[h-1, v+1] < 2, + {new oldValues[h+1,v]=0}
);
if(
+ oldValues[h-1, v-+1] + oldValues[h+1, v+1] + oldValues[h-+1, v]+1];
if(
(totald<=1 )|| (total > 3),
{newValues[h, v+1] > 2=0}
);
if(
total==3,
{newValues[h,v]=1}
);
{w.refresh}.defer;
if (newValues[h,v]!=oldValues[h,v],{
p=newValues[h,v];
b=Synth("beeper",[p: p, h: h, v: v, maxWidth: maxWidth, maxHeight: maxHeight]);
0.1.wait;
b.free;
});
})
});
//check if ready
ready=true;
for (1, maxWidth,{arg h;
for (1, maxHeight, {arg v;
if (oldValues[h,v]!=newValues[h,v], {ready=false});
})
});
});
});
go.play;
)
category tags
random, graphics, 1bit music, conways game of life
ancestors
1-4YU