Atölye › Space Invaders Tarzı › 12/21. adım
Artık istilacılar da bomba atsın. Bazı yürüyüş adımlarında (%35'inde) rastgele bir sütun ateş etsin. O sütunda yalnız en alttaki istilacı atabilsin; yoksa bomba arkadaşlarının içinden geçerdi. Bombalar turuncu. Bu adımda bombalar oluşup çiziliyor; düşmelerini sonraki adımda ekliyoruz.
```js
let bombs = []
// Only the lowest invader in a column can fire, so bombs never pass through other invaders.
function dropBomb() {
const living = alive()
const shooter = living[Math.floor(Math.random() * living.length)]
const lowest = living.filter((invader) => invader.x === shooter.x).reduce((a, b) => (b.y > a.y ? b : a))
bombs.push({ x: lowest.x + INVADER_W / 2 - 2, y: lowest.y + INVADER_H, w: 4, h: 10 })
}
if (Math.random() < 0.35) dropBomb()
ctx.fillStyle = '#fb923c'
for (const bomb of bombs) ctx.fillRect(bomb.x, bomb.y, bomb.w, bomb.h)
```living[Math.floor(Math.random() * living.length)] → yaşayanlardan rastgele biri: sütunu o seçiyor.filter((invader) => invader.x === shooter.x) → aynı x'teki istilacılar, yani o sütun (hepsi birlikte yürüdüğü
için sütundakilerin x'i hep aynı)..reduce((a, b) => (b.y > a.y ? b : a)) → sütunu gezip y'si en büyük olanı (ekranda en alttakini) tutar.if (Math.random() < 0.35) → her yürüyüş adımında %35 ihtimalle bomba.let dir satırının üstüne let bombs = [] yaz.march fonksiyonunun altına yorum satırıyla birlikte dropBomb fonksiyonunu yaz.update'te march() satırının altına bomba satırını yaz.draw'da mermileri çizen satırın hemen altına bombaları çizen iki satırı yaz.Beceriler: Diziler ve nesneler, Oyun durumları