let ctx, canvas;
let bird;
let pipes = [];
let frameCount = 0;
let nextPipe = Math.floor(randRange(75, 150));
let nextFrame = false;
let background;
let score = 0;
let hitting = null;
document.getElementById("start-button").onclick = startGame;
async function startGame(event) {
event.target.style.display = "none";
await setup();
draw();
}
document.body.onkeydown = processKeyDown;
document.body.onkeyup = processKeyUp;
async function setup() {
canvas = document.getElementById("canvas");
ctx = canvas.getContext("2d");
await loadImages([
"resources/bird.jpg",
"resources/background.png"
]);
background = getImage("resources/background.png");
bird = new Bird(50, canvas.height / 2);
pipes.push(new Pipe(canvas.width, canvas.height));
}
function draw() {
frameCount += 1;
ctx.drawImage(background, 0, 0);
bird.draw(ctx);
for(let p of pipes) {
p.draw(ctx);
}
displayScore();
update();
window.requestAnimationFrame(draw);
}
function displayScore() {
ctx.font = "30px Consolas";
ctx.fillStyle = "yellow";
ctx.fillText(score.toString(), 25, 40);
}
function update() {
bird.update();
constrainToScreen(bird);
let deadPipes = [];
for(let p of pipes) {
p.update();
if(p.hits(bird)) {
if(hitting != p) {
score -= 5;
hitting = p;
}
} else if(p.offscreen()) {
score += 1;
deadPipes.push(pipes.indexOf(p));
}
}
for(let i of deadPipes) {
pipes.splice(i, 1);
}
if(frameCount % nextPipe == 0) {
if(nextFrame == false) {
nextFrame = true;
} else {
nextPipe = Math.floor(randRange(75, 150));
pipes.push(new Pipe(canvas.width, canvas.height));
nextFrame = false;
}
}
}
function constrainToScreen(obj) {
if(obj.y <= 0) {
obj.y = 0;
}
if(obj.y >= canvas.height) {
obj.y = canvas.height;
}
}
function processKeyDown(event) {
if(event.keyCode == 32) {
bird.flap = true;
}
}
function processKeyUp(event) {
if(event.keyCode == 32) {
bird.flap = false;
}
}