Atölye › Missile Command Tarzı Savunma › 7/35. adım
Düşman füzeleri geliyor. Her füze gökyüzünün üst kenarında rastgele bir noktadan çıkacak ve yine rastgele seçilmiş bir hedefe yönelecek: hâlâ ayakta olan bir şehre ya da senin üssüne.
launch (fırlat) bir füze yapıp incoming (gelenler) listesine ekleyecek. Füze nereden başladığını (sx, sy),
şu an nerede olduğunu (x, y) ve nereye gittiğini (tx, ty) hatırlayacak. Bu adımda füzeleri henüz kimse
fırlatmıyor.
```js
let incoming // enemy missiles: { sx, sy, x, y, tx, ty, speed }
incoming = []
// A new enemy missile from a random point at the top towards a random living city (or the base).
function launch() {
const sx = Math.random() * canvas.width
const targets = cities.filter((c) => c.alive).map((c) => c.x).concat(BASE.x)
const tx = targets[Math.floor(Math.random() * targets.length)]
incoming.push({ sx, sy: 0, x: sx, y: 0, tx, ty: GROUND, speed: 0.8 })
}
```Math.random() → 0 ile 1 arasında rastgele bir sayı. * canvas.width ile 0–480 arasında rastgele bir x olur.cities.filter((c) => c.alive) → yalnız ayaktaki şehirleri tutan yeni bir liste..map((c) => c.x) → her şehrin yerine onun x'ini koyar: bir sayı listesi..concat(BASE.x) → listenin sonuna üssün x'ini de ekleyen yeni bir liste verir.Math.floor(Math.random() * targets.length) → .length listenin eleman sayısı; Math.floor aşağı yuvarlar.
Sonuç 0 ile (sayı − 1) arasında rastgele bir sıra numarası. Listeden rastgele eleman seçmenin kalıbı bu.incoming.push({ ... }) → yeni füze: başlangıç (sx, 0), şu anki yer de aynı, hedef (tx, GROUND), hız 0.8
piksel/kare. { sx, tx } yine kısaltma: sx: sx.let cities satırının altına yorumuyla birlikte let incoming yaz.reset içinde cities = ... satırının altına incoming = [] yaz.// Move a point ... yorumunun üstüne launch fonksiyonunu yorumuyla birlikte yaz; altında bir boş satır kalsın.Beceriler: Diziler ve nesneler
← Bir noktaya doğru ilerle Saniyede bir füze →