let rules=0 ;
let cnt=0,n=256;
let dArray=[];
function setup(){
createCanvas(600,600);
r=10;
co=floor(width/(2*r));
ro=floor(height/(2*r));
randomDead();
frameRate(10);
background(0);
}
function draw(){
scale(1,0.7)
noStroke();
translate(width/3-130,width/2-130);
cnt=0;
for (let j=0;j<=co;j++){//columns
for (let i=ro;i>=0;i--){//rows
x=r*j*1.5;
y=-r*12+r*sqrt(3)*i+r*j/1.15;
if(dArray[cnt]===0){
fill(0,0,0);
circle(x,y,r/10)
fill(0,0,0,5);
}
if(dArray[cnt]===1){
fill(255,255,255);
circle(x,y,r/10)
fill(255,255,255,5)
}
circle(x,y,r*5)
circle(x,y,r*4)
circle(x,y,r*3)
circle(x,y,r*2)
circle(x,y,r*1)
cnt=cnt+1
}
}
switchDead()
}
function polygon(x, y, radius, npoints) {
let angle = TWO_PI / npoints;
beginShape();
for (let a = 0; a < TWO_PI; a += angle) {
let sx = x + cos(a) * radius;
let sy = y + sin(a) * radius;
vertex(sx, sy);
}
endShape(CLOSE);
}
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(){
tmp =0
for(let k=0;k<n;k++){
if(dArray[k]===true){
tmp=tmp+1;
}
}
if(tmp===0){
}
cnt1=0
for (let j=0;j<=co;j++){//columns
for (let i=ro;i>=0;i--){//rows
if(j!=0&&i!=0&&i!=ro&&j!=co){
sumd = dArray[cnt1+co+1]+dArray[cnt1+co+2]+dArray[cnt1-co-1]+dArray[cnt1-co-2]+dArray[cnt1+1]+dArray[cnt1-1];
}
if(i===0&&j!=0&&j!=co){
sumd = dArray[cnt1+co+1]+dArray[cnt1-co-1]+dArray[cnt1-co-2]+dArray[cnt1-1];
}
if(i===ro&&j!=0&&j!=co){
sumd = dArray[cnt1+co+1]+dArray[cnt1-co-1]+dArray[cnt1+co+2]+dArray[cnt1+1];
}
if(j===co&&i!=0&&i!=ro){
sumd = dArray[cnt1-co-1]+dArray[cnt1-co-2]+dArray[cnt1+1]+dArray[cnt1-1];
}
if(j===0&&i!=0&&i!=ro){
sumd = dArray[cnt1+co+1]+dArray[cnt1+co+2]+dArray[cnt1+1]+dArray[cnt1-1];
}
if(i===0&&j===0){
sumd = dArray[cnt1+co+1]+dArray[cnt1+1];
}
if(i===0&&j===co){
sumd = dArray[cnt1-1]+dArray[cnt1-co-1]+dArray[cnt1-co-2];
}
if(i===ro&&j===0){
sumd = dArray[cnt1+1]+dArray[cnt1+co+1]+dArray[cnt1+co+2];
}
if(i===ro&&j===co){
sumd = dArray[cnt1+1]+dArray[cnt1-co-1];
}
if (rules===0){
if (dArray[cnt1] === 1 && (sumd === 6 || sumd === 5 || sumd === 1 || sumd === 0)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 4)) {
dArray[cnt1] = 1;
}
}
if (rules===1){
if (dArray[cnt1] === 1 && (sumd === 6 || sumd === 5 || sumd === 2 || sumd === 1 || sumd === 0)) {
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 === 6 || sumd === 5 )) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 3)) {
dArray[cnt1] = 1;
}
}
if (rules===3){
if (dArray[cnt1] === 1 && (sumd === 1 || sumd === 2 || sumd === 3)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 3||sumd===4)) {
dArray[cnt1] = 1;
}
}
if (rules===4){
if (dArray[cnt1] === 1 && (sumd === 3 ||sumd === 4 || sumd === 5 || sumd === 6)) {
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 === 2 ||sumd === 3 ||sumd === 4 || sumd === 5 || sumd === 6)) {
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 === 4 || sumd === 5 || sumd === 6)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd===3||sumd===4)) {
dArray[cnt1] = 1;
}
}
if (rules===7){
if (dArray[cnt1] === 1 && (sumd === 6 || sumd === 5 || sumd === 1 || sumd === 0)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 1)) {
dArray[cnt1] = 1;
}
}
if (rules===8){
if (dArray[cnt1] === 1 && (sumd === 6 || 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 (rules===10){//adds a random death component to the game
if (dArray[cnt1] === 1 && (sumd === 3 || random(0,1.001)>1)) {
dArray[cnt1] = 0;
} else if (dArray[cnt1] === 0 && (sumd === 2||sumd===1 )) {
dArray[cnt1] = 1;
}
}
cnt1 = cnt1 + 1
}
}
stroke(255);
fill(0 )
push()
scale(1,1)
for(let i=0;i<=10 ;i++){
circle(width/2+190,30*i-70,10)
}
fill(100)
circle(width/2+190,30*rules-70,10)
pop()
}
function mousePressed(){
randomDead();
}
function keyPressed() {
if (keyCode === 32 || keyCode===40) {
rules = rules+1;
if (rules>10 ){
rules=0;
}
randomDead();
}
if (keyCode === 38){
rules = rules-1;
if (rules<0 ){
rules=10;
}
randomDead();
}
}