Atölye › Kule Savunması › 20/42. adım
Kuleler her karede ateş etmez; öyle olsa saniyede 60 mermi atarlardı. Her kulenin bir soğuma sayacı (cooldown)
var: her karede azalır; sıfıra inince, bir hedefi varsa kule bir mermi atar ve sayaç türün reload değerinden
(24 kare) yeniden başlar.
Her şeye bir zamanlayıcı, update içinde geri sayılır: oyunlardaki her silah ve büyü bu fikirle çalışır. Mermiler şimdilik
kulede duracak; uçmayı bir sonraki adımlarda yazacağız.
```js
let bullets
bullets = []
for (const t of towers) {
t.cooldown -= 1
if (t.cooldown > 0) continue
const target = targetFor(t)
if (!target) continue
bullets.push({ x: t.col, y: t.row, target, kind: t.kind })
t.cooldown = TOWERS[t.kind].reload
}
ctx.fillStyle = '#fef08a'
for (const b of bullets) {
ctx.beginPath()
ctx.arc((b.x + 0.5) * TILE, TOP + (b.y + 0.5) * TILE, 4, 0, Math.PI * 2)
ctx.fill()
}
```let bullets → uçan mermiler; reset içinde boş.t.cooldown -= 1 → soğuma geri sayımı.if (t.cooldown > 0) continue → hâlâ soğuyorsa continue: döngünün geri kalanını bu kule için atla, sıradaki
kuleye geç.const target = targetFor(t) → hedef; if (!target) continue → kimse menzilde değilse atla.bullets.push({ x: t.col, y: t.row, target, kind: t.kind }) → kulenin karesinden yeni bir mermi; hedefini ve
hangi kuleden çıktığını hatırlar.t.cooldown = TOWERS[t.kind].reload → sayaç yeniden 24'ten başlar.'#fef08a'), 4 yarıçaplı küçük daireler; düşmanlardan sonra.let towers satırının altına let bullets yaz; reset içinde towers = [] satırının altına bullets = [] yaz.update'in sonuna, bir boş satırdan sonra kule döngüsünü yaz.draw içinde düşman döngüsünden sonra bir boş satır bırakıp mermi çizimini yaz.Beceriler: Oyun durumları, Oyun döngüsü