internet-of-buckets
Version:
http wrapper for controlling /The Internet of Buckets/ art installation
68 lines (54 loc) • 1.19 kB
JavaScript
var set = require('../iob')
// set(0, 0, [255, 0, 255])
function makeWorld () {
return new Array(5).fill(0).map(function () {
return new Array(10).fill(0)
})
}
function rand () {
return Math.floor(Math.random() * 255)
}
var c1 = [rand(), rand(), rand()]
var c2 = [rand(), rand(), rand()]
var world = makeWorld()
for (var i=0; i < 10; i++) {
for (var j=0; j < 5; j++) {
world[j][i] = Math.random() > 0.8
}
}
function render (world) {
for (var i=0; i < 10; i++) {
for (var j=0; j < 5; j++) {
set(i, j, world[j][i] ? c1 : c2)
}
}
}
function neighbours (world, x, y) {
var n = 0
for (var i=-1; i <= 1; i++) {
for (var j=-1; j <= 1; j++) {
if (i !== 0 && j !== 0) continue
var xx = x + i
var yy = y + j
xx = Math.abs(xx) % 10
yy = Math.abs(yy) % 5
n += world[yy][xx] ? 1 : 0
}
}
return n
}
function step (world) {
var next = makeWorld()
for (var i=0; i < 10; i++) {
for (var j=0; j < 5; j++) {
var n = neighbours(world, i, j)
next[j][i] = (n === 2 || n === 3)
}
}
return next
}
setInterval(function () {
render(world)
world = step(world)
}, 500)
// var world =