Atölye › Bomberman Tarzı Arena › 11/42. adım
Izgara oyununda oyuncu hep bir kareye basar, ama kareden kareye zıplamamalı; kaymalı. Bunun için hareketi karardan ayıracağız: bir hedef kare seçilir (bir sonraki adım), sonra oyuncu her karede ona doğru küçük bir adım atar.
moveTo o küçük adımı atar: hedefe doğru speed kadar. Hedefe bir adımdan yakınsa tam üstüne oturur ve hedefi
bırakır. Düşmanlar da ileride aynı fonksiyonla yürüyecek.
```js
const SPEED = 0.1 // tiles per frame
// Step a mover towards its target tile, and drop the target once it is there.
function moveTo(m, speed) {
const dx = m.target.c - m.x
const dy = m.target.r - m.y
if (Math.abs(dx) <= speed && Math.abs(dy) <= speed) {
m.x = m.target.c
m.y = m.target.r
m.target = null
return
}
m.x += Math.sign(dx) * speed
m.y += Math.sign(dy) * speed
}
```const SPEED = 0.1 → oyuncunun karede aldığı yol: 0.1 kare. Bir kare 10 karede (frame) geçilir.const dx = m.target.c - m.x → hedef ne kadar sağda (eksiyse solda). dy aynısı dikeyde.if (Math.abs(dx) <= speed && Math.abs(dy) <= speed) { → iki uzaklık da bir adımdan küçükse (Math.abs eksiyi
atar):m.x = m.target.c ve m.y = m.target.r → tam hedefin üstüne otur (0.1'lik adımlar 1.9999 gibi küsuratlar
bırakabilir; bu onları temizler).m.target = null → hedef yok. return → fonksiyondan çık.m.x += Math.sign(dx) * speed → Math.sign sayının yalnız işaretini verir: artıysa 1, eksiyse −1, sıfırsa 0.
Yani hedefe doğru tam speed kadar adım.const TOP = ... satırının altına SPEED satırını yaz.document.addEventListener('keydown', ...) satırının üstüne yorumu ve moveTo fonksiyonunu yaz.moveTo'yu bir sonraki adımda kullanacağız.Beceriler: Oyun durumları