Atölye › Sokoban › 16/29. adım

Kutu it

Ne yapıyoruz

Oyunun bütün kuralı tek cümle: bir kutuyu itebilirsin, ama yalnızca bir tane ve asla duvara doğru değil. Gideceğin karede kutu varsa, aynı yönde bir kare daha ötesine bakarsın:

@ $ .   →   . @ $    kutunun arkası boş: kutu ilerler, sen de
@ $ #   →   olmaz    kutunun arkasında duvar var
@ $ $   →   olmaz    arkasında başka kutu var: iki kutu itilemez

Ve kutuyu asla çekemezsin. Sokoban'ı bulmaca yapan bu: bir kutuyu köşeye itersen orada kalır.

```js
const box = boxAt(x, y)
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
  box.x = bx
  box.y = by
}
```

Ne işe yarıyor

Sıra sende

move içindeki if (boxAt(x, y)) return // pushing comes in the next step satırını sil, yerine itme bloğunu yaz (player = { x, y } satırının üstüne). Uzun if (walls.has(... satırını sonundaki yorumla birlikte yaz. Çalıştır, oyuna tıkla ve sağ oka bas: kutu hedefe gitmeli.

Beceriler: Oyun durumları, Çarpışma tespiti

Tüm adımlar

  1. Yazıyla çizilmiş bir bölüm
  2. Tuval ve kalem
  3. Depo zemini
  4. Çizen bir fonksiyon
  5. Her kareye bir ad
  6. Duvarları oku
  7. Duvarları çiz
  8. Bölümü ortala
  9. Hedefler
  10. Kutular
  11. Oyuncu
  12. İki bölüm daha
  13. Bir adım
  14. Oklarla yürü
  15. Kutular yolu kapatır
  16. Kutu it
  17. Hedefteki kutu yeşile döner
  18. Çözüldü!
  19. Sıradaki bölüme
  20. Hangi bölüm?
  21. Alttaki satır
  22. Hamleleri say
  23. Oyunun fotoğrafı
  24. Her hamleden önce fotoğraf
  25. Geri al
  26. Baştan başla
  27. Her bölüm için bir rekor
  28. Rekoru göster
  29. Kendin yap: itmeleri say