Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

grantlemons/Ultimate-Tic-Tac-Toe

Repository files navigation

Ultimate Tic-Tac-Toe

A project that takes Tic-Tac-Toe too far.

Gameplay

Overview

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.

Selecting Leaf Boards

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.

Dependencies

Optional Dependencies

Submodules

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 Awesome CSS {#doxygen-awesome-css}

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.

Guidelines Support Library {#gsl}

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

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.

About

ultimate-tic-tac-toe

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published