Back to all posts

Run the Tic Tac Toe Game on Windows with NVDA

Download the game, start it with Docker Compose, play using the keyboard and NVDA, and stop the containers when you finish.

Watch the video

Loading this video connects you to YouTube (Google), which receives your IP address and may store or read information on your device for playback and advertising. YouTube may show ads. Choose Load YouTube video to allow this for this video. See Google's privacy policy.

Watch Play Tic Tac Toe on your own Computer while using a Screen Reader on YouTube

This walkthrough takes the tic tac toe project from GitHub to a game running on your own computer. I use Windows, the keyboard and NVDA. You can download a ZIP, so cloning with Git is optional.

Before you start

Follow Install Docker Desktop on Windows 11 with a Screen Reader first. Start Docker Desktop and let its engine finish starting. The earlier build the accessible game lesson explains where the project came from.

The August recording shows an earlier version of the game. The current repository README, checked September 16, also includes an API and database. Use its current setup instructions with today's download; the download, extract and Compose workflow remains the same.

Download and extract the project

Open the tic tac toe repository. In GitHub's Code menu, choose Download ZIP. In your Downloads folder, select the ZIP and use Extract All. Open the extracted folder, then the project folder containing README.md and compose.yaml. Do not run commands from inside the ZIP.

Open PowerShell or Windows Terminal in that project folder. In File Explorer, Alt+D focuses the address bar; entering powershell opens PowerShell at that location. Confirm the file is there before continuing:

Get-Location
Get-ChildItem compose.yaml

Start and check the services

Run these commands one at a time. The first start can take longer while Docker downloads images and builds the project:

docker compose up -d
docker compose ps

The current project has app, api and database services. Wait for their health checks to report healthy. The -d option starts them in the background. The development web server is reachable from other devices on your network, so only run it on a network you trust.

Open the game and play

In your browser's address bar, enter the address below. The correct port is 5173; I briefly say 5137 in the recording.

http://localhost:5173

Use Tab to move through the game's controls. Listen for the square's row, column and state, then activate an available square with Enter or Space. Follow the turn announcements, try a complete game, and use Play again to start over. In NVDA browse mode, H moves through headings; use NVDA+Space when you need to send keys directly to a focused control. The video has the full game so you can hear what NVDA announces.

If the page does not open

Check that Docker Desktop is running and your terminal is still in the folder with compose.yaml. Read the service status and recent app output:

docker compose ps
docker compose logs --tail=100 app

If a service is still starting, allow the build to finish. If there is an error, work from the first reported error. Changing just the browser address will not fix a port conflict; the project's README explains changing the host port.

Stop the project and come back later

From the same project folder, stop the project's containers:

docker compose down
docker compose ps

Normal down keeps the project's named data volumes. Adding --volumes would remove those volumes, so it is not part of this stopping routine. See Docker's Compose down reference. To return later, run docker compose up -d again and reopen the game address.

Next, I set up PostgreSQL in Docker so the game has a database ready for the API.

Analytics choices

May I use Google Analytics to understand which pages people read? If you accept, Google receives information about your visits and device, and stores analytics cookies in your browser. You can decline and still use the whole site.

If you close this dialog without choosing, analytics stays off and you will not be asked again on this device for 180 days. You can change your choice at any time using Analytics choices at the bottom of the page. Your choice is remembered for 180 days. Read the privacy policy.