Workshop › Tic-tac-toe › Step 32 of 33

A computer that never loses

What we are doing

computerMove no longer needs rules. For every free cell it places O, asks score how that ends with perfect play, undoes it, and keeps the best cell.

```js
function computerMove(cells) {
  let best = -1
  let bestScore = -Infinity
  for (let index = 0; index < 9; index++) {
    if (cells[index] !== '') continue
    cells[index] = 'O'
    const value = score(cells, 'X')
    cells[index] = ''
    if (value > bestScore) {
      bestScore = value
      best = index
    }
  }
  return best
}
```

What it means

Your turn

Delete the whole old computerMove (from its first line to its closing }) and write the new one in its place. The click listener stays the same.

Skills: Functions

All steps

  1. Get the canvas and the pen
  2. Paint the board
  3. The first grid line
  4. Repeat with a loop
  5. Finish the grid
  6. The board as a list
  7. A function that draws
  8. Write an X
  9. From cell number to position
  10. Draw what the board holds
  11. A color for each mark
  12. Make a move
  13. No playing on a taken cell
  14. Listen for clicks
  15. Which cell was clicked?
  16. Clicks on any screen size
  17. The eight winning lines
  18. Find three in a row
  19. Win, draw or go on
  20. The round ends
  21. Show who won
  22. Light up the winning line
  23. A function for a fresh round
  24. Click to play again
  25. A computer that picks a cell
  26. The computer answers
  27. Rule one: take the center
  28. Rule two: win when you can
  29. Rule three: block the opponent
  30. Score a finished game
  31. Look ahead: minimax
  32. A computer that never loses
  33. Build it yourself: keep score