I have the human vs human but not the human vs computer or computer vs computer. C++
In this assignment, you will implement a simple Tic-Tac-Toe game. It will be possibk to pay human-vs-human, human-vs-computer, or computer-vs-computer Tic-Tac-Toe, also called X's and O's, Noughts and Crosses, and X and 0 is a simple game played on a 3x3 grid, referred to as the board. The grid starts empty, and the two players take turns placing their respective symbols, X and O, on an empty grid cell, referred to as making a move. The first payer to get a straight line of three symbols wins. Ifall the cells on the board are filled and ne ither player has a line of3 symbols, the game is a tie. Lines may be horizontal, vertical, or diagonal. You will implement a Board cass to represent the 3x3 grid. This class will ha ve functions to determine which symbol if any, is in a cell, to place a symbol in a cell, to determine the winner, if any so far, and to print the board to standard output. The board should appear as below: You will implement an abstract Player cass to determine the player's moves. The Player class should store which symbol it will place and contain a pure virtual function to determine the Player's next move. This function will be overridden by the subclasses of Player. You wil implement PlayerHuman as a subcass of Player. When this subclass is to choose a move, it shoukd print out the curre nt board and ask the user for the row and co lumn to place a symbol This cass should detect if the user enters an invalid location, either because it is not in the grid or it already has a symbol, and if the location is invalid, ask the user again. You will implement PlayerRandom as a subclass of Player. When this subclass is to choose a move, it should return a random position in the grid that does not yet ha ve a symbol. You will implement a program to play the Tic Tac Toe game. The program should begin by asking the user if each team should be controlled by a human or by the computer. The p should then use dynamic memory allocation to create instances ofthe appropriate s Player. These must be stored with pointers of type Player*. The first team should place X symbols, while the second team should pace O symbols. The program shoukd then alternate asking the players for moves until one player wins, or the board is full and the game is a tie. After the game is over, the program should print the winner and the board and exit. rogram subclasses of