C++ programs need to be written based on the following assignment... In this ass
ID: 3783309 • Letter: C
Question
C++ programs need to be written based on the following assignment...
In this assignment, you will implement a simple Tic-Tac-Toe game. It will be possible to play human-vs-human, human-vs-computer, or computer-vs-computer. Tic-Tac-Toe, also called X's and Os, 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 player to get a straight line ofthree symbols wins. If all the cells on the board are filled and neither player has a line of 3 symbols, the game is a tie. Lines may be horizontal, vertical, or diagonal You will implement a Board class to represent the 3x3 grid. This class will have 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 class to determine the players 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 will implement PlayerHuman as a subclass of Player. When this subclass is to choose a move, it should print out the current board and ask the user for the row and column to place a symbol. This class 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 have 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 program should then use dynamic memory allocation to create instances of the appropriate subclasses of Player. These must be stored with pointers of type Player The first team should place X symbols, while the second team should place O symbols. The program should then alternate asking the players for moves until one player wins, or the board is full and the game is atie. After the game is over, the program should print the winner and the board and exit.Explanation / Answer
#include <iostream>
#include <iomanip>
using namespace std;
bool gameWon (char ch, char board[] [3]);
bool drawGame(char board[][3]);
void gameBoard(char board[] [3]);
bool gameWon(char ch, char board[] [3])
{
for (int x = 0; x < 3; x++)
if (ch == board[x] [0] && ch == board[x] [1] && ch == board[x] [2]) return true;
for (int y = 0; y < 3; y++)
if (ch == board[0] [y] && ch == board[1] [y] && ch == board[2] [y]) return true;
if (ch == board[0] [0] && ch == board[1] [1] && ch == board[2] [2]) return true;
if (ch == board[0] [2] && ch == board[1] [1] && ch == board[2] [0]) return true;
return false;
}
bool drawGame(char board[][3])
{
for (int x = 0; x < 3; x++)
for (int y = 0; y < 3; y++)
if (board[x] [y] == ' ') return false;
return true;
}
void gameBoard(char board[] [3])
{
for (int x = 0; x < 3; x++)
{
cout << "| ";
for (int y = 0; y < 3; y++)
cout << board[x] [y] << " | ";//Ticks to draw columns
cout << " -------------" << endl;//Lines to draw rows
}
}
int main()
{
int row;
int column;
char board[3][3] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}}; //Displays the empty initial game board
gameBoard(board);
while (true)
{
int firstTurn;
cout << "TIC TAC TOE ";
cout << "Enter who will take the first turn. Choose 0 for user, 1 for computer. ";
cin >> firstTurn;
while (firstTurn == 0)
{
cout << "User will take first turn." << endl;
cout << "Enter a row (0, 1, 2) for X player: ";
cin >> row;
cout << "Enter a column (0, 1, 2) for X player: ";
cin >> column;
return gameBoard(board);
}
while (firstTurn == 1)
{
cout << "Computer will take first turn." << endl;
row = (rand()%2);
column = (rand()%2);
}
board[row] [column] = 'x';
gameBoard(board);
if (gameWon('x', board))
{
cout << "X player won" << endl;
exit(0);
}
else if (drawGame(board))
{
cout << "No winner" << endl;
exit(0);
}
cout << "Enter a row (0, 1, 2) for O player: ";
cin >> row;
cout << "Enter a column (0, 1, 2) for O player: ";
cin >> column;
board[row] [column] = 'O';
gameBoard(board);
if (gameWon('O', board))
{
cout << "O player won" << endl;
exit(0);
}
else if (drawGame(board))
{
cout << "No winner" << endl;
exit(0);
}
}
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.