Approximately ten years ago, a solider has fallen: they took down Flappy Bird. A game which combines simplicity and effectiveness. For my Midterm Project, I have decided to make my own version of it called Flappy Falcon. For this, I needed the code, some pictures and sounds.
The idea behind it is that I wanted to create the NYUAD version of the game, which would have the iconic colors of the University and our mascott.
Code: The code was pretty easy to make because we have already learnt everything that I had to do for it in class. I had to make adjustments along the way, as for some reason the pipes were the hardest thing to code because I faced some issues with them along the way:
– the falcon wouldn’t pass the pipes;
-the moment the falcon would touch the pipes even so slightly it would be game over ;
Pictures: In regards to the media, I came across another problem: the falcon wouldn’t upload and it was showing me an error. After some minutes of thinking of a solution, I got it to work.
Sounds: For the sounds I have uploaded a bird background noise, which signifies the falcon, but another classmate of mine interpreted it as the bird sounds that we hear everyday on campus (thanks sm).
//Flappy Falcon Game //by Stefania Petre for Introduction Into Interactive Media let bird; let pipes = []; let gameStarted = false; let score = 0; let startButton; let backgroundImage; let flappySound; let birdImage; function preload() { backgroundImage = loadImage("background.png"); flappySound = loadSound("sound.mp3"); birdImage = loadImage("bird.png"); } function setup() { createCanvas(400, 600); bird = new Bird(); startButton = createButton("Start"); startButton.position(width / 2.2, height / 1.9); startButton.mousePressed(startGame); } function draw() { if (gameStarted) { playGame(); } else { showStartScreen(); } } function playGame() { background(94, 38, 163); bird.update(); bird.show(); updateAndShowPipes(); showScore(); } function updateAndShowPipes() { for (let i = pipes.length - 1; i >= 0; i--) { pipes[i].update(); pipes[i].show(); if (pipes[i].hits(bird)) { gameOver(); } if (pipes[i].passes(bird)) { score++; } if (pipes[i].offscreen()) { pipes.splice(i, 1); } } if (frameCount % 100 === 0) { pipes.push(new Pipe()); } } function showScore() { textSize(32); fill(255); text(score, width / 2, 50); } function showStartScreen() { image(backgroundImage, 0, 0, width, height); textSize(32); fill(255); textAlign(CENTER, CENTER); text("Flappy Falcon", width / 2, height / 3); textSize(16); text("Press Start to Experience Nostalgia!", width / 2, height / 2.2); score = 0; } function keyPressed() { if (key === " " && gameStarted) { bird.jump(); } } function startGame() { gameStarted = true; pipes = []; startButton.hide(); flappySound.play(); } function gameOver() { gameStarted = false; startButton.show(); } class Bird { constructor() { this.y = height / 2; this.x = 64; this.gravity = 0.6; this.lift = -15; this.velocity = 0; this.size = 50; } show() { image(birdImage, this.x, this.y, this.size, this.size); // Draw the bird image } update() { this.velocity += this.gravity; this.velocity *= 0.9; this.y += this.velocity; this.y = constrain(this.y, 0, height); } jump() { this.velocity += this.lift; } } class Pipe { constructor() { this.spacing = 200; // Increased gap between pipes this.top = random(height - this.spacing); this.bottom = height - (this.top + this.spacing); this.x = width; this.w = 40; this.speed = 2; this.passed = false; } show() { fill(0); // Set color to black rect(this.x, 0, this.w, this.top); rect(this.x, height - this.bottom, this.w, this.bottom); } update() { this.x -= this.speed; } offscreen() { return this.x < -this.w; } hits(bird) { return ( bird.x + bird.size / 2 > this.x && bird.x - bird.size / 2 < this.x + this.w && (bird.y - bird.size / 2 < this.top || bird.y + bird.size / 2 > height - this.bottom) ); } passes(bird) { if (this.x < bird.x && !this.passed) { this.passed = true; return true; } return false; } }
Overall, I completed every single requirement for the game which I would say I am happy about!