Atölye › Amiral Battı › 26/35. adım
Bilgisayar bir gemiyi vurduğunda, geminin geri kalanı o isabetin yanında olmalı. İnsan oyuncu da öyle yapar: isabet alınca çevresini tarar. Bunu ısı haritasına öğretiyoruz: bir isabetin (henüz batmamış gemi) üstünden geçen yerleşimler 50 kat fazla puan versin. Batmış gemilerin kareleri de ıska gibi yasak olsun: orada başka gemi yok.
```js
// Every placement that avoids misses and sunk ships adds 1 to each of its squares; placements through a hit that
// is not sunk yet are far more likely, so they count much more. The most counted square is the best shot.
const sunkCells = new Set(myFleet.filter(sunk).flatMap((s) => s.cells.map(([r, c]) => r * N + c)))
if (cells.some(([cr, cc]) => theirShots[cr][cc] === 'miss' || sunkCells.has(cr * N + cc))) continue
const hits = cells.filter(([cr, cc]) => theirShots[cr][cc] === 'hit').length
for (const [cr, cc] of cells) heat[cr][cc] += 1 + hits * 50
```myFleet.filter(sunk) → batmış gemiler. flatMap hepsinin karelerini tek bir listede toplar.r * N + c → bir kareyi tek sayıya çevirir: (3, 7) → 37. İki sayıyı bir arada aramaktan kolay.new Set(...) → küme: bir şeyin içinde olup olmadığını (has) çok hızlı söyler.|| sunkCells.has(cr * N + cc) → yerleşim batmış bir gemiye denk geliyorsa da atla.const hits = cells.filter(...).length → bu yerleşimin karelerinden kaçı isabet.1 + hits * 50 → isabetten geçmeyen yerleşim 1, bir isabetten geçen 51, ikisinden geçen 101 puan ekler. Böylece
isabetin yanındaki kareler çok ısınır.heatMap'in üstündeki yorumun altına iki yorum satırını daha yaz; const heat = grid(0) satırının altına
sunkCells satırını yaz.theirShots[cr][cc] === 'miss' koşulunun sonuna || sunkCells.has(cr * N + cc) ekle.for (const [cr, cc] of cells) heat[cr][cc] += 1 satırının üstüne hits satırını yaz ve += 1 yerine
+= 1 + hits * 50 yaz.Beceriler: Diziler ve nesneler
← En sıcak kareye ateş Isı haritasını gör →