#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;
}