diff --git a/lamps.c b/lamps.c new file mode 100644 index 0000000..350cdeb --- /dev/null +++ b/lamps.c @@ -0,0 +1,64 @@ + +#include + +#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)transformedMouseY(), (int)transformedMouseX()); + if (keyWentDown("space")) + toggleRandom(); + + restoreState(); +} + + +int main() { + worldSetTitle("Lamps"); + worldSetSize(SIZE*LAMPSIZE, SIZE*LAMPSIZE); + worldSetVariableFrameRate(); + worldSetInit(&init); + worldSetDraw(&draw); + worldRun(); + return 0; +} +