Atölye › Kule Savunması › 7/42. adım

Mesafeyle yürümek

Ne yapıyoruz

Köşeli bir yolda bir şeyi nasıl yürütürsün? "Köşeye kadar sağa git, sonra aşağı dön" diye yönlendirmek çabucak karışır. Çok daha basit bir fikir var: her düşmana tek bir sayı ver: d, yol boyunca yürüdüğü mesafe (kare olarak). Yürümek sadece d'yi büyütmek olur.

pointAt(d) bu mesafeyi haritada bir noktaya çevirir: yolun düz parçalarını sırayla dener; d o parçaya sığıyorsa oradaki noktayı verir, sığmıyorsa parçanın boyunu düşüp sonrakine geçer. Yolun sonunu geçtiyse null.

Bu fikre yolu parametrelemek denir ve çok işe yarar: "geçmeye en yakın düşman hangisi?" en büyük d'dir; "geçip gitti mi?" ise pointAt(d) === null.

```js
// Where on the road an enemy is after walking `d` tiles (null once it is past the end).
function pointAt(d) {
  for (let i = 1; i < PATH.length; i++) {
    const [ax, ay] = PATH[i - 1]
    const [bx, by] = PATH[i]
    const length = Math.abs(bx - ax) + Math.abs(by - ay)
    if (d <= length) return { x: ax + Math.sign(bx - ax) * d, y: ay + Math.sign(by - ay) * d }
    d -= length
  }
  return null
}
```

Ne işe yarıyor

Sıra sende

  1. reset fonksiyonunun kapanan }'sinin altında bir boş satır bırakıp yorumu ve pointAt'i yaz.
  2. Çalıştır: ekranda fark yok; kontroller yeşil olmalı.

Beceriler: Fonksiyonlar

Tüm adımlar

  1. Haritayı ölç
  2. Karelerden bir harita
  3. Her karede çiz
  4. Köşelerden yol
  5. Yolu doldur
  6. Yolu çiz
  7. Mesafeyle yürümek
  8. Yoldaki düşmanlar
  9. Yürü
  10. Yolun sonundan çıkış
  11. İşte geliyorlar
  12. Kuleler
  13. Tıklamadan kareye
  14. Tıkla ve kur
  15. Nereye kurabilirsin?
  16. Altını göster
  17. Tıklamadan önce göster
  18. Menzili göster
  19. Hedef seç
  20. Ateş!
  21. İsabet acıtır
  22. Güdümlü mermiler
  23. Sönen mermi
  24. Her av için altın
  25. Canlar
  26. Can çubukları
  27. Önce kur, sonra savun
  28. Boşluk dalgayı başlatır
  29. Dalga bitti
  30. Her dalga daha güçlü
  31. Daha sık
  32. Can bitti
  33. Oyun bitince kurmak yok
  34. En çok dayanılan dalga
  35. Oyun bitti ekranı
  36. Yeniden oyna
  37. Alt çubuk
  38. Tıklayarak başlat
  39. İkinci kule: top
  40. Kule düğmeleri
  41. Alan hasarı
  42. Kendin yap: kule sat