let snipe
let feathers
function preload() {
feathers = loadImage('/assets/feathers.png');
snipe = loadImage('/assets/snipecropped.png')
}
let rules = 0;
let cnt = 0,
n = 256;
let dArray = [];
function setup() {
c=min(windowWidth,windowHeight)*0.9
createCanvas(c,c);
r = 125;
co = floor(width / (r));
ro = floor(height / (r));
rectMode(CENTER)
randomDead();
frameRate(10);
background(255);
}
function draw() {
scale(0.9, 0.8)
translate(0, 10)
background(255)
noStroke();
cnt = 0;
for (let j = 0; j <= co; j++) {
for (let i = ro; i >= 0; i--) {
x = r * j;
y = r * i;
if (dArray[cnt] === 0) {
image(feathers, x, y, r, r)
}
if (dArray[cnt] === 1) {
image(snipe, x, y, r, r)
}
cnt = cnt + 1
}
}
if (rules === 10) {
background(255)
g = min(width, height)
image(snipe, 0, 0, g, g)
}
if (rules === 11) {
background(255)
g = min(width, height)
image(feathers, 0, 0, g, g)
}
switchDead()
}
function randomDead() {
n = (co + 1) * (ro + 1);
dArray = []
for (let i = 0; i < n; i++) {
tmp = random(-1, 1);
if (tmp <= 0) {
dArray[i] = 1;
}
if (tmp > 0) {
dArray[i] = 0;
}
}
}
function switchDead() {
cnt1 = 0
for (let j = 0; j <= co; j++) {
for (let i = ro; i >= 0; i--) {
if (j != 0 && i != 0 && i != ro && j != co) {
sumd = dArray[cnt1 + 1] + dArray[cnt1 - 1] + dArray[cnt1 + ro] + dArray[cnt1 + ro + 1] + dArray[cnt1 + ro + 2] + dArray[cnt1 - ro - 1] + dArray[cnt1 - ro] + dArray[cnt1 - ro - 2];
}
if (i === 0 && j != 0 && j != co) {
sumd = dArray[cnt1 + ro + 1] + dArray[cnt1 + ro] + dArray[cnt1 - ro - 1] + dArray[cnt1 - ro - 2] + dArray[cnt1 - 1];
}
if (i === ro && j != 0 && j != co) {
sumd = dArray[cnt1 + ro + 1] + dArray[cnt1 + ro + 2] + dArray[cnt1 - ro - 1] + dArray[cnt1 - ro] + dArray[cnt1 + 1];
}
if (j === co && i != 0 && i != ro) {
sumd = dArray[cnt1 + 1] + dArray[cnt1 - 1] + dArray[cnt1 - ro - 1] + dArray[cnt1 - ro] + dArray[cnt1 - ro - 2];
}
if (j === 0 && i != 0 && i != ro) {
sumd = dArray[cnt1 + 1] + dArray[cnt1 - 1] + dArray[cnt1 + ro] + dArray[cnt1 + ro + 1] + dArray[cnt1 + ro + 2];
}
if (i === 0 && j === 0) {
sumd = dArray[cnt1 - 1] + dArray[cnt1 + ro] + dArray[cnt1 + ro + 1];
}
if (i === 0 && j === co) {
sumd = dArray[cnt1 - 1] + dArray[cnt1 -ro - 1] + dArray[cnt1 - ro - 2]
}
if (i === ro && j === 0) {
sumd = dArray[cnt1 + 1] + dArray[cnt1 + ro + 1] + dArray[cnt1 + ro + 2];
}
if (i === ro && j === co) {
sumd = dArray[cnt1 + 1] + dArray[cnt1 - ro - 1] + dArray[cnt1 - ro];
}
if (rules === 0) {
if (dArray[cnt1] === 1 && (sumd === 8 || sumd === 7 || sumd === 6 || sumd === 5 || sumd === 4 || sumd === 1 || sumd === 0)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 3)) {
dArray[cnt1] = 1;
}
}
if (rules === 1) {
if (dArray[cnt1] === 1 && (sumd <= 1 || sumd > 5)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 3 || sumd === 4 || sumd === 5)) {
dArray[cnt1] = 1;
}
}
if (rules === 2) {
if (dArray[cnt1] === 1 && (sumd > 5)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 2)) {
dArray[cnt1] = 1;
}
}
if (rules === 3) {
if (dArray[cnt1] === 1 && (sumd < 3)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 1 || sumd === 2)) {
dArray[cnt1] = 1;
}
}
if (rules === 4) {
if (dArray[cnt1] === 1 && (sumd === 8 || sumd === 0 || sumd === 1 || sumd === 7)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 0 || sumd === 1 || sumd === 2)) {
dArray[cnt1] = 1;
}
}
if (rules === 5) {
if (dArray[cnt1] === 1 && (sumd === 0 || sumd === 1 || sumd === 6 || sumd === 7 || sumd === 8)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 0 || sumd === 1 || sumd === 2)) {
dArray[cnt1] = 1;
}
}
if (rules === 6) {
if (dArray[cnt1] === 1 && (sumd === 0 || sumd === 2 || sumd === 4 || sumd === 6 || sumd === 8)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 0)) {
dArray[cnt1] = 1;
}
}
if (rules === 7) {
if (dArray[cnt1] === 1 && (sumd === 8 || sumd === 5 || sumd === 1 || sumd === 0)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd < 3)) {
dArray[cnt1] = 1;
}
}
if (rules === 8) {
if (dArray[cnt1] === 1 && (sumd === 8 || sumd === 0)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 0)) {
dArray[cnt1] = 1;
}
}
if (rules === 9) {
if (dArray[cnt1] === 1 && (sumd === 3)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 0)) {
dArray[cnt1] = 1;
}
}
if(cnt===0){
print(sumd)
}
cnt1 = cnt1 + 1
}
}
stroke(255);
fill(0)
push()
scale(1, 1)
for (let i = 0; i <= 11; i++) {
circle(width+10 , 30 * i + 40, 10)
}
fill(199, 158, 70)
circle(width+10 , 30 * rules + 40, 10)
pop()
}
function mousePressed() {
randomDead();
}
function keyPressed() {
if (keyCode === 32 || keyCode === 40) {
rules = rules + 1;
if (rules > 11) {
rules = 0;
}
randomDead();
}
if (keyCode === 38) {
rules = rules - 1;
if (rules < 0) {
rules = 11;
}
randomDead();
}
}