King's Bluff

Chess and poker in one game: claim a poker hand to fire an effect on the board, and dare your opponent to call you a liar.

TypeScriptReactGame DesignMonte Carlo SimulationDesign Systems
King's Bluff screenshot

It started with a draft order

I run my fantasy football league, and part of the job is deciding how we set the draft order. Rolling dice is boring. I have put people through some strange contests over the years, and every August the question comes back around.

This year the answer showed up in the shower. What if the draft order came out of a game the league actually had to play? Not a coin flip with extra steps, but something with real decisions in it, where whoever reads the table best picks first.

That is King's Bluff. Two players, a small chess board, and a deck of cards. You can move a piece, or you can put cards face down and announce a poker hand to trigger an effect on the board. The catch is that you do not have to be telling the truth. Your opponent gets one decision: believe you, or call it and commit their own cards to prove you wrong.

Chess is a game where nobody can lie to you. Poker is a game where lying is the point.

Playable by people who are not experts

The whole thing falls apart if you have to be good at chess and good at poker to sit down. Most of my league is neither. So much of the design work went into removing the parts of both games that punish newcomers.

Chess lost check and checkmate. You win by capturing the enemy king, and that is the only rule about kings you need to learn. Move yours somewhere dangerous and you will probably lose it, which is a lesson people pick up in about one turn.

Poker lost the memorization. Better hands trigger better effects, and the whole ladder lives on one screen you can pull up any time. The game names each effect in plain words before you commit, and warns you when a play would accomplish nothing.

The ladder: seven poker claims from Pair to Four of a Kind, each paired with the board effect it fires, escalating from steel chips to gold.

A decade of playing tabletop games and teaching them to my kids turned out to be the real advantage here. Once you have walked a nine year old through a rulebook, you develop an ear for which rules are genuinely hard and which ones are just badly explained.

Dusting off the Monte Carlo

A bluffing game has questions you cannot answer by playing it a few times. Does lying actually pay? Is one effect strong enough to decide the game? Does going first win too often? You need thousands of games, changing one rule at a time.

That is a simulation problem, which sent me back to my industrial engineering degrees. Monte Carlo was a tool I learned for throughput and queueing problems and had not touched in years. A board game turns out to be a perfectly good system to model. So before I built any screens, I wrote the rules as code and then wrote a simulator that plays the game against itself thousands of times per configuration, using bots with different personalities: one that never bluffs, one that bluffs constantly, one that calls everything, one that hoards.

Two things it caught that I would never have found at a table:

A way to be un-lie-to-able. Calling a bluff costs you as many cards as the liar played, so a player who stays deliberately low on cards can never call anything. I had a rule letting a short-handed player call by shoving their whole hand in, and the simulator showed how much work it was doing: with that rule off, more than 17,000 lies went unchallenged across 2,000 games. With it on, about 4,600, and the liar got caught more than twice as often.

A dead turn. Players draw a card each turn, and it originally arrived at the start. Spend your whole hand on a big claim and you crossed into your opponent's turn holding nothing, which let them lie to you for free. Moving the draw to the end of the turn means everyone always has at least one card to fight with.

It also settled the question that matters most for a draft order: the first player wins 50.2% of mirror matches, close enough to a coin flip to leave alone. The caveat I wrote down early is that bots bluff much worse than people, so the simulator tells me whether lying is mathematically worth it, not whether it is fun. Only playing answers that.

Playing it before my friends do

The version my league eventually sees should not be the rough one, so everything gets played at home with family first, well before it reaches a group of people who will never let me forget a bad rule.

Playing it surfaced things that reading it never would. The first time I drew a card, the panel asking which one to keep slid up and covered the hand I was choosing for. Obvious in hindsight, invisible on paper. And a called bluff originally resolved in about a second and a half, which read as "something happened and I missed it." That moment is the entire reason the game exists, so it now stops the table and holds both hands face up until you decide to move on.

The three ways a claim ends: passed and buried face down as IT STANDS, contested and proven with TRUE, and contested and caught with BLUFF.
The Gilt and Ink title plate: heavy gold stamp, hard drop shadows, and three playing cards in the system's resting, selected, and face-down states.

The look serves the same goal. It is built to feel like physical objects on a table, with heavy outlines and hard shadows, everything stamped down rather than faded in. Hidden information stays something you can see and count: your opponent's cards hang there face down, so their hand size is a fact on the table instead of a number in a status bar.

Getting it to the league

You can play it right now. The link above is the live build: a solo table against the house bot, running on the real rules engine. That version exists because it is the fastest honest way to put the game in front of people, and a URL needs nobody's approval.

What is left is multiplayer, and this is where building CharTaker pays off. I have already put a real backend behind a game, synced state between players in a live session, and shipped the result to the App Store. Doing that once makes the second time a known problem instead of a research project.

The deadline is real and it is the start of the season. After that, the App Store.

Mostly I am doing this because it is fun. I am using things I have not touched since grad school, building it with my kids as the first audience, and if it works my league gets a draft order nobody can argue with.

Live demo