This document describes how to build a state tree to evaluate all possible moves in a game. Each node represents the game state and has child nodes for all valid subsequent moves. Leaf nodes have no further valid moves and their score determines the node's value. The tree can be built more efficiently by saving move objects that encode the difference between states, allowing the previous state to be restored by applying the "inverse" move.