Atölye › Space Invaders Tarzı › 12/21. adım

Karşılık veriyorlar

Ne yapıyoruz

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)
```

Ne işe yarıyor

Sıra sende

  1. let dir satırının üstüne let bombs = [] yaz.
  2. march fonksiyonunun altına yorum satırıyla birlikte dropBomb fonksiyonunu yaz.
  3. update'te march() satırının altına bomba satırını yaz.
  4. draw'da mermileri çizen satırın hemen altına bombaları çizen iki satırı yaz.
  5. Çalıştır: istilacıların altında turuncu bombalar belirmeli.

Beceriler: Diziler ve nesneler, Oyun durumları

Tüm adımlar

  1. Gemi
  2. Oyun döngüsü
  3. Gemiyi oynat
  4. Ekranda kal
  5. Ateş
  6. Mermiler uçuyor
  7. Kısa bir dolum
  8. İstilacılar
  9. Yürüyüş
  10. Vurdun!
  11. Puan
  12. Karşılık veriyorlar
  13. Bombalar düşüyor
  14. Canlar
  15. Oyun bitti
  16. En iyi puan
  17. Dalga bir fonksiyonda
  18. Yeniden oyna
  19. Dalgalar
  20. Gittikçe hızlanan
  21. Kendin yap: fazladan can