Workshop › Battleship › Step 26 of 35

Hunt around a hit

What we are doing

Once the computer hits a ship, the rest of it must be next to that hit. Placements through a hit (of a ship not sunk yet) count 50 times more, and sunk ships are taken off the map like misses.

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

What it means

Your turn

  1. Add the two comment lines under the first comment line of heatMap, and the sunkCells line under const heat = grid(0).
  2. Extend the miss check with || sunkCells.has(cr * N + cc).
  3. Replace the heat[cr][cc] += 1 line with the hits line and the new sum.

Skills: Arrays and objects

All steps

  1. A 10 by 10 sea
  2. A function for any sea
  3. Your own sea
  4. Draw again and again
  5. Grids and ships as lists
  6. A random fleet
  7. Two fleets
  8. Which ship is here?
  9. Fire at a square
  10. Show the shots
  11. Your shot
  12. Tap to fire
  13. A message line
  14. Hit or miss?
  15. See your own fleet
  16. Sinking ships
  17. Darker hits on a sunk ship
  18. Outline sunk ships
  19. Win in as few shots as you can
  20. A record of their shots
  21. Take turns
  22. The computer shoots back
  23. You can lose too
  24. A heat map
  25. Shoot the hottest square
  26. Hunt around a hit
  27. See the heat map
  28. H for heat
  29. Show their ships at the end
  30. A keyboard cursor
  31. Move with the arrows
  32. Fire with Enter, play again
  33. Your best game
  34. A side panel
  35. Build it yourself: ships apart