Noughts and Crosses

Help

How to play noughts and crosses here, what to do if something does not work, and how this site is looked after. No technical knowledge needed.

How to play

  1. Choose who you are playing under Opponent: Two players shares one screen, Computer plays against you (the game starts in this mode).
  2. Against the computer, choose whether you play Crosses (first) or Noughts, and how strong it is: a number from 1 (gentle, makes lots of mistakes) to 10 (never makes a mistake, so the best you can do against it is draw). The default is 5.
  3. Click (or tap) an empty square to put your mark there. Crosses always go first.
  4. The first to get three of their marks in a row, across, down or diagonally, wins. The three winning squares are lit up.
  5. If all nine squares fill up with no line, it is a draw.
  6. Press Undo to take back your last move (against the computer, its reply too), or New game to start again. The score for this visit is kept until you close or reload the page.

You can also play with the keyboard. The board is a single stop in the Tab order: press Tab once to reach it, then use the arrow keys to move between squares (Home and End jump to the ends of a row). Press Enter or Space to put your mark on the square you are on. Your place on the board is kept while the computer is moving. Press Tab again to leave the board for the buttons.

The rules in short

If something does not work

How the site is looked after

This is a MediaWright site. The game runs entirely in your browser: it stores nothing about you, uses no cookies and has no adverts or trackers. The only outside service it uses is Google Fonts for the lettering.

Every change to the site is tested before it goes live, and each one is recorded, with its build number, on the site updates page. If you find a security problem, please follow the security policy.

For the team

The technical details are in the project README: how to build the site (npm run build), how to test it (npm test for the rules and build checks, npm run test:e2e for a real browser, including the accessibility scan) and how changes reach the live site (a pull request, checked automatically, then merged into main).