Sneaky Trick #1

Paste the following script into a behaviour, hit play and watch the score come alive:

property myArray, mySize,  myLastCell



on beginSprite me

  me.mCreateArray(40,40)

  me.mRandomStart(mySize[1]*mySize[2]/5)

end 





on exitFrame me

  me.mPlayLife()

  me.mDrawArray(myArray)

  go to the frame

end 



on mCreateArray (me,  aX, aY)

  myArray = []

  mySize = [aX, aY]

  repeat with y = 1 to aY

  myArray[y] = []

  repeat with x = 1 to aX

  myArray[y][x] = 0

  end repeat

  end repeat

end 



on mRandomStart (me,  numCells)

  repeat with cell = 1 to numcells

  y = random(mySize[2])

  x = random(mySize[1])

  myArray[y][x] = NOT(myArray[y][x])

  end repeat

end 



on mPlayLife me

  newState = myArray.duplicate()

  repeat with y = 1 to mySize[2]

  repeat with x = 1 to mySize[1]

  c = me.mGetNeighborCount(x,y)

  if c = 2 then

  -- no change

  else if c = 3 then

  newState[x][y] = 1

  else

  newState[x][y] = 0

  end if

  

  end repeat

  end repeat

  myArray = newState

end 



on mGetNeighborCount me, x, y

  mx = mySize[1]

  case(x) of

  1: Nx = [mx, x, x+1]

  mx: Nx = [x-1, x, 1]

  otherwise

  Nx = [x-1, x, x+1]

  end case

  my = mySize[2]

  case(y) of

  1: Ny = [my, y, y+1]

  my: Ny = [y-1, y, 1]

  otherwise

  Ny = [y-1, y, y+1]

  end case

  ---

  tally = myArray[Nx[1]][Ny[1]] + myArray[Nx[1]][Ny[2]] + myArray[Nx[1]][Ny[3]]

  tally = tally + myArray[Nx[2]][Ny[1]] + myArray[Nx[2]][Ny[3]]

  tally = tally + myArray[Nx[3]][Ny[1]] + myArray[Nx[3]][Ny[2]] + myArray[Nx[3]][Ny[3]]

  return tally

end 



on mDrawArray(me,  array)

  scoreSeln = []

  repeat with y = 1 to array.count

  row = array[y]

  repeat with x = 1 to row.count

  if row[x] then scoreSeln.append([y,y,x,x])

  end repeat

  end repeat

  the scoreSelection = scoreSeln

end
First published 15/06/2005