Atölye › Missile Command Tarzı Savunma › 11/35. adım
Füze hedefine varınca iki şey olsun: hedefteki şehir yıkılsın ve füze listeden çıksın.
Varan füzeyi hemen listeden silmek yerine önce done (bitti) diye işaretleyeceğiz, döngü bitince işaretlileri
toptan atacağız. Bir listeyi gezerken ondan eleman silmek, bazı elemanların atlanmasına yol açar.
```js
for (const m of incoming) {
if (stepTowards(m, m.speed)) {
m.done = true
const city = cities.find((c) => c.alive && Math.abs(c.x - m.x) < 20)
if (city) city.alive = false
}
}
incoming = incoming.filter((m) => !m.done)
```if (stepTowards(m, m.speed)) → adımı at; fonksiyon true döndürdüyse (füze vardıysa)...m.done = true → füzeyi "bitti" diye işaretle. Nesneye sonradan yeni bir alan eklenebilir.cities.find((c) => c.alive && Math.abs(c.x - m.x) < 20) → füzenin 20 piksel yakınındaki ilk ayakta şehri bul.
Math.abs sayının eksisiz hâli: iki x arasındaki uzaklık. Bulamazsa undefined verir (füze üsse düştüyse).if (city) city.alive = false → bir şehir bulunduysa onu yık.incoming.filter((m) => !m.done) → döngüden sonra yalnız bitmemiş füzeleri tutan yeni liste. ! "değil".update içindeki füze döngüsünde stepTowards(m, m.speed) satırını kodda görüldüğü gibi bir if bloğuna çevir;
döngünün kapanış }'inin altına da filter satırını yaz. Çalıştır ve bekle: vurulan şehirler enkaza dönmeli.
Beceriler: Çarpışma tespiti, Oyun durumları
← Duman izleri Önleyici ateşle →