Atölye › Sokoban › 25/29. adım
Defter hazır; şimdi geri alıyoruz. undo (geri al) son fotoğrafı defterden çıkarır ve oyuncuyu, kutuları ve
hamle sayısını o fotoğraftaki hâline döndürür. Z tuşu onu çağıracak.
"Sona ekle, sondan al" diye çalışan listeye yığın (stack) denir; üst üste konmuş tabaklar gibi: en son koyduğun tabağı ilk alırsın. Geri alma için tam uygun: en son hamle ilk geri alınır.
```js
function undo() {
const previous = history.pop()
if (!previous) return
;({ player, boxes, moves } = JSON.parse(previous))
}
if (event.key.toLowerCase() === 'z') undo()
```history.pop() → listenin son elemanını çıkarır ve verir. Liste boşsa undefined verir.if (!previous) return → ! "değil": fotoğraf yoksa hiçbir şey yapma.JSON.parse(previous) → yazıyı yeniden nesneye çevirir (stringify'ın tersi).({ player, boxes, moves } = ...) → "gelen nesnedeki player'ı player'a, boxes'ı boxes'a, moves'u moves'a
koy". Üç değişken tek satırda geri gelir.; ve dıştaki parantezler şart: satır { ile başlasaydı JavaScript onu bir kod bloğu sanırdı.event.key.toLowerCase() === 'z' → basılan tuşu küçük harfe çevirip sorar; Caps Lock açıkken gelen 'Z' de
çalışır.move fonksiyonunun kapanan }'sinin altına bir boş satır bırakıp undo fonksiyonunu yaz.keydown dinleyicisinde ok tuşlarının if bloğunun kapanan }'sinin altına z satırını yaz.Beceriler: Diziler ve nesneler, Oyun durumları
← Her hamleden önce fotoğraf Baştan başla →