Thomas Haslam

Solitaire

10th May - 24th June 2026

Part of the NoNotParty Arcade project.

Collection of daily perfect information solitaire games, inspired by playing manual solitaire while waiting for a flight in Fiji.

In implementation order, these are:

FreeCell

Initially underestimated the complexity of coding this since "it's only moving one card at a time". This was complicated by adding QOL features such as:

  • Cards automatically moving to the victory stacks when they're not useful anymore
  • Ability to move stacked cards as a group, while showing the intermediate moves so the user understands what's going on
  • Undoing moves, which sometimes needs to revert multiple moves at once if automatic or group moves occurred

Eight Off

Effectively FreeCell with more free cells and different stacking rules. Since card stacks had a common interface, it was easy to abstract out a common engine for FreeCell-like games.

Shenzhen Solitaire

Created a separate engine for this, as it has a completely different deck and two new types of move:

  • Stack moves without having to use the free cells
  • Merging in exposed royal cards to a single free cell

Penguin

Major gameplay change from the official rules was modifying the setup so that the victory stacks are Ace to King rather than offset depending on the deal, as I didn't think that added anything to the experience.

Did a big refactor at this point, since I would have had to create a third game engine with mostly FreeCell logic but the stack moves from Shenzhen Solitaire. Solitaire games now use a common engine, with parameters for:

  • What stack types are present (and what cards are in them initially)
  • What types of move are available
  • How the score is calculated from the current state

Simple (and Simpler) Simon

Very easy to code with the new common engine, only requiring:

  • New type of stack (as Spider stacks allow different suits to be stacked, but have a stack depth of only the same-suit cards)
  • New special "Spider Victory" move that automatically removes fully stacked suits

Klondike

Based on a "Panoramic" variant I found in a solitaire app, since there's no point in any cards being face down when you can restart/undo at any time.

Was a major challenge even with the refactor, requiring:

  • Ability to take cards from victory stacks
  • Stacks which might disallow taking cards based off other stacks (in the stock)
  • Button for redealing the stock
  • Animation for the stock redealing, which involves non-top cards moving

In the end, I had to rewrite the entire card animation system to a much simpler (if slightly less efficient) one where all rendered cards check their new position in the updated engine state.