12
opponents
A ladder of blunder rates — every card shows its own.
3
ways to play
The computer, two chairs at this screen, or a friend on a link.
1
cannot lose
LETHAL plays perfectly, 0% blunders — against him a draw is the win.
Choose an opponent, then New game
LIVE MATCH
Play someone over the wire — a link or the code. You take X.
Controls
Game
Engine
Clock
Board
—
Engine
- Minimax with alpha-beta pruning, full width, depth-limited per opponent
- Win scores are depth-adjusted, so it takes the fastest win available and the longest loss — it will not dawdle over a mate it already has, or walk into one a move early
- A small centre bonus breaks ties between otherwise equal moves
What separates the twelve
- Tic-tac-toe is a solved game. A perfect player can never lose, so a ladder built only on search depth is a ladder where every rung plays the same. The twelve differ by a blunder rate: the chance of playing a random legal move instead of the best one
- Every card shows its own rate. LETHAL is 0% and cannot be beaten — against it a draw is the win
- Search depth still varies (4 to 6) and still matters in the opening, where a shallow search can miss a fork one ply past its horizon
The board
- Three rules and nine cells: the grid is the
gapbetween the cells, not a border on every third one - X and O are stroked SVG, so they hold their shape and weight at any size and draw themselves on
- The winning three are marked on the board and struck through in the winner's own colour
Playing without a mouse
- Tab to a cell, Enter or Space to play it. Arrow keys walk the grid
- Escape closes the result overlay; the status line is announced as it changes
New in v5.1
- Live match — two devices over the wire, invite by link or code, visitor links for spectators, the clock carried with the game
New in v5.0
- Its own address at
labs.llc/tictactoe/— paper is the front door, the dark room isindexdark.html, the old URLs forward - Pass & play — two people, one screen, X and O taking turns holding it
- Time controls sized for a nine-cell game: ∞, 10s, 30s, 1m per side, with the flag falling for whoever runs dry
Changed in v4.0
- The nine visual themes are gone, and with them the runtime colour injection they needed — one palette, plain CSS, both editions
- Undo used to call
lastIndexOfon the board array, which finds the highest index holding a mark and not the last move played. There is a real move history now - The board was a checkerboard at 1.19:1; the marks were text with a five-layer glow; the winning line was never shown; the board could not be played from the keyboard
- Preferences persist. Board colours are shared with chess and checkers