Blob Blame Raw

#include <helianthus.h>

#define SIZE 5
#define LAMPSIZE 100


int lamps[SIZE][SIZE];


void toggle(int i, int j) {
  if (i < 0 || j < 0 || i >= SIZE || j >= SIZE) return;
  if (i > 0     ) lamps[i-1][j] = !lamps[i-1][j];
  if (i < SIZE-1) lamps[i+1][j] = !lamps[i+1][j];
  if (j > 0     ) lamps[i][j-1] = !lamps[i][j-1];
  if (j < SIZE-1) lamps[i][j+1] = !lamps[i][j+1];
  lamps[i][j] = !lamps[i][j];
}


void toggleRandom() {
  toggle(randomNumber(0, SIZE-1), randomNumber(0, SIZE-1));
}


void init() {
  background(colorByName("black"));
  for(int i = 0; i < SIZE*SIZE; ++i)
    toggleRandom();
}


void draw() {
  saveState();
  zoom(LAMPSIZE);

  strokeWidth(0.1);
  stroke( colorByRGB(0.25, 0.25, 0.25) );
  for(int i = 0; i < SIZE; ++i) {
    for(int j = 0; j < SIZE; ++j) {
      fill(colorByName( lamps[i][j] ? "yellow" : "black" ));
      ellipse(j + 0.2, i + 0.2, 0.6, 0.6);
    }
  }

  if (mouseWentDown("left"))
    toggle((int)mouseTransformedY(), (int)mouseTransformedX());
  if (keyWentDown("space"))
    toggleRandom();

  restoreState();
}


int main() {
  windowSetTitle("Lamps");
  windowSetSize(SIZE*LAMPSIZE, SIZE*LAMPSIZE);
  windowSetVariableFrameRate();
  windowSetInit(&init);
  windowSetDraw(&draw);
  windowRun();
  return 0;
}