Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

//Header file section #include #include using namespace std; //class declartion

ID: 3634492 • Letter: #

Question

//Header file section
#include
#include
using namespace std;
//class declartion
class TicTacToe
{
//Variable declartion
private:
enum Status { WIN, DRAW, CONTINUE };
int board[ 3 ][ 3 ];
public:
//Default constructor
TicTacToe();
// make move
void makeMove();
// print board
void printBoard();
// validate move
bool validMove( int, int );
bool xoMove( int );
Status gameStatus();
};

// Member-function definitions for class TicTacToe.
TicTacToe::TicTacToe()
{
for ( int j = 0; j < 3; j++ )

for ( int k = 0; k < 3; k++ )
board[ j ][ k ] = ' ';
}
bool TicTacToe::validMove( int r, int c )
{
return r >= 0 && r < 3 && c >= 0 && c < 3
&& board[ r ][ c ] == ' ';
}
TicTacToe::Status TicTacToe::gameStatus()
{
int a;
if ( board[ 0 ][ 0 ] != ' '
&& board[ 0 ][ 0 ] == board[ 1 ][ 1 ]
&& board[ 0 ][ 0 ] == board[ 2 ][ 2 ] )
return WIN;
else if ( board[ 2 ][ 0 ] != ' ' &&
board[ 2 ][ 0 ] == board[ 1 ][ 1 ] &&
board[ 2 ][ 0 ] == board[ 0 ][ 2 ] )
return WIN;
for ( a = 0; a < 3; ++a )

if ( board[ a ][ 0 ] != ' ' &&
board[ a ][ 0 ] == board[ a ][ 1 ]
&& board[ a ][ 0 ] == board[ a ][ 2 ] )
return WIN;
for ( a = 0; a < 3; ++a )

if ( board[ 0 ][ a ] != ' ' &&
board[ 0 ][ a ] == board[ 1 ][ a ]
&& board[ 0 ][ a ] == board[ 2 ][ a ] )
return WIN;
for ( int r = 0; r < 3; ++r )

for ( int c = 0; c < 3; ++c )

if ( board[ r ][ c ] == ' ' )
return CONTINUE;

return DRAW;
}
void TicTacToe::printBoard()
{
cout << " 0 1 2 ";

for ( int r = 0; r < 3; ++r )
{
cout << r;

for ( int c = 0; c < 3; ++c )
{
cout << setw( 3 ) <<
static_cast< char > ( board[ r ][ c ] );

if ( c != 2 )
cout << " |";
}
if ( r != 2 )
cout << " ____|____|____ | | ";
}
cout << " ";
}
void TicTacToe::makeMove()
{
printBoard();

while ( true )
{
if ( xoMove( 'X' ) )
break;
else if ( xoMove( 'O' ) )
break;
}
}
bool TicTacToe::xoMove( int symbol )
{
int x;
int y;

do
{
cout << "Player " << static_cast< char >( symbol )
<< " enter move: ";
cin >> x >> y;
cout << ' ';
} while ( !validMove( x, y ) );

board[ x ][ y ] = symbol;
printBoard();
Status xoStatus = gameStatus();

if ( xoStatus == WIN )
{
cout << "Player "
<< static_cast< char >( symbol ) << " wins! ";
return true;
}
else if ( xoStatus == DRAW )
{
cout << "Game is a draw. ";
return true;
}
else
return false;
}
//main function
int main()
{
TicTacToe g;
g.makeMove();
system("pause");
return 0;
}

Explanation / Answer

Dear, /*Header file section*/ #include enum Status { WIN, DRAW, CONTINUE }; int board[ 3 ][ 3 ]; /*Default constructor*/ void TicTacToe(); /* make move*/ void makeMove(); /* print board*/ void printBoard(); /* validate move*/ int validMove(int,int); int xoMove( int ); enum Status gameStatus() { int a,r,c; if(board[0][0] != ' '&& board[ 0 ][ 0 ] == board[ 1 ][ 1 ]&& board[ 0 ][ 0]== board[ 2 ][ 2 ] ) return WIN; else if ( board[ 2 ][ 0 ] != ' ' &&board[ 2 ][ 0 ] == board[ 1 ][ 1 ] &&board[ 2 ][ 0 ] == board[ 0 ][ 2 ] ) return WIN; for ( a = 0; a < 3; ++a ) if ( board[ a ][ 0 ] != ' ' &&board[ a ][ 0 ] == board[ a ][ 1 ]&& board[ a ][ 0 ] == board[ a ][ 2 ] ) return WIN; for ( a = 0; a < 3; ++a ) if ( board[ 0 ][ a ] != ' ' &&board[ 0 ][ a ] == board[ 1 ][ a ]&& board[ 0 ][ a ] == board[ 2 ][ a ] ) return WIN; for ( r = 0; r < 3; ++r ) for (c = 0; c < 3; ++c ) if ( board[ r ][ c ] == ' ' ) return CONTINUE; return DRAW; } /*main function*/ int main() { TicTacToe(); makeMove(); system("pause"); return 0; } /*Member-function definitions for class TicTacToe.*/ void TicTacToe() { int j,k; for(j = 0; j < 3; j++ ) for(k = 0; k < 3; k++ ) board[j][k] = ' '; } void makeMove() { printBoard(); while(1) { if(xoMove('X')) break; else if( xoMove('O')) break; } } void printBoard() { int r,c; printf("0 1 2 "); for(r = 0; r < 3; ++r ) { printf("%d",r); for(c = 0; c < 3; ++c ) { printf("%c",(char)board[ r ][ c ]); if ( c != 2 ) printf(" |"); } if ( r != 2 ) printf(" ____|____|____ | | "); } printf(" "); } int xoMove(int symbol) { int x,y; enum Status xoStatus; do { printf("Player ",(char)symbol," enter move: "); scanf("%d%d", &x, &y); printf(" "); } while (!validMove(x, y)); board[x][y] = symbol; printBoard(); xoStatus = gameStatus(); if(xoStatus == WIN) { printf("Player ",(char)symbol," wins! "); return 1; } else if ( xoStatus == DRAW ) { printf("Game is a draw. "); return 1; } else return 0; } int validMove(int r,int c) { if( r >= 0 && r < 3 && c >= 0 && c < 3&& board[ r ][ c ] == ' ') return 1; else return 0; } Hope this would help you.