Atölye › Scorched Earth Tarzı Topçu › 19/23. adım
Bilgisayar hayal ederek nişan alsın. Kafasında yaklaşık 17 açı × 17 güç = neredeyse 300 atış denesin; gerçek
mermilerle aynı fly fonksiyonunu (gerçek rüzgârla) kullanarak. Sana en yakın düşeni hatırlasın. Sonra bilerek
biraz şaşırsın; yoksa hiç ıskalamazdı.
```js
// The computer tries many shots in its head, picks the one landing closest to you, then misses a little.
function computerAim() {
const me = tanks[1]
let best = null
for (let angle = -Math.PI + 0.2; angle < -Math.PI / 2; angle += 0.03) {
for (let power = 4; power <= MAX_POWER; power += 0.5) {
const s = { x: me.x + Math.cos(angle) * 14, y: me.y - 8 + Math.sin(angle) * 14, vx: Math.cos(angle) * power, vy: Math.sin(angle) * power }
let hit = null
for (let i = 0; i < 400 && !hit; i++) hit = fly(s)
if (hit === 'away') continue
const miss = Math.abs(s.x - tanks[0].x)
if (!best || miss < best.miss) best = { miss, angle, power }
}
}
me.angle = best.angle + (Math.random() - 0.5) * 0.08
me.power = Math.min(MAX_POWER, best.power + (Math.random() - 0.5) * 0.8)
}
computerAim()
```angle → neredeyse dümdüz soldan (−180° + 0.2) dümdüz yukarıya (−90°) kadar; power → 4'ten 12'ye.s → hayalî bir mermi, gerçeği gibi namlunun ucundan. fly(s) onu kare kare uçurur; bir şeye çarpana kadar
(en fazla 400 kare). Aynı fonksiyonu kullanmak, hayalin gerçekle aynı fiziğe uymasını sağlar.if (hit === 'away') continue → ekrandan çıkan atışı unut.miss → sana ne kadar uzağa düştü; en küçüğü best olur.update'in üstüne yorumuyla computerAim fonksiyonunu yaz.update'te bilgisayarın fire() satırının üstüne computerAim() yaz. Çalıştır ve oyna.Beceriler: Hız ve yerçekimi, Döngüler