Atölye › Sokoban › 23/29. adım
Sokoban'da tek bir dikkatsiz itiş bölümü çözülemez yapabilir. Tek hata için bütün bölümü baştan oynamak can sıkar; bu yüzden geri alma ekleyeceğiz.
Yöntem: her hamleden önce oyunun bir fotoğrafını çekip bir deftere koymak. Geri alırken son fotoğrafı çıkarıp
her şeyi ona göre geri koyarız. Bu adımda fotoğraf makinesini (snapshot) ve boş defteri (history) hazırlıyoruz.
```js
let history
history = []
function snapshot() {
return JSON.stringify({ player, boxes, moves })
}
```let history → fotoğraf defteri (geçmiş). loadLevel içinde history = []: her bölümde boş başlar.{ player, boxes, moves } → üç değeri tek pakette toplayan bir nesne ({ player: player, ... }'nin kısası). Bir
hamlenin değiştirebileceği her şey bunlar.JSON.stringify(...) → nesneyi yazıya çevirir: '{"player":{"x":1,"y":1},"boxes":[...],"moves":0}'.boxes listesinin kendisini deftere koysaydık, defterde aynı listeye bir işaret olurdu; sonraki itiş
kutuyu değiştirince "kaydedilmiş" hâl de değişirdi. Yazı ise gerçek bir kopya: fotoğrafın kâğıda basılmış hâli
gibi, sonradan değişmez.let moves satırının altına let history yaz.loadLevel içinde moves = 0 satırının altına history = [] yaz.function move(dx, dy) { satırının üstüne snapshot fonksiyonunu yaz; arada bir boş satır kalsın.Beceriler: Oyun durumları
← Hamleleri say Her hamleden önce fotoğraf →