HTML5 Canvas Game Over

Chapter 5: [Tutorial] How to make Game Over

GatoMaster
2 min readDec 5, 2018

จาก Chapter 1&2&3&4 เราจะได้ Background, Plate, Random Cat, scoring system ส่วนใน Chapter 5 ซึ่งจะเป็น Chapter สุดท้ายก็คือการทำ Game Over

โดยเงื่อนไขของ Game Over คือ เมื่อ Plate ไม่สามาถรับ แมวได้ จะทำให้ Game Over ทันที ซึ่ง เกมจะต้องหยุด และมีคำว่า “GAME OVER” แสดงอยู่บนหน้าจอ

ไปที่ Main.js ประกาศตัวแปร

var gameOver = false;

เงื่อนไขของ Game Over คือเมื่อ แมวตกลง นอกฉากของเกมได้ ดั้งนั้นให้ทำการสร้างเงื่อนไข

if(catsArr[i].y >= canvas.height){
gameOver = true;
}

ขึ้นมาไว้ใน ฟังก์ชั่น Update();

var update = function(dt){
Plate.update(dt);
time += dt;
if(time >= 0.7){
time = 0;
catsArr.push(new Cat(canvas,Math.floor((Math.random()*(canvas.width-50))) ,-50))
}
for(var i =0; i < catsArr.length; i++){
catsArr[i].update(dt);
if(overlab(Plate,catsArr[i])){
catsArr.splice(i,1);
score++;
}
if(catsArr[i].y >= canvas.height){
gameOver = true;
}
}
canvas.setAttribute('tabindex','0');
canvas.focus();
};

จากนั้นให้ทำการสร้างเงื่อนไข เมื่อ Game Over มีค่าเป็น True เกมจะต้องหยุดการทำงาน

var update = function(dt){
Plate.update(dt);
if(!gameOver){
time += dt;
if(time >= 0.7){
time = 0;
catsArr.push(new Cat(canvas,Math.floor((Math.random()*(canvas.width-50))) ,-50))
}

for(var i =0; i < catsArr.length; i++){
catsArr[i].update(dt);

if(overlab(Plate,catsArr[i])){
catsArr.splice(i,1);
score++;
}
if(catsArr[i].y >= canvas.height){
gameOver = true;
}
}
}
canvas.setAttribute('tabindex','0');
canvas.focus();
};

ขั้นตอนต่อไปคือการนำ Text มาแสดงบนหน้าจอ ให้ไปที่ ฟังก์ชั่น render(); และเรียกใช้การวาด canvas เมื่อ Game Over มีค่าเป็น True

var render = function(){
ctx.drawImage(image,0,0,canvas.width,canvas.height);
Plate.render();
for(var i =0; i < catsArr.length; i++){
catsArr[i].render();
}
//SCORE UI
ctx.font = "30px Tahoma";
ctx.fillStyle = "White";
ctx.fillText("score:"+score,50,50);
//GAME OVER UI
if(gameOver){
console.log("asma");
ctx.font = "50px Tahoma";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.fillStyle = "White";
ctx.fillText("GAME OVER",canvas.width/2,canvas.height/2);
}
};

จากนั้นทำการทดสอบรัน html จะต้องได้แบบนี้

--

--