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

In C programming Implement an interactive tic tac toe game where player 2 is aut

ID: 3822551 • Letter: I

Question

In C programming Implement an interactive tic tac toe game where player 2 is automated by the computer. The game starts by printing an empty board. Each player takes turns and adds an ’X’ or an ’O’ to the appropriate location. The game ends when the users or the computer wins, or the board is full. Your code should employ at least the following two functions.

int check board(int x[ ][3]); // returns 0 if player 1 wins, 1 if player 2 wins, or 2 if tie

void print board(int x[][3]); // prints the board on screen

only use 2Darrays and #include <stdio.h> please

Explanation / Answer

#include<stdio,h>

using namespace std;

#define COMPUTER 1

#define HUMAN 2

#define SIDE 3 // Length of the board

// Computer will move with 'O'

// and human with 'X'

#define COMPUTERMOVE 'O'

#define HUMANMOVE 'X'

// A function to show the current board status

void showBoard(char board[][SIDE])

{

printf(" ");

printf(" %c | %c | %c ", board[0][0],

                             board[0][1], board[0][2]);

    printf(" -------------- ");

    printf(" %c | %c | %c ", board[1][0],

board[1][1], board[1][2]);

    printf(" -------------- ");

    printf(" %c | %c | %c ", board[2][0], board[2][1], board[2][2]);

return;

}

// A function to show the instructions

void showInstructions()

{

    printf(" Tic-Tac-Toe ");

    printf("Choose a cell numbered from 1 to 9 as below" " and play ");

printf(" 1 | 2 | 3 ");

    printf(" -------------- ");

    printf(" 4 | 5 | 6 ");

    printf(" -------------- ");

    printf(" 7 | 8 | 9 ");

printf("- - - - - - - - - - ");

return;

}

// A function to initialise the game

void initialise(char board[][SIDE], int moves[])

{

    // Initiate the random number generator so that

    // the same configuration doesn't arises

    srand(time(NULL));

// Initially the board is empty

    for (int i=0; i<SIDE; i++)

    {

        for (int j=0; j<SIDE; j++)

            board[i][j] = ' ';

}

// Fill the moves with numbers

    for (int i=0; i<SIDE*SIDE; i++)

        moves[i] = i;

// randomise the moves

    random_shuffle(moves, moves + SIDE*SIDE);

return;

}

// A function to declare the winner of the game

void declareWinner(int whoseTurn)

{

    if (whoseTurn == COMPUTER)

        printf("COMPUTER has won ");

    else

        printf("HUMAN has won ");

    return;

}

// A function that returns true if any of the row

// is crossed with the same player's move

bool rowCrossed(char board[][SIDE])

{

    for (int i=0; i<SIDE; i++)

    {

        if (board[i][0] == board[i][1] &&

            board[i][1] == board[i][2] &&

            board[i][0] != ' ')

            return (true);

    }

    return(false);

}

// A function that returns true if any of the column

// is crossed with the same player's move

bool columnCrossed(char board[][SIDE])

{

    for (int i=0; i<SIDE; i++)

    {

        if (board[0][i] == board[1][i] &&

            board[1][i] == board[2][i] &&

            board[0][i] != ' ')

            return (true);

    }

    return(false);

}

// A function that returns true if any of the diagonal

// is crossed with the same player's move

bool diagonalCrossed(char board[][SIDE])

{

    if (board[0][0] == board[1][1] &&

        board[1][1] == board[2][2] &&

        board[0][0] != ' ')

        return(true);

         

    if (board[0][2] == board[1][1] &&

        board[1][1] == board[2][0] &&

         board[0][2] != ' ')

        return(true);

    return(false);

}

// A function that returns true if the game is over

// else it returns a false

bool gameOver(char board[][SIDE])

{

    return(rowCrossed(board) || columnCrossed(board)

            || diagonalCrossed(board) );

}

// A function to play Tic-Tac-Toe

void playTicTacToe(int whoseTurn)

{

    // A 3*3 Tic-Tac-Toe board for playing

    char board[SIDE][SIDE];

     

    int moves[SIDE*SIDE];

     

    // Initialise the game

    initialise(board, moves);

     

    // Show the instructions before playing

    showInstructions();

     

    int moveIndex = 0, x, y;

     

    // Keep playing till the game is over or it is a draw

    while (gameOver(board) == false &&

            moveIndex != SIDE*SIDE)

    {

        if (whoseTurn == COMPUTER)

        {

            x = moves[moveIndex] / SIDE;

            y = moves[moveIndex] % SIDE;

            board[x][y] = COMPUTERMOVE;

            printf("COMPUTER has put a %c in cell %d ",

                    COMPUTERMOVE, moves[moveIndex]+1);

            showBoard(board);

            moveIndex ++;

            whoseTurn = HUMAN;

        }

         

        else if (whoseTurn == HUMAN)

        {

            x = moves[moveIndex] / SIDE;

            y = moves[moveIndex] % SIDE;

            board[x][y] = HUMANMOVE;

            printf ("HUMAN has put a %c in cell %d ",

                    HUMANMOVE, moves[moveIndex]+1);

            showBoard(board);

            moveIndex ++;

            whoseTurn = COMPUTER;

        }

    }

    // If the game has drawn

    if (gameOver(board) == false &&

            moveIndex == SIDE * SIDE)

        printf("It's a draw ");

    else

    {

        // Toggling the user to declare the actual

        // winner

        if (whoseTurn == COMPUTER)

            whoseTurn = HUMAN;

        else if (whoseTurn == HUMAN)

            whoseTurn = COMPUTER;

         

        // Declare the winner

        declareWinner(whoseTurn);

    }

    return;

}

// Driver program

int main()

{

    // Let us play the game with COMPUTER starting first

    playTicTacToe(COMPUTER);

     

    return (0);

}

#include<stdio,h>

using namespace std;

#define COMPUTER 1

#define HUMAN 2

#define SIDE 3 // Length of the board

// Computer will move with 'O'

// and human with 'X'

#define COMPUTERMOVE 'O'

#define HUMANMOVE 'X'

// A function to show the current board status

void showBoard(char board[][SIDE])

{

printf(" ");

printf(" %c | %c | %c ", board[0][0],

                             board[0][1], board[0][2]);

    printf(" -------------- ");

    printf(" %c | %c | %c ", board[1][0],

board[1][1], board[1][2]);

    printf(" -------------- ");

    printf(" %c | %c | %c ", board[2][0], board[2][1], board[2][2]);

return;

}

// A function to show the instructions

void showInstructions()

{

    printf(" Tic-Tac-Toe ");

    printf("Choose a cell numbered from 1 to 9 as below" " and play ");

printf(" 1 | 2 | 3 ");

    printf(" -------------- ");

    printf(" 4 | 5 | 6 ");

    printf(" -------------- ");

    printf(" 7 | 8 | 9 ");

printf("- - - - - - - - - - ");

return;

}

// A function to initialise the game

void initialise(char board[][SIDE], int moves[])

{

    // Initiate the random number generator so that

    // the same configuration doesn't arises

    srand(time(NULL));

// Initially the board is empty

    for (int i=0; i<SIDE; i++)

    {

        for (int j=0; j<SIDE; j++)

            board[i][j] = ' ';

}

// Fill the moves with numbers

    for (int i=0; i<SIDE*SIDE; i++)

        moves[i] = i;

// randomise the moves

    random_shuffle(moves, moves + SIDE*SIDE);

return;

}

// A function to declare the winner of the game

void declareWinner(int whoseTurn)

{

    if (whoseTurn == COMPUTER)

        printf("COMPUTER has won ");

    else

        printf("HUMAN has won ");

    return;

}

// A function that returns true if any of the row

// is crossed with the same player's move

bool rowCrossed(char board[][SIDE])

{

    for (int i=0; i<SIDE; i++)

    {

        if (board[i][0] == board[i][1] &&

            board[i][1] == board[i][2] &&

            board[i][0] != ' ')

            return (true);

    }

    return(false);

}

// A function that returns true if any of the column

// is crossed with the same player's move

bool columnCrossed(char board[][SIDE])

{

    for (int i=0; i<SIDE; i++)

    {

        if (board[0][i] == board[1][i] &&

            board[1][i] == board[2][i] &&

            board[0][i] != ' ')

            return (true);

    }

    return(false);

}

// A function that returns true if any of the diagonal

// is crossed with the same player's move

bool diagonalCrossed(char board[][SIDE])

{

    if (board[0][0] == board[1][1] &&

        board[1][1] == board[2][2] &&

        board[0][0] != ' ')

        return(true);

         

    if (board[0][2] == board[1][1] &&

        board[1][1] == board[2][0] &&

         board[0][2] != ' ')

        return(true);

    return(false);

}

// A function that returns true if the game is over

// else it returns a false

bool gameOver(char board[][SIDE])

{

    return(rowCrossed(board) || columnCrossed(board)

            || diagonalCrossed(board) );

}

// A function to play Tic-Tac-Toe

void playTicTacToe(int whoseTurn)

{

    // A 3*3 Tic-Tac-Toe board for playing

    char board[SIDE][SIDE];

     

    int moves[SIDE*SIDE];

     

    // Initialise the game

    initialise(board, moves);

     

    // Show the instructions before playing

    showInstructions();

     

    int moveIndex = 0, x, y;

     

    // Keep playing till the game is over or it is a draw

    while (gameOver(board) == false &&

            moveIndex != SIDE*SIDE)

    {

        if (whoseTurn == COMPUTER)

        {

            x = moves[moveIndex] / SIDE;

            y = moves[moveIndex] % SIDE;

            board[x][y] = COMPUTERMOVE;

            printf("COMPUTER has put a %c in cell %d ",

                    COMPUTERMOVE, moves[moveIndex]+1);

            showBoard(board);

            moveIndex ++;

            whoseTurn = HUMAN;

        }

         

        else if (whoseTurn == HUMAN)

        {

            x = moves[moveIndex] / SIDE;

            y = moves[moveIndex] % SIDE;

            board[x][y] = HUMANMOVE;

            printf ("HUMAN has put a %c in cell %d ",

                    HUMANMOVE, moves[moveIndex]+1);

            showBoard(board);

            moveIndex ++;

            whoseTurn = COMPUTER;

        }

    }

    // If the game has drawn

    if (gameOver(board) == false &&

            moveIndex == SIDE * SIDE)

        printf("It's a draw ");

    else

    {

        // Toggling the user to declare the actual

        // winner

        if (whoseTurn == COMPUTER)

            whoseTurn = HUMAN;

        else if (whoseTurn == HUMAN)

            whoseTurn = COMPUTER;

         

        // Declare the winner

        declareWinner(whoseTurn);

    }

    return;

}

// Driver program

int main()

{

    // Let us play the game with COMPUTER starting first

    playTicTacToe(COMPUTER);

     

    return (0);

}