In C specify design and implement a class that can be one pl

In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the first player (X\'s) or the second player (O\'s). THere should be a member function to ask the object to make its next move, and a member function that tells the object what the opponent\'s next move is. Also include other useful member functions, such as a function to ask whether a given spot of the tic-tac-toe board is occupied, and if so, whether the occupation is with an X or an O. Also, include a member function to determine wien the game is over, and whether it was a draw, an X win, or an O win. Use the class in two programs: a program that plays tic-tac-toe against the program\'s user, and a program that has two tic-tac-toe objects play against each other. Here is the skeleton code for the tic-tac-toe main() program for computer vs. computer: #include #include \"TicTacToe.h\" using namespace std; int main() { int isFirstPlayer = 1; TicTacToePlayer player1(isFirstPlayer); TicTacToePlayer player2(isFirstPlayer = 0); player1.printBoard(); while (1) { player1.automateMove(); if (player1.checkGameStatus()) { player1.printBoard(); break; } player1.printBoard(); player2.automateMove(); if (player2.checkGameStatus()) { player2.printBoard(); break; } player2.printBoard(); } return 0; } Here is the skeleton code for the tic-tac-toe main() for computer vs. player: #include #include \"TicTacToe.h\" using namespace std; int main() { int row, column, flag, isFirstPlayer; cout << \"Enter 1 if you want to be 1st player or 0 for 2nd player:\" << endl; cin >> isFirstPlayer; TicTacToePlayer player(isFirstPlayer); player.printBoard(); if (isFirstPlayer) { while(1) { do { cout << \"Enter row and column for matrix possition:\" << endl; cin >> row >> column; flag = player.checkPoss(row, column); }while(flag != 0); player.makeMove(row, column); if (player.checkGameStatus()) { break; } player.printBoard(); player.automateMove(); if (player.checkGameStatus()) { break; } player.printBoard(); } player.printBoard(); } else { while(1) { player.automateMove(); if (player.checkGameStatus()) { break; } player.printBoard(); do { cout << \"Enter row and column for matrix possition:\" << endl; cin >> row >> column; flag = player.checkPoss(row, column); }while(flag != 0); player.makeMove(row, column); if (player.checkGameStatus()) { break; } player.printBoard(); } player.printBoard(); } return 0; } Here is the skeleton code for the header file: #include using namespace std; class TicTacToePlayer { public: TicTacToePlayer(int isFirstPlayer) { if(isFirstPlayer) symbol = \'X\'; else symbol = \'O\'; } /* prints the board */ void printBoard(); /* user made move */ void makeMove(int m, int n); /* computer made move */ void automateMove(); /* checks if position in the board is ocupied, returns 1 for occupied 0 for not occupied */ int checkPoss(int m, int n); /* checks and prints the status of game, with the help of checkWin() retuns 0 for inprogress 1 for end of game */ int checkGameStatus(); private: /* Use an appropriate data structure for storing the board */ char symbol; /* Checks who won returns 0 for X win 1 for O win 2 for draw */ int checkWin(); } The skeleton code doesn\'t have to be followed, but was given as a guideline if we chose to follow it. A random function can be used to play for the computer, and it doesn\'t have to make a move that is logical

Solution

#include<iostream>
using namespace std;

//TicTacToe class definition
class TicTacToe
{
   //Default constructor to initialize each board position to zero
public:
    //To store TicTacToe board value
   int board[9];

   //To store player status
   int player;

TicTacToe()
   {
       //Loops through 9 places and initializes to zero
       for(int r = 0; r < 9; r++)
       {
           board[r] = 0;

       }//End of for loop for row

   }//End of constructor

   //Shows the board status
   void showBoard()
   {
       //Loops through 9 places in board
       for(int r = 1; r <= 9; r++)
       {
           //Displays position value
           cout<<board[r-1]<<\" \";

           //After 3 display a new line printed
           if(r % 3 == 0)
               cout<<endl;

       }//End of for loop for row

   }//End of method showBoard

   //Players move status
   void move(int playerNo, int position)
   {
       //Checks whether the player move is legal or not
       if(legalPlayer(playerNo))
       {
           /* Checks the position is legal or not. If the position is less then zero or more than 9 or board position is not zero i.e., marked by any other player it is illegal*/
           if(position < 0 || position >= 9 || board[position] != 0)
               cout<<\"\ Error: Illegal Position\"<<endl;

           //If player is legal and position is legal
           else
           {
               //Board position is assigned with player number
               board[position] = playerNo;

               //If currently it is player 1 move set it for player 2
               if(playerNo == 1)
                   player = 2;

               //If currently it is player 2 move set it for player 1
               else
                   player = 1;

           }//End of else

       }//End of if condition

       //For illegal player number
       else
           cout<<\"\ Illegal Player Number\"<<endl;

   }//End of method move

   //Returns true if player is legal otherwise false
   bool legalPlayer(int playerNo)
   {
       //Checks if the current player is the existing player returns false
       if(player != playerNo)
           return false;

       //If the current player is not the existing player returns true
       else
           return true;

   }//End of method legalPlayer

   //Displays the game result
   void gameResult(int res)
   {
       showBoard();
       //If the result is 1 player 1 won
       if(res == 1)
           cout<<\"\ Player 1 won\";

       //If the result is 2 player 2 won
       else if(res == 2)
           cout<<\"\ Player 2 won\";

       //If the result is 0 it is tie
       else if(res == 0)
           cout<<\"\ Game tie\";

   }//End of method gameResult

   //Returns the board status
   bool boardStatus()
   {
       //Initially status is true
       bool status = true;

       //Loops through 9 places
       for(int i = 0; i < 9; i++)

           //If current board value is zero then move is available in the board. Return false. */
           if(board[i] == 0)
               status = false;

       /* If all the places in the board value is not zero board is full return true. */
       return status;

   }//End of method boardStatus

   //Returns the winner status
   bool ownStatus()
   {
       /* If either row or column or diagonal is filled with 1 player 1 won*/
       if(rowStasus(1) || columnStatus(1) || diagonalStatus(1))
       {
           //Calls the gameResult method to display Player 1 won.
           gameResult(1);
           return true;
       }//End of if for player 1

       /* If either row or column or diagonal is filled with 2 player 2 won*/
       else if(rowStasus(2) || columnStatus(2) || diagonalStatus(2))
       {
           //Calls the gameResult method to display Player 2 won.
           gameResult(2);
           return true;
       }//End of if for player 2

       //Calls the method tie() to check whether it is tie or not.
       else if(tie())
       {
           //Calls the gameResult method to display it is tie.
           gameResult(0);
           return true;

       }//End of else for tie

       //Otherwise moves are available
       else
           return false;

   }//End of method ownStatus

   //Displays the tie status
   bool tie()
   {
       //Checks for the board status whether moves are available or not.
       if(boardStatus())
       {
           //Checks if neither player 1 or player 2 won returns true for tie
           if(!(rowStasus(1) || columnStatus(1) || diagonalStatus(1) || rowStasus(2) || columnStatus(2) || diagonalStatus(2)))
               return true;

       }//End of if

       //Otherwise returns false
       return false;

   }//End of method tie

   //Returns row status for player 1 or 2
   bool rowStasus(int playerNo)
   {
       //Creates an array for each row sum
       int rSum[3];
       int value;

       //If it is player 1 row sum will be 3
       if(playerNo == 1)
           value = 3;

       //If it is player 2 row sum will be 6
       else
           value = 6;

       //Loops through 9 places in board
       for(int r = 0, t = 0; r < 9; r+=3, t++)
       {
           //Initializes the current row sum position to zero.
           rSum[t] = 0;

           //Loops for 3 times for each row
           for(int c = 0; c < 3; c++)
           {
               //Checks for board value is 1 and player 1
               if(board[r+c] == 1 && playerNo == 1)

                   //Adds the row sum with the board value
                   rSum[t] += board[r+c];

               //Checks for board value is 2 and player 2
               else if(board[r+c] == 2 && playerNo == 2)

                   //Adds the row sum with the board value
                   rSum[t] += board[r+c];

           }//End of for loop for variable c

       }//End of for loop for variable r

       /* Checks if any of the row sum is equal to the value for the player. Value 3 for player 1 value 6 for player 2. */
       if(rSum[0] == value || rSum[1] == value || rSum[2] == value)
           return true;

       //Otherwise returns false
       else
           return false;

   }//End of method rowStatus

   //Returns column status for player 1 or 2
   bool columnStatus(int playerNo)
   {
       //Creates an array for each column sum
       int cSum [3];
       int value;

       //If it is player 1 column sum will be 3
       if(playerNo == 1)
           value = 3;

       //If it is player 2 column sum will be 6
       else
           value = 6;

       //Loops through 9 places in board
       for(int r = 0; r < 3; r++)
       {
           //Initializes the current column sum position to zero.
           cSum[r] = 0;

           //Loops through 9 places in board
           for(int c = r; c < 9; c+=3)
           {
               //Checks for board value is 1 and player 1
               if(board[c] == 1 && playerNo == 1)

                   //Adds the column sum with the board value
                   cSum[r] += board[c];

               //Checks for board value is 2 and player 2
               else if(board[c] == 2 && playerNo == 2)

                   //Adds the column sum with the board value
                   cSum[r] += board[c];

           }//End of for loop for variable c

       }//End of for loop for variable r

       /* Checks if any of the column sum is equal to the value for the player. Value 3 for player 1 value 6 for player 2. */
       if(cSum[0] == value || cSum[1] == value || cSum[2] == value)
           return true;
       else
           return false;
   }//End of method columnStatus

   //Returns diagonal status for player 1 or 2
   bool diagonalStatus(int playerNo)
   {
       //Initially left and right diagonal value is zero.
       int lDig = 0;
       int rDig = 0;

       int value;

       //If it is player 1 diagonal sum will be 3
       if(playerNo == 1)
           value = 3;

       //If it is player 2 diagonal sum will be 6
       else
           value = 6;

       //Loops through 9 places in the board for left diagonal.
       for(int c = 0; c < 9; c+=4)

           //Checks for board value is 1 and player 1
           if(board[c] == 1 && playerNo == 1)

               //Adds the left diagonal sum with the board value
               lDig += board[c];

           //Checks for board value is 2 and player 2
           else if(board[c] == 2 && playerNo == 2)

               //Adds the left diagonal sum with the board value
               lDig += board[c];

       //Loops through 9 places in the board for right diagonal.
       for(int c = 2; c < 9; c+=2)

           //Checks for board value is 1 and player 1
           if(board[c] == 1 && playerNo == 1)

               //Adds the right diagonal sum with the board value
               rDig += board[c];

           //Checks for board value is 2 and player 2
           else if(board[c] == 2 && playerNo == 2)

               //Adds the right diagonal sum with the board value
               rDig += board[c];

       /* Checks if any of the diagonal sum is equal to the value for the player.
       * Value 3 for player 1 value 6 for player 2. */
       if(lDig == value || rDig == value)
           return true;
       else
           return false;

   }//End of method diagonalStatus

};//End of class

   //Main method
   int main()
   {
       //Variable for player and position
       int currentPlayer, position;

       //Creates an object of TicTacToe class
       TicTacToe tt;

       //Variable to keep track who is the first player to start game.
       int c = 0;

       //Loops till either a player wins or it is tie
       while(!tt.ownStatus())
       {
           //Displays the board
           tt.showBoard();

           //Accepts the player number
           cout<<\"\ Enter the player number: \ 1 for Player 1 \ 2 for Player 2 \";
           cin>>currentPlayer;

           //Accepts the position
           cout<<\"\ Enter the Position: 0 - 8: \";
           cin>>position;

           //Checks for the first player to start game
           if(c == 0 && (currentPlayer == 1 || currentPlayer == 2))
           {
               tt.player = currentPlayer;
               c++;
           }//End of if condition

           //Calls the move function
           tt.move(currentPlayer, position);

       }//End of while loop

   }//End of main method

Output

0 0 0
0 0 0
0 0 0

Enter the player number:
1 for Player 1
2 for Player 2 1

Enter the Position: 0 - 8: 3
0 0 0
1 0 0
0 0 0

Enter the player number:
1 for Player 1
2 for Player 2 1

Enter the Position: 0 - 8: 6

Illegal Player Number
0 0 0
1 0 0
0 0 0

Enter the player number:
1 for Player 1
2 for Player 2 2

Enter the Position: 0 - 8: 6
0 0 0
1 0 0
2 0 0

Enter the player number:
1 for Player 1
2 for Player 2 1

Enter the Position: 0 - 8: 4
0 0 0
1 1 0
2 0 0

Enter the player number:
1 for Player 1
2 for Player 2 2

Enter the Position: 0 - 8: 7
0 0 0
1 1 0
2 2 0

Enter the player number:
1 for Player 1
2 for Player 2 1

Enter the Position: 0 - 8: 5
0 0 0
1 1 1
2 2 0

Player 1 won

In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the fi
In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the fi
In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the fi
In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the fi
In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the fi
In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the fi
In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the fi
In C++, specify design, and implement a class that can be one player in a game of tic-tac-toe. The constructor should specify whether the object is to be the fi

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site