Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6086607
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T11:46:31+00:00 2026-05-23T11:46:31+00:00

Hello i am making a tic tac toe game in console. What’s wrong with

  • 0

Hello i am making a tic tac toe game in console.
What’s wrong with my code?
I Got linker settings set as console.

code:

// Tic tac Toe
// Plays a tic tac toe game against a npc

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

// global constants
const char X = 'X';
const char O = '0';
const char EMPTY = ' ';
const char TIE = 'T';
const char NO_ONE = 'N';

//function prototypes
void instructions();
char askYesNo(string question);
int askNumber(string question, int high, int low =0);
char humanPiece();
char opponent(char piece);
void displayBoard(const vector<char>& board);
char winner(const vector<char>& board);
bool isLegal(const vector<char>& board, int move);
int humanMove(const vector<char>& board, char human);
int computerMove(const vector<char>& board, char computer);
void announceWinner(char winner, char computer, char human);

int main()
{
    int move;
    const int NUM_SQUARES = 9;
    vector<char> board(NUM_SQUARES, EMPTY);

    instructions();
    char human = humanPiece();
    char computer = opponent(human);
    char turn = X;
    displayBoard(board);

    while (winner(board) == NO_ONE)
    {
        if (turn == human)
        {
            move = humanMove(board, human);
            board[move] = human;
        }
        else
        {
            move = computerMove(board, computer);
            board[move] = computer;
        }
        displayBoard(board);
        turn = opponent(turn);
    }

    announceWinner(winner(board), computer, human);

    return 0;
}

void instructions()
{
    cout << "Welcome to the ultimate man-machine showdown: Tic Tac Toe.\n";
    cout << "--I'm gonna cut you in half like a knife and butter like a lightsaber and steel!!!\n\n";
    cout << "make your move now by entering a number, 0-8. The number\n";
    cout << "corresponds to the desired board position , as illustrated: \n\n";

    cout << "     0|1|2  \n";
    cout << "    ------- \n";
    cout << "     3|4|5  \n";
    cout << "    ------- \n";
    cout << "     6|7|8  \n\n";

    cout << "Prepare yourself human, the battle is about to begin.\n\n";
}

char askYesNo(string question)
{
    char response;
    do
    {
        cout << question << "(y\n): ";
        cin >> response;
    }while (response != 'y' && response != 'n');

    return response;
}

int askNumber(string question, int high, int low)
{
    int number;
    do 
    {
        cout << question << "(" << low << "-" << high << "): ";
        cin >> number;
    }while (number > high || number < low);

    return number;
}

char humanPiece()
{
    char go_first = askYesNo("Do you require the first move?");
    if (go_first == 'y')
    {
        cout << "\n Then take the first move. You will need it.\n";
        return X;
    }
    else
    {
        cout << "Then I will make the first move.\n";

        return 0;
    }

}

char opponent(char piece)
{
    if (piece == 'X')
    {
        return X;
    }
    else
    {
        return 0;
    }
}

void displayBoard(const vector<char>& board)
{
    cout << "\n\t" << board[0] << "|" << board[1] << "|" << board[3];
    cout << "\n\t" << "-------";
    cout << "\n\t" << board[3] << "|" << board[4] << "|" << board[5];
    cout << "\n\t" << "-------";
    cout << "\n\t" << board[6] << "|" << board[7] << "|" << board[8];
    cout << "\n\n";
}

char winner(const vector<char>& board)
{
    // all possible winning rows
    const int WINNING_ROWS[8][3] =  {{0,1,2},
                                    {3,4,5},
                                    {6,7,8},
                                    {0,3,6},
                                    {1,4,7},
                                    {2,5,8},
                                    {0,4,8},
                                    {2,4,6}};

    const int TOTAL_ROWS = 8;
    // if any winning row has three values wich are the same(and not EMPTY)
    // then we have a winner
    for (int row = 0; row < TOTAL_ROWS; ++row)
    {
        if ((board[WINNING_ROWS[row][0]] != EMPTY) && (board[WINNING_ROWS[row][0]] == board[WINNING_ROWS[row][1]]) && (board[WINNING_ROWS[row][1]] == board[WINNING_ROWS[row][2]]))
        {
            return board[WINNING_ROWS[row][0]];
        }


    }

    //since nobody has won check for a tie (no empty squares left)
    if (count(board.begin(), board.end(), EMPTY) == 0)
    {
        return TIE;
    }

    //since nobody has won and it isn't a tie, the game ain't over
    return NO_ONE;
}

inline bool isLegal(int move, const vector<char>& board)
{
    return (board[move] == EMPTY);
}

int humanMove(const vector<char>& board, char human)
{
    int move = askNumber("Where will you move?", (board.size() - 1));
    while (!isLegal(move, board))
    {
        cout << "\n That square is already occupied, foolish human.\n" << endl;
        int move = askNumber("Where will you move?", (board.size() - 1));
    }
    cout << "Fine....\n";

    return move;
}

int computerMove(vector<char> board, char computer)
{
    unsigned int move = 0;
    bool found = false;

    //if the pc can win on next move I will take that move
    while (!found && move < board.size())
    {
        if (isLegal (move, board))
        {
            board[move] = computer;
            found = winner(board) == computer;
            board[move] = EMPTY;
        }

        if (!found)
        {
            ++move;
        }
    }
    // otherwise if the human can win with the next move that's the move I will make
    if (!found)
    {
        move = 0;
        char human = opponent(computer);

        while (!found && move < board.size())
        {
            if (isLegal(move, board))
            {
                board[move] = human;
                found = winner(board) == human;
                board[move] = human;
            }

            if (!found)
            {
                ++move;
            }
        }
    }

    // otherwise i'll be moving to the next best square

    if (!found)
    {
        move = 0;
        unsigned int i = 0;
        const int BEST_MOVES[] = {4,0,2,6,8,1.3,5,7};
        // pick best open square
        while (!found && i < board.size())
        {
            move = BEST_MOVES[i];
            if (isLegal(move, board))
            {
                found = true;
            }

            ++i;
        }
    }

    cout << "I shall take square number" << move << endl;
    return move;
}

void announceWinner(char winner, char computer, char human)
{
    if (winner == computer)
    {
        cout << winner << "has won!\n";
        cout << "As I predicted human, I am triumphant once more!\n";
    }

    else if (winner == human)
    {
        cout << winner << "has won" << endl;
        cout << "no, no it cannot be! Somehow you tricked me Human!\n";
    }

    else
    {
        cout << "It's just a tie, I'll beat you next time! \n";
        cout << "You cannot beat me though!";
    }   

}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-23T11:46:32+00:00Added an answer on May 23, 2026 at 11:46 am

    The forward declaration of –

    int computerMove(const vector<char>& board, char computer);
    

    is different from the actual implementation. ( Misses the const part )

    int computerMove(vector<char> board, char computer)
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Hello I got problem with scroll on my grid. Here is the code (nothing
Hello i am making an static library for distribution. I am distributing the .h
I'm experimenting with internationalization by making a Hello World program that uses properties files
Hello I am having a hard time making this UI element look the way
Hello friends I am getting the following error while making the foreign key 'tbl_course'
I am making a Excel Addin in VS2010. The following code work fines if
Hello I'm making RSS reader and I'm using DOM. Now I stuck, trying to
Hello i'm working on an app where i'm basically just making a custom multi
I just installed Ubuntu and tried making the famed Hello World program to make
Possible Duplicate: C++ convert int and string to char* Hello, i am making a

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.