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
ConfIt is relattively 3simple to converts randComnfetti3 pa( htternp://s ccof blde.ocksrg/1-4YU )to mJorehn Cor lenway'ss structurGamed of Limagfes. Every blYocku willjust aneedapt to tche predominantge color in itshe surroules andings, tmakinge its upper, lower, lefthat andy cright neighboature into haccount. Sorund, corresponding tof the lbocard retiourns onat the boather sid,e. It maky bes fora sgomeod indea to speresd things meloda biest up. This program can easily be aconhieverted toby Johusing Cothe Xenway'kis Gam-inspired of Lifversion: http://sccode.org/1-4YVW .
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