From 723e97214f1c7d2884fd5452abef02af37df7327 Mon Sep 17 00:00:00 2001 From: Darkin Date: Sat, 19 Oct 2019 11:06:24 +0200 Subject: [PATCH] game states --- game.js | 121 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 92 insertions(+), 29 deletions(-) diff --git a/game.js b/game.js index 1da4e50..42c19f1 100644 --- a/game.js +++ b/game.js @@ -1,8 +1,29 @@ const scrn = document.getElementById('canvas'); const sctx = scrn.getContext("2d"); + scrn.addEventListener("click",()=>{ + switch (state.curr) { + case state.getReady : + state.curr = state.Play; + bird.x = bird.x*4; + break; + case state.Play : + bird.flap(); + break; + case state.gameOver : + break; + } + }) sctx.fillStyle = "#30c0df"; let frames = 0; -const gnd = { + + const state = { + curr : 0, + getReady : 0, + Play : 1, + gameOver : 2, + + } + const gnd = { animations : [ {sprite : new Image()}, @@ -12,15 +33,26 @@ const gnd = { y :0, frame : 0, draw : function() { - y = parseFloat(scrn.height-this.animations[this.frame].sprite.height); - sctx.drawImage(this.animations[this.frame].sprite,this.x,y); + this.y = parseFloat(scrn.height-this.animations[this.frame].sprite.height); + sctx.drawImage(this.animations[this.frame].sprite,this.x,this.y); }, - update : function(){ - this.frame += (frames%10==0) ? 1 : 0; - this.frame = this.frame%this.animations.length; - } - }; -const bg = { + update : function() { + + switch (state.curr) { + case state.getReady : + this.frame += (frames%10==0) ? 1 : 0; + break; + case state.Play : + this.frame += (frames%5==0) ? 1 : 0; + break; + case state.gameOver : + this.frame = 0; + break; + } + this.frame = this.frame%this.animations.length; + } + }; + const bg = { sprite : new Image(), x : 0, y :0, @@ -28,18 +60,8 @@ const bg = { y = parseFloat(scrn.height-this.sprite.height); sctx.drawImage(this.sprite,this.x,y); } -}; -const gr = { - sprite : new Image(), - x : 0, - y :0, - draw : function() { - y = parseFloat(scrn.height-this.sprite.height)/2; - x = parseFloat(scrn.width-this.sprite.width)/2; - sctx.drawImage(this.sprite,x,y); - } -}; -const bird = { + }; + const bird = { animations : [ {sprite : new Image()}, @@ -49,27 +71,67 @@ const bird = { ], x : 13, y :100, + speed : 0, + gravity : .25, frame:0, draw : function() { sctx.drawImage(this.animations[this.frame].sprite,this.x,this.y); }, update : function() { - this.frame += (frames%10==0) ? 1 : 0; - this.frame = this.frame%this.animations.length; - this.y += (frames%10==0) ? (Math.random()-0.5)*2 : 0; + + switch (state.curr) { + case state.getReady : + this.y += (frames%10==0) ? (Math.random()-0.5)*2 : 0; + this.frame += (frames%10==0) ? 1 : 0; + break; + case state.Play : + this.frame += (frames%5==0) ? 1 : 0; + this.y += this.speed; + this.speed += this.gravity; + let r = parseFloat( this.animations[0].sprite.height); + console.log(r); + if(this.y + r > gnd.y) + state.curr = state.gameOver; + break; + case state.gameOver : + this.frame = 1; + break; + } + this.frame = this.frame%this.animations.length; + }, + flap : function(){ + this.speed = -4.6; } - -}; + }; + const UI = { + getReady : {sprite : new Image()}, + gameOver : {sprite : new Image()}, + draw : function() { + switch (state.curr) { + case state.getReady : + curr = this.getReady; + break; + case state.gameOver : + curr = this.gameOver; + break; + } + y = parseFloat(scrn.height-curr.sprite.height)/2; + x = parseFloat(scrn.width-curr.sprite.width)/2; + sctx.drawImage(curr.sprite,x,y); + } + + }; gnd.animations[0].sprite.src="img/ground/g0.png"; gnd.animations[1].sprite.src="img/ground/g1.png"; bg.sprite.src="img/BG.png"; -gr.sprite.src="img/getready.png"; +UI.getReady.sprite.src="img/getready.png"; +UI.gameOver.sprite.src="img/gameOver.png"; bird.animations[0].sprite.src="img/bird/b0.png"; bird.animations[1].sprite.src="img/bird/b1.png"; bird.animations[2].sprite.src="img/bird/b2.png"; bird.animations[3].sprite.src="img/bird/b0.png"; -console.log(gnd.sprite); + gameLoop(); @@ -92,6 +154,7 @@ gameLoop(); bg.draw(); gnd.draw(); bird.draw(); - gr.draw(); + if(state.curr != state.Play) + UI.draw(); }