167 lines
3.9 KiB
JavaScript
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'
|
|
}
|
|
}
|
|
}
|