Atölye › Zelda Tarzı Zindan › 19/22. adım
Son kalbi kaybetmek oyunu bitirsin: her şey dursun, karanlık bir ekran bunu söylesin; Boşluk (ya da bir dokunuş) yeniden başlatsın. Ekran kaçıştan sonra ne diyeceğini de şimdiden biliyor; merdiven sonraki adımda.
```js
let state // 'playing', 'won' or 'over'
state = 'playing'
if (state !== 'playing') return
if (hearts === 0) state = 'over'
if (state !== 'playing') reset()
else if (swing === 0) swing = 12
if (state !== 'playing') {
reset()
return
}
if (state !== 'playing') {
ctx.fillStyle = 'rgba(12, 10, 9, 0.75)'
ctx.fillRect(0, 0, canvas.width, canvas.height)
ctx.fillStyle = 'white'
ctx.textAlign = 'center'
ctx.font = 'bold 28px sans-serif'
ctx.fillText(state === 'won' ? 'You escaped in ' + seconds(frames) + ' s!' : 'Game over', canvas.width / 2, 190)
ctx.font = '16px sans-serif'
ctx.fillText('Press Space to play again', canvas.width / 2, 222)
}
```update'in başındaki satır → oynanmıyorsa hiçbir şey hareket etmez; süre de donar.if (hearts === 0) state = 'over' → son kalp gidince.reset(); dokunuşta return → pede ya da kılıca geçme.state === 'won' ? ... : 'Game over' → kazanınca süreyi, kaybedince "Game over" yazar.let frames üstüne state, reset'te frames = 0 altına state = 'playing' yaz.update'in en üstüne durdurma satırını; dokunma bloğunda hurt = 60 altına oyun bitti satırını yaz.keydown'da sallama satırının üstüne yeniden başlatma satırını yazıp sallamayı else if yap; dokunmada const y
altına yeniden başlatma bloğunu yaz.draw'ın sonuna bitiş ekranını yaz. Çalıştır.Beceriler: Oyun durumları