     playerX.setup -> playerO.setup -> next()
 
   teardown = ->
-    playerX?.end?()
-    playerO?.end?()
+    playerX?.teardown?()
+    playerO?.teardown?()
     hideSpinner()
     $ '.tic-tac-toe'
       .removeClass 'x-won-board'

      [(int match[1]), (int match[2])]
    setup: (done) -> done()
    play: ->
      unplayable()
      markWins()
      return if checkGameOver()
      playableClassName = playable()
      $ ".#{playableClassName}"

  createPlayerO = -> computerPlayer()

  # player :: {
  #   setup : (done: ->) ->
  #   teardown : ->
  #   play : ->
  #   toString : -> Str
  # }

  next = ->
    unplayable()
    markWins()
    player = if game.nextPlayer is X then playerX else playerO
    player.play()

