Atölye › Amiral Battı › 26/35. adım

İsabetin çevresini ara

Ne yapıyoruz

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

Ne işe yarıyor

Sıra sende

  1. 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.
  2. Iska kontrolündeki theirShots[cr][cc] === 'miss' koşulunun sonuna || sunkCells.has(cr * N + cc) ekle.
  3. 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.
  4. Çalıştır: bilgisayar bir gemini vurunca peşini bırakmayacak.

Beceriler: Diziler ve nesneler

Tüm adımlar

  1. 10'a 10 bir deniz
  2. Her deniz için bir fonksiyon
  3. Senin denizin
  4. Tekrar tekrar çiz
  5. Liste olarak ızgara ve gemi
  6. Rastgele bir filo
  7. İki filo
  8. Burada hangi gemi var?
  9. Bir kareye ateş et
  10. Atışları göster
  11. Senin atışın
  12. Dokun ve ateş et
  13. Bir mesaj satırı
  14. İsabet mi, ıska mı?
  15. Kendi filonu gör
  16. Gemi batırmak
  17. Batık gemide koyu isabetler
  18. Batık gemilerin çerçevesi
  19. En az atışla kazan
  20. Onların atışlarının kaydı
  21. Sırayla
  22. Bilgisayar karşılık veriyor
  23. Kaybetmek de var
  24. Isı haritası
  25. En sıcak kareye ateş
  26. İsabetin çevresini ara
  27. Isı haritasını gör
  28. Isı için H
  29. Sonunda gemilerini göster
  30. Klavye imleci
  31. Oklarla gez
  32. Enter ile ateş, yeniden oyna
  33. En iyi oyunun
  34. Yan panel
  35. Kendin yap: gemiler ayrı