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.
Main menu - the corral at sunsetShowdown setup - mode, AI skill, series, timerA classic 3×3 matchBig Ranch 5×5 - a winTumbleweed modeOnline Posse - rooms and codes
03Core Loop
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
Draw
Drag to aim and place your mark, with an optional quick-draw timer for each turn.
3
Outsmart
Use hints and undo, or keep an eye on the flickering mark that’s about to blow away.
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.
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.