Atölye › Sokoban › 24/29. adım
Şimdi fotoğrafları çekiyoruz: her hamleden hemen önce bir fotoğraf deftere girsin.
Ama sadece gerçekleşecek hamleler için! Engellenen bir hamle deftere girerse "geri al" boşa bir adım harcar. Bu
yüzden fotoğrafı bütün kontrollerden sonra çekeriz: kutu varsa itme kontrolünden sonra, kutu yoksa else içinde.
```js
if (box) {
const bx = x + dx
const by = y + dy
if (walls.has(key(bx, by)) || boxAt(bx, by)) return // a box cannot push into a wall or another box
history.push(snapshot())
box.x = bx
box.y = by
} else {
history.push(snapshot())
}
```history.push(snapshot()) → o anki fotoğrafı listenin sonuna ekler.if (box) içinde: duvar/kutu kontrolünden sonra, kutuyu kıpırdatmadan önce. Engellenen itiş daha önce
return ile çıktığı için fotoğraf çekilmez.} else { ... } → "değilse": kutu yoksa düz bir adım; onun da fotoğrafı çekilir.return ile çıktığı için deftere hiç girmez.move içinde box.x = bx satırının üstüne history.push(snapshot()) yaz.if (box) { ... } bloğunun kapanan }'sini } else { yap; altına history.push(snapshot()) ve kapanan } yaz.Beceriler: Diziler ve nesneler, Oyun durumları