diff --git a/apps.json b/apps.json index 38a3cee50..4682f2e81 100644 --- a/apps.json +++ b/apps.json @@ -1897,7 +1897,7 @@ { "id": "life", "name": "Game of Life", "icon": "life.png", - "version":"0.02", + "version":"0.04", "description": "Conway's Game of Life - 16x16 board", "tags": "game", "allow_emulator":true, diff --git a/apps/life/ChangeLog b/apps/life/ChangeLog index b26468a22..ca105e8fa 100644 --- a/apps/life/ChangeLog +++ b/apps/life/ChangeLog @@ -1,3 +1,5 @@ 0.01: New App! 0.02: Updated to be more responsive re suggestion by Gordon +0.03: fix start & reset, chang eperiod to 65ms, remove timing info +0.04: fix default parameter, replace timing diff --git a/apps/life/life.js b/apps/life/life.js index 4e71c3069..6ff8a40be 100644 --- a/apps/life/life.js +++ b/apps/life/life.js @@ -11,7 +11,7 @@ function flip() { var genA = new Uint8Array(324); var genB = new Uint8Array(324); var generation=0; -var start=Date.now(); +var gentime=0; var currentY=1; function initDraw(gen){ @@ -29,17 +29,17 @@ function initDraw(gen){ } 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); + gentime = Math.floor(gentime); + g.drawString('Gen:'+generation+' '+gentime+'ms ',20,220,true); + gentime=0; } function next(){ "ram"; + var start = Date.now(); 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){ @@ -53,6 +53,7 @@ function next(){ buf.fillRect(Xr,Yr, Xr+7,Yr+7); } } + gentime+=(Date.now()-start); if (y==16){ flip(); var tmp = genA; genA=genB; genB=tmp; @@ -61,12 +62,6 @@ function next(){ } else ++currentY; } -function reset(){ - g.setColor(1,1,1); - initDraw(genA); - currentY=1; - generation = 0; -} var intervalRef = null; @@ -74,20 +69,34 @@ function stopdraw() { if(intervalRef) {clearInterval(intervalRef);} } -function startdraw() { - g.clear(); +function startdraw(init) { + if (init===undefined) init=false; + if(!init) g.clear(); Bangle.drawWidgets(); g.reset(); g.setColor(1,1,1); - g.setFont("6x8",2); + g.setFont("6x8",1); g.setFontAlign(0,0,3); - g.drawString("Reset",230,200); - intervalRef = setInterval(next,60); + g.drawString("RESET",230,200); + g.drawString("LAUNCH",230,130); + g.drawString("CLOCK",230,60); + if(!init) intervalRef = setInterval(next,65); } + +function regen(){ + stopdraw(); + g.setColor(1,1,1); + initDraw(genA); + currentY=1; + generation = 0; + gentime=0; + intervalRef = setInterval(next,65); +} function setButtons(){ + setWatch(()=>{load();}, BTN1, {repeat:false,edge:"falling"}); setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); - setWatch(reset, BTN3, {repeat:true,edge:"rising"}); + setWatch(regen, BTN3, {repeat:true,edge:"rising"}); } var SCREENACCESS = { @@ -115,7 +124,7 @@ function startdraw() { g.clear(); Bangle.loadWidgets(); - startdraw(); + regen(); + startdraw(true); setButtons(); - reset(); \ No newline at end of file diff --git a/apps/life/life.min.js b/apps/life/life.min.js index f8f3f3858..42a2e6515 100644 --- a/apps/life/life.min.js +++ b/apps/life/life.min.js @@ -1,5 +1,5 @@ -Bangle.setLCDTimeout(30);var buf=Graphics.createArrayBuffer(160,160,1,{msb:!0});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),genB=new Uint8Array(324),generation=0,start=Date.now(),currentY=1;function initDraw(a){for(var d=1;17>d;++d)for(var e=1;17>e;++e){var c=.5>Math.random()?1:0;a[e+18*d]=c;if(1==c){c=10*(e-1);var b=10*(d-1);buf.fillRect(c,b,c+7,b+7)}}flip()} -function howlong(){var a=Date.now(),d=Math.floor(a-start);start=a;++generation;g.setFont("6x8",2);g.setFontAlign(-1,-1,0);g.drawString("Gen:"+generation+" "+d+"ms ",20,220,!0)} -function next(){"ram";for(var a=genA,d=genB,e=currentY,c=1;17>c;++c){var b=c+18*e,f=a[b-19]+a[b-18]+a[b-17]+a[b-1]+a[b+1]+a[b+17]+a[b+18]+a[b+19];f=1==a[b]&&2==f||3==f?1:0;d[b]=f;1==f&&(b=10*(c-1),f=10*(e-1),buf.fillRect(b,f,b+7,f+7))}16==e?(flip(),a=genA,genA=genB,genB=a,howlong(),currentY=1):++currentY}function reset(){g.setColor(1,1,1);initDraw(genA);currentY=1;generation=0}var intervalRef=null;function stopdraw(){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:!1,edge:"falling"});setWatch(reset,BTN3,{repeat:!0,edge:"rising"})}var SCREENACCESS={withApp:!0,request:function(){this.withApp=!1;stopdraw();clearWatch()},release:function(){this.withApp=!0;startdraw();setButtons()}}; -Bangle.on("lcdPower",function(a){SCREENACCESS.withApp&&(a?startdraw():stopdraw())});g.clear();Bangle.loadWidgets();startdraw();setButtons();reset(); +Bangle.setLCDTimeout(30);var buf=Graphics.createArrayBuffer(160,160,1,{msb:!0});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),genB=new Uint8Array(324),generation=0,gentime=0,currentY=1;function initDraw(c){for(var a=1;17>a;++a)for(var h=1;17>h;++h){var d=.5>Math.random()?1:0;c[h+18*a]=d;if(1==d){d=10*(h-1);var f=10*(a-1);buf.fillRect(d,f,d+7,f+7)}}flip()} +function howlong(){++generation;g.setFont("6x8",2);g.setFontAlign(-1,-1,0);gentime=Math.floor(gentime);g.drawString("Gen:"+generation+" "+gentime+"ms ",20,220,!0);gentime=0} +function next(){"ram";for(var c=Date.now(),a=genA,h=genB,d=currentY,f=1;17>f;++f){var b=f+18*d,e=a[b-19]+a[b-18]+a[b-17]+a[b-1]+a[b+1]+a[b+17]+a[b+18]+a[b+19];e=1==a[b]&&2==e||3==e?1:0;h[b]=e;1==e&&(b=10*(f-1),e=10*(d-1),buf.fillRect(b,e,b+7,e+7))}gentime+=Date.now()-c;16==d?(flip(),c=genA,genA=genB,genB=c,howlong(),currentY=1):++currentY}var intervalRef=null;function stopdraw(){intervalRef&&clearInterval(intervalRef)} +function startdraw(c){void 0===c&&(c=!1);c||g.clear();Bangle.drawWidgets();g.reset();g.setColor(1,1,1);g.setFont("6x8",1);g.setFontAlign(0,0,3);g.drawString("RESET",230,200);g.drawString("LAUNCH",230,130);g.drawString("CLOCK",230,60);c||(intervalRef=setInterval(next,65))}function regen(){stopdraw();g.setColor(1,1,1);initDraw(genA);currentY=1;gentime=generation=0;intervalRef=setInterval(next,65)} +function setButtons(){setWatch(function(){load()},BTN1,{repeat:!1,edge:"falling"});setWatch(Bangle.showLauncher,BTN2,{repeat:!1,edge:"falling"});setWatch(regen,BTN3,{repeat:!0,edge:"rising"})}var SCREENACCESS={withApp:!0,request:function(){this.withApp=!1;stopdraw();clearWatch()},release:function(){this.withApp=!0;startdraw();setButtons()}};Bangle.on("lcdPower",function(c){SCREENACCESS.withApp&&(c?startdraw():stopdraw())});g.clear();Bangle.loadWidgets();regen();startdraw(!0);setButtons();