From e6b0343b7cdfa61bd6e56552dc3e53f9eea040d8 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 3 Dec 2019 17:07:26 +0000 Subject: [PATCH] add flappy bird game --- apps.json | 12 +++++ apps/flappy/app-icon.js | 1 + apps/flappy/app.js | 114 ++++++++++++++++++++++++++++++++++++++++ apps/flappy/app.json | 5 ++ apps/flappy/app.png | Bin 0 -> 438 bytes 5 files changed, 132 insertions(+) create mode 100644 apps/flappy/app-icon.js create mode 100644 apps/flappy/app.js create mode 100644 apps/flappy/app.json create mode 100644 apps/flappy/app.png diff --git a/apps.json b/apps.json index 7bfabbad3..dfadf9c5d 100644 --- a/apps.json +++ b/apps.json @@ -514,6 +514,18 @@ {"name":".trishig","url":"clock-tris-high"} ] }, + { "id": "flappy", + "name": "Flappy Bird", + "icon": "app.png", + "description": "A Flappy Bird game clone", + "tags": "game", + "allow_emulator":true, + "storage": [ + {"name":"+flappy","url":"app.json"}, + {"name":"-flappy","url":"app.js"}, + {"name":"*flappy","url":"app-icon.js","evaluate":true} + ] + }, { "id": "gpsinfo", "name": "GPS Info", diff --git a/apps/flappy/app-icon.js b/apps/flappy/app-icon.js new file mode 100644 index 000000000..d9d0500d1 --- /dev/null +++ b/apps/flappy/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkBiIA/AH4A/AH4AniEAAAcBC8wVBh3uAAPgh/wDBwXWiAVDCwX//4YNC6pyDIwoWBJJYXWiA+CCAIYCC9YYHPBQXYh3vBwP+8B5EQIUADA4XXaogWFhvdAAXQGBIXVbAYWF6BHMC7BKFI4xGJC7RKCU6IXbPggSPC7gA/AH4A/AH4AVA")) diff --git a/apps/flappy/app.js b/apps/flappy/app.js new file mode 100644 index 000000000..64a5d769b --- /dev/null +++ b/apps/flappy/app.js @@ -0,0 +1,114 @@ + +Bangle.setLCDMode("120x120"); + +var SPEED = 0.5; +var BIRDIMG = E.toArrayBuffer(atob("EQyI/v7+/v7+/gAAAAAAAP7+/v7+/v7+/gYG0tLS0gDXAP7+/v7+/v4A0tLS0tIA19fXAP7+/v4AAAAA0tLS0gDX1wDXAP7+ANfX19cA0tLSANfXANcA/v4A19fX19cA0tLSANfX1wD+/gDS19fX0gDS0tLSAAAAAAD+/gDS0tIA0tLS0gDAwMDAwAD+/gAAAM3Nzc0AwAAAAAAA/v7+/v4Azc3Nzc0AwMDAwAD+/v7+/v4AAM3Nzc0AAAAAAP7+/v7+/v7+AAAAAP7+/v7+/g==")) +var FLOORIMG = require("heatshrink").decompress(atob("iEYxH+kklABuLAAlgAAwNFB34OLmAAO0YAO5wAO1YA/AH4A/ADw=")); + + +var birdy, birdvy; +var floorpos = 0; +var running = false; +var barriers; +var score; + +function newBarrier(x) { + barriers.push({ + x1 : x-7, + x2 : x+7, + y : 20+Math.random()*38, + gap : 10+Math.random()*10 + }); +} + +function gameStart() { + running = true; + birdy = 48/2; + birdvy = 0; + barriers = []; + for (var i=38;i H) + gameStop(); + // draw bird + g.drawImage(BIRDIMG, 6,birdy, {rotate:Math.atan2(birdvy,15)}); + // draw barriers + barriers.forEach(function(b) { + b.x1-= SPEED; + b.x2-= SPEED; + var btop = b.y-b.gap; + var bbot = b.y+b.gap; + g.setColor("#73bf2f"); // middle + g.fillRect(b.x1+4, 0, b.x2-4, btop-1); + g.fillRect(b.x1+4, bbot, b.x2-4, H-1); + g.setColor("#c0f181"); // left + g.fillRect(b.x1+1, 0, b.x1+3, btop-1); + g.fillRect(b.x1+1, bbot, b.x1+3, H-1); + g.setColor("#538917"); // right + g.fillRect(b.x2-3, 0, b.x2-1, btop-1); + g.fillRect(b.x2-3, bbot, b.x2-1, H-1); + g.setColor("#808080"); + g.drawRect(b.x1+1, -1, b.x2-2, btop-5); + g.drawRect(b.x1, btop-5, b.x2, btop); + g.drawRect(b.x1, bbot, b.x2, bbot+5); + g.drawRect(b.x1+1, bbot+5, b.x2-1, H); + if (b.x1<6 && (birdy-3bbot)) + gameStop(); + }); + while (barriers.length && barriers[0].x2<=0) { + barriers.shift(); + newBarrier(g.getWidth()); + } + + g.flip(); +} + +function onInit() { + gameStart(); + setInterval(draw, 50); +} + + +Bangle.on('touch', function(button) { + if (!running) { + gameStart(); + } else { + birdvy -= 2; + } +}); + +// Finally, start everything going +onInit(); diff --git a/apps/flappy/app.json b/apps/flappy/app.json new file mode 100644 index 000000000..262ed2658 --- /dev/null +++ b/apps/flappy/app.json @@ -0,0 +1,5 @@ +{ + "name":"Flappy Bird", + "icon":"*flappy", + "src":"-flappy" +} diff --git a/apps/flappy/app.png b/apps/flappy/app.png new file mode 100644 index 0000000000000000000000000000000000000000..a211d30c3062e94486cf6990d7f7f6dfbc3e4f38 GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI^hgp!pShG~q2q+|*84^+AoS&PUnpXnkGB7w7r6!i7 zrYMwWmSiZnd-?{X=%unVFfdAax;Tbp+z}3Em#o*$Oveo4u1m4-Ku;zbw ziFwB*<^`QioGbIzTx{FMykp|O?aI!XKkD0FG6*uKkH z&soa+-uU!u+hC1!nG5R~5jXX3rE!_|73EL9x?EE?6TiDqd0uOb?9Myq z?s~1`i$9f}8hwU)4!e|px0!nm-%P(BMe{#5DBOF|vPCU|d4G|Em3_$%X~RFAJs^Ln aq|AG?wftX^_sc1u;PZ6#b6Mw<&;$SsAFm1k literal 0 HcmV?d00001