← Back to Projects
Tic-Tac-Toe Showdown key art
Unity Game · Solo Project

Tic-Tac-Toe Showdown

Three in a row, partner! Noughts and crosses played in a Wild West corral at sunset.

Engine
Unity 6 (URP)
Platforms
  • Android
  • WebGL
Genre
Board / party game
Modes
  • vs AI
  • Pass & play
  • Online
Role
Solo developer
Year
2026

01The Game

This is a complete mobile rebuild of the Tic-Tac-Toe game from Family Games, turned into a Wild West showdown. It’s planks and nails for X against a lasso rope for O, on a wooden board inside a roped-off corral, with swaying cacti, rolling tumbleweeds and mesas in the distance.

It keeps the original online multiplayer, talking to the same server and the same game, so people playing on their phones and people playing on the web end up in the same rooms. On top of that, it adds an outlaw AI, new modes, series play and a quick-draw timer.

A classic, re-dressed

The rules everyone already knows, with a whole world built around them.

Depth for regulars

Tumbleweed and Big Ranch modes, series, timers and a proper AI to beat, so regular players have plenty to dig into.

Play anyone, anywhere

Play against the AI, pass one phone back and forth with a friend, or go online against people playing on the web.

02Screenshots

These screenshots were captured straight from the game. Tap any of them to see it bigger.

03Core Loop

  1. 1

    Pick a showdown

    Choose Classic 3×3, Tumbleweed or 5×5 Big Ranch, and play against the AI, a friend or an online posse.

  2. 2

    Draw

    Drag to aim and place your mark, with an optional quick-draw timer for each turn.

  3. 3

    Outsmart

    Use hints and undo, or keep an eye on the flickering mark that’s about to blow away.

  4. 4

    Win the series

    Play best of 3 or best of 5, with lifetime stats and win streaks.

04Key Features

Outlaw AI

Greenhorn, Deputy and Sheriff difficulty levels, powered by alpha-beta search.

Three modes

Classic, Tumbleweed (once you have 3 marks on the board, your oldest one blows away) and Big Ranch, a 5×5 board where you need four in a row.

Online Posse

Public and private rooms you can join with a code or an invite link, reactions shown in speech bubbles, rematches and automatic reconnection.

Every phone shape

Portrait, square and landscape layouts that switch on the fly, all the way down to the cover screens on flip phones.

Country soundtrack

Music for the menu, the match and the quick-draw timer, with wood, rope, whip and coin sounds on every interaction.

Game feel

Vibration, screen shake, puffs of dust, a shower of coins and a brass sheriff’s star trophy.

05What I Built

I made this game on my own, so I handled the design, the code, the art pipeline, the audio and the release.

  • I designed the new modes, the series play and the quick-draw timer.
  • I wrote the rules engine and the alpha-beta AI in pure C#, with unit tests.
  • I built the network client, a REST and WebSocket port of the web client, plus a SignalR rooms hub for the arcade.
  • I generated all the 3D assets and UI art in Blender, and built the UI Toolkit interface so it scales to any screen.
  • I wrote EditMode and PlayMode tests, device screenshot tests and online end-to-end tests.

06Under the Hood

Two multiplayer backends, one game

On phones and in the standalone web version, it uses the Family Games protocol (REST rooms plus WebSocket with tickets). In the Showcase arcade, it plays on the game provider’s SignalR hub instead. Both feed into the same session object, so the match code doesn’t need to care which one it’s using.

Hand-rolled SignalR

RoomsHubSocket speaks SignalR’s JSON hub protocol over whichever WebSocket the build has, which is the browser’s in WebGL and System.Net.WebSockets everywhere else. It handles pings, backing off between retries and refreshing tokens.

Protocol parity

The message format {type, roomId, seq, ts, payload} and the reconnect approach (starting at 500 ms and doubling up to 30 s, with 10 attempts) match the web client exactly, so web and phone players meet in the same rooms.

Tested end to end

There are unit tests for the rules, the AI’s strength and the protocol parsing, PlayMode tests that take screenshots on 10 device profiles, and an online end-to-end test that plays the Unity game against a Node bot running without a screen.

07Art & Audio Pipeline

Procedural 3D

generate_assets.py builds the board, the plank X, the lasso O, the fence, cacti, tumbleweeds, mesas, the sheriff’s star and the app icon in Blender, running without a window.

Rendered UI art

generate_ui_art.py renders the 3D signboard logo, the loading background, the piece medallions and the parchment texture used for the "wanted poster" style UI.

Sound & type

Music by Kevin MacLeod, sound effects from Kenney and OpenGameArt, and the Rye and Arvo fonts for the frontier-style lettering.

08Challenges & Solutions

ProblemThe rules on the shared server couldn’t change without breaking the web version of the game.
SolutionThe new modes are only available offline, and online matches use the classic rules that the server controls.
ProblemOlder servers didn’t support one-time WebSocket tickets.
SolutionIf the server returns a 404, the client falls back to the room’s JWT, and it switches to tickets automatically once the server has been updated.
ProblemThe cover screens on flip phones are tiny.
SolutionScaling based on screen density, with an extra fitting factor and a compact layout just for cover screens.

09Tools & Takeaways

Unity 6 · URPC#UI ToolkitWebSocket · SignalRAlpha-beta AIBlender (Python)Unity Test Framework
  • Matching an existing network protocol exactly, byte for byte, is what lets two different clients share one world.
  • Even tic-tac-toe needs a well-tuned AI. A perfect one isn’t any fun, so the difficulty comes from what it deliberately chooses not to see.
  • Device screenshot tests turn "does it fit on a Razr cover screen?" into something CI can answer.

Credits. The Blender models and the icon are original. The music is by Kevin MacLeod (CC BY 4.0), the sound effects come from Kenney (CC0) and OpenGameArt creators (CC0 and CC BY), and the fonts are Rye and Arvo (OFL). Everything is credited on the in-game About screen.