/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://p5js.sketchpad.cc/sp/pad/view/ro.0k1EN5wcEfO/rev.19
*
* authors:
* [Sketchpad]
* GoToLoop
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
/**
* CellGrid (v6.2)
* by GoToLoop (2015/Jul/09)
*
* forum.Processing.org/two/discussion/11605/100x100-grid-draw-at-2-fps
* studio.ProcessingTogether.com/sp/pad/export/ro.9KbaSot4iSjhZ
* p5js.ProcessingTogether.com/sp/pad/export/ro.Cf6RWyw2ANSO4h
*/
const W = 640, H = 480, FPS = 30,
COLS = 100, ROWS = 80, DIM = COLS*ROWS,
WIDE = W/COLS, TALL = H/ROWS,
WIDE_ADJ = WIDE + .5, TALL_ADJ = TALL + .5,
RESHUFFLE = true, // change it to false to stop auto-reshuffle.
cells = Array(DIM);
var on, off;
function setup() {
createCanvas(W, H);
noSmooth().noStroke().rectMode(CORNER).frameRate(FPS);
on = Object.freeze(color(255)), off = Object.freeze(color(0));
fill(on);
createCells();
}
function draw() {
RESHUFFLE && randomCells();
print(frameRate());
background(off);
for (var idx = 0; idx != DIM; cells[idx++].display());
}
function mousePressed() {
RESHUFFLE || randomCells();
}
function randomCells() {
for (var idx = 0; idx != DIM; cells[idx++].isOn = random(1) < .5);
}
function createCells() {
for (var x, y, idx = 0; idx != DIM; ++idx) {
x = idx%COLS * WIDE, y = (idx/COLS | 0) * TALL;
cells[idx] = new Cell(x, y);
}
Object.freeze(cells);
RESHUFFLE || randomCells();
}
function Cell(x, y) {
this.isOn = false, this.x = round(x), this.y = round(y);
Object.seal(this);
}
Cell.prototype.display = function () {
this.isOn && rect(this.x, this.y, WIDE_ADJ, TALL_ADJ);
}
Object.freeze(Object.freeze(Cell).prototype);