dx,dy= self delX, self delY.
dx2,dy2= dx idiv: 2, dy idiv: 2.
rx,ry= dx2 - 1, dy2 - 1.
pop = popR = popB = 0.
nextState =
FOR{x: self numX}
MAP{
xx = x * dx + dx2.
FOR{y: self numY}
MAP{
yy = y * dy + dy2.
colored = 0.
FOR(i: 3)DO{
i = i - 1 + x.
FOR(j: 3)DO{
j = j - 1 + y.
colored = colored + ((self state at: i) at: j).
}.
}.
"Notice cell x,y can count as a colored".
"Simple neighbor count (no color)".
bw = colored % 10.
old= (self state at: x) at: y.
z= IF{old}
THEN{ OR{bw == 3; bw == 4;} }
ELSE{ bw == 2 }.
IF{old} THEN{
rc = (old idiv: 10) % 10.
bc = (old idiv: 100) % 10.
} ELSE{
"Red & Blue counts".
rc = (colored idiv: 10) % 10.
bc = (colored idiv: 100) % 10.
}.
z= COND{
z == 0 , (clr = self black. 0);
rc > bc, (pop=pop+1. popR=popR+1. clr = self red. 11);
rc < bc, (pop=pop+1. popB=popB+1. clr = self blue. 101);
1 , (pop=pop+1. clr = self white. 1);
}.
clr rect: (xx - rx, yy - ry) to: (xx + rx, yy + ry).
z.
}. "next y"
}. "next x"
'FINISHED lifeStep' say: (pop, popR, popB).
self state: nextState. |