Workshop › Battleship › Step 16 of 35

Sinking ships

What we are doing

A ship sinks when every one of its squares has been hit. Each ship counts its hits; fire says 'sunk' when a hit sinks it, and the message tells you.

```js
let enemyFleet // ships: { cells: [[r, c], ...], hits }

      return { cells, hits: 0 }

const sunk = (ship) => ship.hits === ship.cells.length

  ship.hits += 1
  return sunk(ship) ? 'sunk' : 'hit'

  message = result === 'miss' ? 'Miss' : result === 'hit' ? 'Hit!' : 'You sank a ship!'
```

What it means

Your turn

  1. Add , hits to the let enemyFleet comment and , hits: 0 to the ship placeFleet returns.
  2. Under shipAt, write sunk.
  3. In fire, change the end as shown.
  4. In playerShoots, change the message line.

Skills: Game states

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