A project that takes Tic-Tac-Toe too far.
Ultimate Tic-Tac-Toe is extremely similar to regular Tic-Tac-Toe; players familiar with the original can expect to pick up the expanded ruleset quickly.
Fundamentally, Ultimate Tic-Tac-Toe is game of Tic-Tac-Toe where each cell of the board (now called the "Primary Board") contains another Tic-Tac-Toe board (called a Leaf Board).
Like in the original game, players take turns claiming cells until one claims three in a row. In Ultimate Tic-Tac-Toe, however, moves are made in the cells of a Leaf Board. Once a Leaf Board is won, the corresponding cell of the Primary Board is claimed for the winner. Once three consecutive Leaf Boards have been won by the same player (corresponding to cells of the Primary Board), that player wins the Primary Board and thereby the game.
Cells can only be claimed within the currently active Leaf Board.
At the start of the game, the X player selects a Leaf Board to make their play in, as well as the cell of said Leaf Board they would like to claim.
In most other cases, however, the currently active Leaf Board is determined by the cell of the Leaf Board previously claimed. An exception applies when the Leaf Board that would be active is already won, in which case the current player can select any unclaimed Leaf Board.
Gameplay Example:
Turn 1:
Primary Board Active Leaf Board (0) Description
|A| | | | | | | X Selects the Leaf Board 0.
| | | | | | | |
| | | | | | | |
Primary Board Active Leaf Board (0) Description
|A| | | | | | | X Selects Leaf Cell 4.
| | | | | |X| |
| | | | | | | |
Turn 2:
Primary Board Active Leaf Board (4) Description
| | | | | | | | Leaf Board 4 is now active.
| |A| | | | | | O must make a move in the newly
| | | | | | | | active Leaf Board.
Primary Board Active Leaf Board (4) Description
| | | | |O| | | O Selects Leaf Cell 0.
| |A| | | | | |
| | | | | | | |
Turn 3:
Primary Board Active Leaf Board (0) Description
|A| | | | | | | Leaf Board 0 is now active.
| | | | | |X| | X must make a move in the newly
| | | | | | | | active Leaf Board.
State for Leaf Board 0 persists from
turn one.
- Doxygen (for documentation)
- Doxygen Awesome CSS (for documentation styling)
This project includes multiple git submodules. As such, users should clone
using the --recurse-submodules
flag.
To update submodules use the following command:
git submodule update --init --recursive
Alternatively, users may choose to clone these submodules manually according
to the information provided in .gitmodules
. Pay close attention to the specific
branches used for each submodule.
Doxygen's default HTML output looks like a router configuration menu, so this project uses Doxygen Awesome CSS to improve the layout and styling of its documentation.
For the convenience of not needing to install an additional library, this is
provided through a git submodule in the doxygen-awesome-css/
directory.
This dependency is optional, omission will result in an error when building
documentation. To resolve, either clone the submodule or edit the Doxyfile
to exclude the styling this dependency provides.
This project uses Microsoft's Guidelines Support Library for certain functions (checked narrowing, preconditions, and postconditions).
For the convenience of not needing to install an additional library, this is
provided through a git submodule in the GSL/
directory.
The header files of this directory are included in linking, and are referenced within the code. As such, installing GSL locally will likely not link correctly with this project.
Documentation for this project is contained in Javadoc style comments in header files. Documentation pages can be generated through the use of Doxygen.
With Doxygen on the PATH, run the following:
make docs
Documentation will also be generated by the all
target in the Makefile.