Flappy Bird Game
Introduction
This is a really quick version of the Flappy Bird Game. Press the button to 'flap' and go up in the air against gravity, and try and avoid the obstacles!
Check out the video above for more information!
You'll Need
- An Espruino Pico
- A Nokia 5110 LCD
- Breadboard
or:
- An Espruino Pixl.js
Software
Everything's detailed in the video above, but if you just want the software then it's copied below.
- For a Pico copy the code as-is.
- For Pixl.js, just comment/uncomment the lines commented with
for Pico and LCD
andfor Pixl.js
// for Pico and LCD
A5.write(0); // GND
A7.write(1); // VCC
var BUTTON = B3;
pinMode(BUTTON,"input_pulldown");
var g;
// for Pixl.js
//var BUTTON = BTN1;
var SPEED = 0.5;
var BIRDIMG = {
width : 8, height : 8, bpp : 1,
transparent : 0,
buffer : new Uint8Array([
0b00000000,
0b01111000,
0b10000100,
0b10111010,
0b10100100,
0b10000100,
0b01111000,
0b00000000,
]).buffer
};
var birdy, birdvy;
var wasPressed = false;
var running = false;
var barriers;
var score;
function newBarrier(x) {
barriers.push({
x1 : x-5,
x2 : x+5,
y : 10+Math.random()*28,
gap : 8
});
}
function gameStart() {
running = true;
birdy = 48/2;
birdvy = 0;
barriers = [];
for (var i=42;i<g.getWidth();i+=42)
newBarrier(i);
score = 0;
}
function gameStop() {
running = false;
}
function draw() {
var buttonState = BUTTON.read();
g.clear();
if (!running) {
g.drawString("Game Over!",25,10);
g.drawString("Score",10,20);
g.drawString(score,10,26);
g.flip();
if (buttonState && !wasPressed)
gameStart();
wasPressed = buttonState;
return;
}
if (buttonState && !wasPressed)
birdvy -= 2;
wasPressed = buttonState;
score++;
birdvy += 0.2;
birdvy *= 0.8;
birdy += birdvy;
if (birdy > g.getHeight())
gameStop();
// draw bird
//g.fillRect(0,birdy-3,6,birdy+3);
g.drawImage(BIRDIMG, 0,birdy-4);
// 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.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, g.getHeight());
if (b.x1<6 && (birdy-3<btop || birdy+3>bbot))
gameStop();
});
while (barriers.length && barriers[0].x2<=0) {
barriers.shift();
newBarrier(g.getWidth());
}
g.flip();
}
// For Pico and LCD
function onInit() {
// Setup SPI
var spi = new SPI();
spi.setup({ sck:B1, mosi:B10 });
// Initialise the LCD
g = require("PCD8544").connect(spi,B13,B14,B15, function() {
//g.setContrast(0.43);
gameStart();
setInterval(draw, 50);
});
}
// For Pixl.js
//function onInit() {
// gameStart();
// setInterval(draw, 50);
//}
// Finally, start everything going
onInit();
This page is auto-generated from GitHub. If you see any mistakes or have suggestions, please let us know.