In this project, I coded a SuperComputerPlayer class that allows a computer player to avoid making losing moves and always try to make a move that will allow it to win (or at least force a draw).
The SuperComputerPlayer class relies on a TicTacToeNode class that I coded to create a tree node for every game board as well as nodes for all possible next moves from that board (all child nodes).
The TicTacToe class was provided. It contains the main board and game logic.