33-关卡和游戏结束
8.12.3 关卡和游戏结束
需要检查游戏和关卡是否结束,这样才能判断是否开始一个新游戏或新关卡。
1.关卡结束
在每帧中检查关卡是否结束。以下是用于检查关卡是否结束的函数。
function checkForEndOfLevel(){
if (rocks.length==0){
switchGameState(GAME_STATE_NEW_LEVEL);
}
}
一旦rocks数组的长度等于0,就把游戏状态切换为GAME_STATE_NEW_LEVEL。
2.游戏结束
不需要在每一帧都检查游戏是否结束,只需要在玩家失去一艘飞船时进行检查就足够了。在gameStatePlayerDie()函数中可以实现这个功能。
function gameStatePlayerDie(){
if (particles.length >0 || playerMissiles.length>0){
fillBackground();
renderScoreBoard();
updateRocks();
updateSaucers();
updateParticles();
updateSaucerMissiles();
updatePlayerMissiles();
renderRocks();
renderSaucers();
renderParticles();
renderSaucerMissiles();
renderPlayerMissiles();
frameRateCounter.countFrames();
}else{
playerShips--;
if (playerShips<1){
switchGameState(GAME_STATE_GAME_OVER);
}else{
resetPlayer();
switchGameState(GAME_STATE_PLAYER_START);
}
}
}
当游戏处于GAME_STATE_PLAYER_DIE状态时,程序将在每一帧中调用这个状态函数。函数会先检查屏幕上是否还有碎片。这样可以确保游戏在玩家飞船爆炸结束之后才终止。还需要检查导弹,以确保所有导弹的生命都已终结。这样做就可以检查到所有playerMissile与陨石和飞碟之间的碰撞。这样,玩家就有可能在最后一艘飞船爆炸时获得另外的奖励飞船。
一旦所有碎片和导弹都从屏幕上消失,就将playerShips变量减1。如果playerShips小于1,则切换到GAME_STATE_GAME_OVER状态。