Atölye › Sokoban › 15/29. adım
Oyuncu kutunun üstüne çıkmamalı. Önce bir soru fonksiyonu yazacağız: boxAt(x, y), "bu karede kutu var mı, varsa
hangisi?" Duvarlar için kümeye soruyorduk; kutular bir listede, orada aramamız gerekiyor.
Şimdilik kutu da duvar gibi yolu kapatacak. İtmeyi bir sonraki adımda yazacağız.
```js
function boxAt(x, y) {
return boxes.find((box) => box.x === x && box.y === y)
}
function move(dx, dy) {
const x = player.x + dx
const y = player.y + dy
if (walls.has(key(x, y))) return
if (boxAt(x, y)) return // pushing comes in the next step
player = { x, y }
}
```boxes.find((box) => ...) → listede koşula uyan ilk elemanı bulur; hiçbiri uymazsa undefined (yok) verir.box.x === x && box.y === y → kutunun x'i verilen x'e ve (&&) y'si verilen y'ye eşit mi?return → bulunan kutuyu fonksiyondan geri verir. Çağıran yer onu kullanabilir.if (boxAt(x, y)) return → kutu varsa (undefined değilse) if girer: adım yok. undefined if için "yanlış"
sayılır.function move(dx, dy) { satırının üstüne boxAt fonksiyonunu yaz; arada bir boş satır kalsın.move içinde duvar satırının (if (walls.has(...)) return) altına kutu satırını yaz.Beceriler: Diziler ve nesneler, Çarpışma tespiti