Flappy Bird

I had nothing to do one day after school in 11th grade and decided to use p5.js (processing) to recreate Flappy Bird. Below is a copy of the code as well as a working version of the game. Press Start and use the Return Key to play.

Code (p5):

// Define Variables

let pipes

let bird

let back

let pipeX1

let pipeX2

let pipeX3

let pipeY1

let pipeY2

let pipeY3

let gravity

let birdY

let up

let score

let startButton

let resetButton


// Load in images

function preload() {

pipes = loadImage('pipes.png');

bird = loadImage('bird.png')

back = loadImage('Background.jpg')

}



function setup() {

// Create start button

startButton = createButton('Start');

startButton.position(19, 19);

// Run start function if start button is pressed

startButton.mousePressed(start);

// Set up screen

createCanvas(400, 600);

// Define x locations of 3 pipes

pipeX1 = 210

pipeX2 = 440

pipeX3 = 680

// Initial speed is 0

speed = 0

// Create random y locations for pipes

pipeY1 = random(-450,-199)

pipeY2 = random(-450,-199)

pipeY3 = random(-450,-199)

// Create starting y position of bird and set gravity to 0

birdY = -400

gravity = 0

up = 0

score = 0

}


// Set speed and gravity to begin game

function start() {

speed = -3

gravity = 4

}


// Reset back to initial state

function reset() {

birdY = -400

speed = -3

gravity = 4

pipeX1 = 210

pipeX2 = 440

pipeX3 = 680

birdY = birdY + gravity

score = 0

}



function die() {

// If you go past x loc of pipe

if (pipeX1 >= -53.5 && pipeX1 <= 30) {

// Check to see if out of the y bounds of pipe

if (birdY <= pipeY1-42 || birdY >= pipeY1+68) {

// end game

speed = 0

gravity = 20

if (keyIsDown(RETURN)) {

birdY = birdY + 16

}

}

}

// Same for second pipe

if (pipeX2 >= -53.5 && pipeX2 <= 30) {

if (birdY <= pipeY2-42 || birdY >= pipeY2+68) {

speed = 0

gravity = 20

if (keyIsDown(RETURN)) {

birdY = birdY + 16

}

}

}

// Same for third pipe

if (pipeX3 >= -53.5 && pipeX3 <= 30) {

if (birdY <= pipeY3-42 || birdY >= pipeY3+68) {

speed = 0

gravity = 20

if (keyIsDown(RETURN)) {

birdY = birdY + 16

}

}

}

}


// Animate screen

function draw() {

die()

if (keyIsDown(UP_ARROW)) {

print('up')

}

image(back, 0,0)

// Make pipes move

pipeX1 += speed

pipeX2 += speed

pipeX3 += speed

// Define the images and locations

image(pipes, pipeX1, pipeY1);

image(pipes, pipeX2, pipeY2)

image(pipes, pipeX3, pipeY3)

// Handle pipes moving off screen

if (pipeX1 < -270) {

pipeX1 = 440

pipeX1 += speed

pipeY1 = random(-450,-199)

}

if (pipeX2 < -270) {

pipeX2 = 440

pipeX2 += speed

pipeY2 = random(-450,-199)

}

if (pipeX3 < -270) {

pipeX3 = 440

pipeX3 += speed

pipeY3 = random(-450,-199)

}

if (keyIsDown(RETURN)) {

birdY = birdY - 8

} else {

birdY = birdY + gravity

}

// Define bird location

image(bird, 25, birdY)

// Handle scoring

if (pipeX1 == -85 || pipeX1 == -86 || pipeX1 == -87)

score = score + 1

if (pipeX2 == -85 || pipeX2 == -86 || pipeX2 == -87)

score = score + 1

if (pipeX3 == -85 || pipeX3 == -86 || pipeX3 == -87)

score = score + 1

// Handle game over --> Print score and show reset button

if (birdY > -34) {

birdY = -34

speed = 0

textSize(32)

image(back,0,0)

image(bird,25,-34)

text('Game Over', 110, 300)

text('Score: ' + score, 110, 340)

resetButton = createButton('Reset');

resetButton.position(19, 19);

resetButton.mousePressed(reset)

} else {

textSize(32)

fill(255,255,255)

text(score, 180, 30)

}

}