For my first project I decided to write a software version for  the game of Peg Solitaire.

Peg Solitaire is a single-player game in which the player attempts to remove as many pegs from the board as possible by making moves of the following form:

Given three adjacent slots in a straight line, if the first two are both pegs and the third is empty, the player can jump the border peg over the middle peg into the empty spot, removing the middle peg.

Initial position and the position you get by jumping the highlighted peg to the empty spot are shown below:

 

The ultimate goal is to remove all pegs, leaving just one in the middle. The goal position is shown below:  

The main usability features that I focused on were:

  1. An undo powerful enough that confirmation dialogs would be unnecessary. The program has no undo limit and even resetting the board to the initial position can be undone.

  2. Automatically save the game when it is closed, full restore at next restart, including the undo/redo buffers.

  3. Multiple move input methods, including single-click mouse, drag-and-drop and keyboard entry.

  4. Discoverable interface, including help, tooltips and menus to help promote the user from a beginner with the interface to a perpetual intermediate.

A secondary goal was to teach myself C# and WinForms.