trimill.xyz/flaskr/templates/projects/flappy/main.js
2022-06-23 02:23:38 -04:00

167 lines
3.9 KiB
JavaScript

var bgImage1;
var bgImage2;
var birdImage;
var bird;
var pipes = [];
var blocks = [];
var gamestate = 'ld';
var bscroll1 = 0;
var bscroll2 = 0;
var score = 0;
var frame = 0;
function setup() {
var canvas = createCanvas(windowWidth, windowHeight).elt;
var context = canvas.getContext('2d');
context.mozImageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
textFont('Courier New');
frameRate(30);
initMenu();
loadAssets();
}
function draw() {
if(gamestate == 'ld') {
drawLoading();
} else if(gamestate == 'game') {
background(25);
var imageWidth = bgImage1.width*(height/bgImage1.height);
drawBackground(imageWidth);
doBird();
pipesAndBlocks();
showScore();
bscroll1 += 2*scrollSpeed;
bscroll1 %= imageWidth;
bscroll2 += 1*scrollSpeed;
bscroll2 %= imageWidth;
frame++;
} else if(gamestate == 'dead' || gamestate == 'start') {
background(25);
textAlign(CENTER, CENTER);
noStroke();
fill(255);
textSize(100);
if(gamestate == 'dead') {
text('You died!', width/2, height/2-150);
textSize(50);
text('Score: ' + score, width/2, height/2);
text('Play', width/2-width/7, height/2+150);
text('Options', width/2+width/7, height/2+150);
} else if(gamestate == 'start') {
text('Flappy T', width/2, height/2-150);
textSize(50);
text('Play', width/2-width/7, height/2+150);
text('Options', width/2+width/7, height/2+150);
}
} else if(gamestate == 'menu') {
drawMenu();
}
}
function drawBackground(imageWidth) {
image(bgImage2, -bscroll2, 0, imageWidth, height);
image(bgImage2, -bscroll2+imageWidth, 0, imageWidth, height);
image(bgImage1, -bscroll1, 0, imageWidth, height);
image(bgImage1, -bscroll1+imageWidth, 0, imageWidth, height);
}
function doBird() {
bird.applyForce(gravity, 'grav');
bird.update();
bird.show();
if(bird.pos > height) gamestate = 'dead';
if(bird.pos < -bird.height) gamestate = 'dead';
}
function pipesAndBlocks() {
if(frame % framesBetweenObstacle == 0) {
if(random(1) < blockChance)
blocks.push(new Block());
else
pipes.push(new Pipe());
}
for(var i = 0; i < pipes.length; i++) {
pipes[i].x -= 3*scrollSpeed;
var p = pipes[i].show();
if(pipes[i].intersects(bird)) gamestate = 'dead';
if(p) {
pipes.splice(i, 1);
i--;
}
}
for(var i = 0; i < blocks.length; i++) {
blocks[i].x -= 3*scrollSpeed;
var p = blocks[i].show();
if(blocks[i].intersects(bird)) gamestate = 'dead';
if(p) {
blocks.splice(i, 1);
i--;
}
}
}
function showScore() {
textAlign(CENTER, CENTER);
stroke(0);
strokeWeight(3);
fill(255);
textSize(120);
text(score, width/2, 100);
}
function drawLoading() {
background(25);
var total = 3;
var count = 0;
if(bgImage1 != undefined) count++;
if(bgImage2 != undefined) count++;
if(birdImage != undefined) count++;
if(count >= total) gamestate = 'start';
var w = (count/total)*(width-50);
noStroke();
fill(0, 255, 0);
rect(25, 25, w, 75);
}
function windowResized() {
resizeCanvas(windowWidth, windowHeight);
}
function newGame() {
bird = new Bird();
blocks = [];
pipes = [];
frame = 0;
score = 0;
gamestate = 'game';
}
function mousePressed() {
if(gamestate == 'menu') {
menuPress(mouseX, mouseY, mouseButton);
}
}
function mouseReleased() {
if(gamestate == 'menu') {
menuRelease(mouseX, mouseY, mouseButton);
}
}
function mouseClicked() {
if(gamestate == 'menu') {
menuClick(mouseX, mouseY, mouseButton);
} else if(gamestate == 'game' ) {
bird.applyForce(flapForce, 'flap');
} else if((gamestate == 'start' || gamestate == 'dead') && mouseY > height/2 + 75) {
if(mouseX < width/2) {
newGame()
} else {
gamestate = 'menu'
}
}
}