Skip to content

Grit Cards

A wrestling card game where the rules engine came first

A mobile card game based on collegiate wrestling, with two play modes, ten computer opponents and tournament brackets, built in Flutter around a tested rules engine.

The Grit Cards logo in front of a wrestling arena, with two illustrated move cards.

The challenge

The client wanted a card game that wrestlers would recognise as wrestling. In the sport, what you can do depends on where you are: on top, underneath or neutral. A move that scores from one position is useless from another. The game had to carry that logic and stay quick enough to play casually on a phone.

The requirement

  • Card play across three periods, with outcomes that depend on mat position.
  • Scoring that follows the sport, including riding time, overtime and team points.
  • Opponents with distinct styles, so matches feel different.
  • A tournament structure across weight classes.
  • A tutorial for players who do not know wrestling.
  • Fully playable offline.

The solution

The game has two modes. Standard Grit is strategic: players hold a hand of move cards and choose what to play. Grit War is faster and reactive, played by swiping.

There are ten computer opponents, each with a weighted strategy that gives it a recognisable style. Tournament play runs brackets across ten weight classes, with a path of opponents in each. Matches include a coin toss, overtime with sudden death, and a riding-time bonus. A seven-page tutorial explains the rules, and results can be shared.

Architecture

The rules engine and the opponent logic are written in plain Dart, with no dependency on the interface. The interface, built in Flutter with Riverpod, only displays state and sends the player’s choices to the engine.

That separation made two things possible. The engine, the opponents and the tournament rules are covered by automated tests, so a rule change cannot quietly break scoring. And a simulation harness can play thousands of matches between computer opponents without drawing anything, which is how the opponents’ difficulty was tuned.

Progress and settings are stored on the device. The game needs no server and no account.

Technology

Flutter, Dart, Riverpod, go_router and Hive for local storage.

Outcome

A complete, playable build has been delivered: both modes, all ten opponents, tournaments, overtime and the tutorial. Store release and monetisation are the remaining steps.

More work

Have something similar to build?

Tell us what you’re building, fixing or automating. We’ll tell you honestly whether we can help.