2020-06-03 16:21:33 +00:00
|
|
|
Bangle.setLCDTimeout(30);
|
|
|
|
|
|
|
|
var buf = Graphics.createArrayBuffer(160,160,1,{msb:true});
|
|
|
|
|
|
|
|
function flip() {
|
|
|
|
g.setColor(1,1,1);
|
|
|
|
g.drawImage({width:160,height:160,bpp:1,buffer:buf.buffer},40,40);
|
|
|
|
buf.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
var genA = new Uint8Array(324);
|
|
|
|
var genB = new Uint8Array(324);
|
|
|
|
var generation=0;
|
|
|
|
var start=Date.now();
|
|
|
|
var currentY=1;
|
|
|
|
|
|
|
|
function initDraw(gen){
|
|
|
|
for (let y = 1; y<17; ++y)
|
|
|
|
for (let x = 1; x<17; ++x) {
|
|
|
|
var r = Math.random()<0.5?1:0;
|
|
|
|
gen[x+y*18] = r;
|
|
|
|
if (r==1){
|
|
|
|
var Xr=10*(x-1);
|
|
|
|
var Yr=10*(y-1);
|
|
|
|
buf.fillRect(Xr,Yr, Xr+7,Yr+7);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
flip();
|
|
|
|
}
|
|
|
|
|
|
|
|
function howlong(){
|
|
|
|
var now = Date.now();
|
|
|
|
const duration = Math.floor(now-start);
|
|
|
|
start=now;
|
|
|
|
++generation;
|
|
|
|
g.setFont("6x8",2);
|
|
|
|
g.setFontAlign(-1,-1,0);
|
|
|
|
g.drawString('Gen:'+generation+' '+duration+'ms ',20,220,true);
|
|
|
|
}
|
|
|
|
|
|
|
|
function next(){
|
|
|
|
"ram";
|
|
|
|
var cur=genA, fut=genB, y=currentY;
|
|
|
|
var count=(p)=>{return cur[p-19]+cur[p-18]+cur[p-17]+cur[p-1]+cur[p+1]+cur[p+17]+cur[p+18]+cur[p+19];};
|
|
|
|
for (let x = 1; x<17; ++x){
|
|
|
|
var ind = x+y*18;
|
|
|
|
var nc = count(ind);
|
|
|
|
var r = (cur[ind]==1 && nc==2 || nc==3)?1:0;
|
|
|
|
fut[ind]=r;
|
|
|
|
if (r==1){
|
|
|
|
var Xr=10*(x-1);
|
|
|
|
var Yr=10*(y-1);
|
|
|
|
buf.fillRect(Xr,Yr, Xr+7,Yr+7);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (y==16){
|
|
|
|
flip();
|
|
|
|
var tmp = genA; genA=genB; genB=tmp;
|
|
|
|
howlong();
|
|
|
|
currentY=1;
|
|
|
|
} else ++currentY;
|
|
|
|
}
|
|
|
|
|
|
|
|
function reset(){
|
|
|
|
g.setColor(1,1,1);
|
|
|
|
initDraw(genA);
|
|
|
|
currentY=1;
|
|
|
|
generation = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
var intervalRef = null;
|
|
|
|
|
|
|
|
function stopdraw() {
|
|
|
|
if(intervalRef) {clearInterval(intervalRef);}
|
|
|
|
}
|
|
|
|
|
|
|
|
function startdraw() {
|
|
|
|
g.clear();
|
|
|
|
Bangle.drawWidgets();
|
|
|
|
g.reset();
|
|
|
|
g.setColor(1,1,1);
|
|
|
|
g.setFont("6x8",2);
|
|
|
|
g.setFontAlign(0,0,3);
|
|
|
|
g.drawString("Reset",230,200);
|
|
|
|
intervalRef = setInterval(next,60);
|
|
|
|
}
|
|
|
|
|
|
|
|
function setButtons(){
|
|
|
|
setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"});
|
|
|
|
setWatch(reset, BTN3, {repeat:true,edge:"rising"});
|
|
|
|
}
|
|
|
|
|
|
|
|
var SCREENACCESS = {
|
|
|
|
withApp:true,
|
|
|
|
request:function(){
|
|
|
|
this.withApp=false;
|
|
|
|
stopdraw();
|
|
|
|
clearWatch();
|
|
|
|
},
|
|
|
|
release:function(){
|
|
|
|
this.withApp=true;
|
|
|
|
startdraw();
|
|
|
|
setButtons();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
Bangle.on('lcdPower',function(on) {
|
|
|
|
if (!SCREENACCESS.withApp) return;
|
|
|
|
if (on) {
|
|
|
|
startdraw();
|
|
|
|
} else {
|
|
|
|
stopdraw();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
g.clear();
|
|
|
|
Bangle.loadWidgets();
|
|
|
|
startdraw();
|
|
|
|
setButtons();
|
|
|
|
reset();
|
|
|
|
|